2010-07-30 1 views
6

Мне нужно написать макрос в VBA, который будет открывать каждый файл в заданном каталоге один за другим и запускать макрос на них.как я могу открыть ВСЕ файлы excel один за другим и запустить макрос

до сих пор у меня есть что-то вроде

for i = 1 to number_of_files 
    open Dir("C:\yourPath\*.*", vbNormal) 
    call some_macro 
    close file 
next i 
+3

Вы начали? Какой у вас код до сих пор? Макрос находится в каждой книге или вы пытаетесь выполнить макрос в одной книге против других? – Jay

+0

макрос находится только в ОДНОЙ книге –

ответ

11

Называя Dir() функции с соответствующим фильтром, например, "c:\folder\*.xls", вы начинаете перечисление и получить первое имя файла.
После этого, повторно называя функцию Dir() без каких-либо параметров, вы получите все имена файлов *.xls, по одному для каждого вызова.

Вы открываете книгу по телефону Workbooks.Open(full_path). Это дает вам объект Workbook, против которого вы можете запустить макрос.

Способ Workbook объекта закрывает книгу. Вы можете использовать .Close(SaveChanges:=True), чтобы сохранить изменения, .Close(SaveChanges:=False), чтобы отменить изменения или опустить параметр, чтобы пользователь решил.

+0

как бы закрыть файл? –

+1

Вызов '.Close()'. – GSerg

-2

Вот простой способ объект VBA, чтобы сделать это:

Dim fs As FileSearch 
Dim i As Integer 
Dim wbk As Workbook 

Set fs = Application.FileSearch 

With fs 
    .LookIn = ThisWorkbook.Path 
    .FileName = "*.xls" 
    For i = 1 to .Execute() 
     Set wbk = Workbooks.Open(.FoundFiles(i)) 
     ''//RUN MACRO HERE 
     wbk.Close(SaveChanges:=True) 
    Next i 
End With 
+2

Это работает только для Excel 2003 и ниже. – Patrick

Смежные вопросы