2016-05-10 4 views
0

Я пытаюсь открыть все файлы *.xlsx в указанной папке и сохранить файлы в массиве.Хранить файлы в массиве

Мой код выглядит следующим образом

Dim Files() As Workbook 
ReDim Files(Count) 

File = Dir(Path & "\*.xlsx") 
Count = 0 

Do While File <> "" 
    Set Files(Count) = Workbooks.Open(Path & File, , True) 
    Count = Count + 1 
    File = Dir() 
Loop 

код, кажется, работает, однако, когда я запускаю его во второй раз (снова нажав кнопку запуска), я получаю номер ошибки 13.

Отладка кода я отслеживал проблему линии

Set Files(Count) = Workbooks.Open(Path & File, , True) 

Как я неопытный с VBA Я предполагаю, что я не сделал это правильный путь ...

Что было бы предпочтительным способом хранения файлов для всех файлов в определенной папке в массиве?

+0

... может быть, программа просто не попадает в рабочие книги должны быть закрыты ... Я добавил 'Files (Count) .close()', который решил проблему. – speendo

+1

, но таким образом вы пропустите ссылку на объект «Workbook», только что хранящуюся в 'Files()' ... – user3598756

ответ

-1

Код должен быть:

Dim Files() As Workbook 
Dim Count As Integer 
ReDim Files(Count) 

File = Dir(Path & "\*.xlsx") 
Count = 0 

Do While File <> "" 
    ReDim Preserve Files(Count) 
    Set Files(Count) = Workbooks.Open(Path & File, , True) 
    Count = Count + 1 
    File = Dir() 
Loop 

Вы должны Redim своего массива. Сохранение хранит существующие данные.

+0

Ваш первый Redim должен быть удален. Redimming каждый раз много работы для VB. –

+0

спасибо, но размер массива не является проблемой (я храню количество файлов в папке до 'Count', прежде чем я укажу' ReDim Files (Count) '). Я пробовал свой код, но все равно получаю RuntimeError 13. Я действительно думаю, что у меня есть ошибка в Workbooks.Open ... – speendo

+0

_ "(Я храню количество файлов в папке для подсчета до того, как я укажу ReDim Files (Count)). «_ -> Итак, что это такое« Count = Count + 1'for? – user3598756

0

вы упускаете путь сепаратор

Set Files(Count) = Workbooks.Open(Path & "\" & File, , True) 
+0

Спасибо, но у' Path' уже есть обратная косая черта ... :( – speendo

+1

ну, я бы не сказал, что с тех пор, как вы пишете 'File = Dir (Path &" \ *. Xlsx ")' – user3598756