Применение функции VBA Excel ко многим файлам

У меня есть функция Excel VBA и около 30 файлов с данными (и той же структурой данных), к которой я хотел бы применить функцию.

мой подход состоял бы в том, чтобы написать макрос в отдельном файле Excel, который открывает файлы Excel и выполняет необходимые изменения в каждом из 30 файлов.

2
задан lexeter
02.01.2023 9:18 Количество просмотров материала 3565
Распечатать страницу

1 ответ

Запись макроса в отдельный файл кажется лучшим способом. Найден соответствующий код здесь о том, как перебирать Мои файлы Excel:

Sub ProcessFiles()
Dim Filename, Pathname As String
Dim wb As Workbook

Pathname = ActiveWorkbook.Path & "\Files\"
Filename = Dir(Pathname & "*.xls")
Do While Filename <> ""
    Set wb = Workbooks.Open(Pathname & Filename)
    DoWork wb
    wb.Close SaveChanges:=True
    Filename = Dir()
Loop
End Sub

Sub DoWork(wb As Workbook)
With wb
    'Do your work here
    .Worksheets(1).Range("A1").Value = "Hello World!"
End With
End Sub

" в этом примере DoWork () - это макрос, который применяется ко всем файлам. Убедитесь, что вся обработка в макросе всегда выполняется в контексте wb (текущей открытой книги)."

найдено дополнительный код о том, как вставить соответствующий код VBA в каждый из моих 30 файлов здесь:

Public Sub AddNewModule()

Dim proj As VBIDE.VBProject
Dim comp As VBIDE.VBComponent

Set proj = ActiveWorkbook.VBProject
Set comp = proj.VBComponents.Add(vbext_ct_StdModule)
comp.Name = "MyNewModule"

Set codeMod = comp.CodeModule

  With codeMod
  lineNum = .CountOfLines + 1
  .InsertLines lineNum, "Public Sub ANewSub()"
  lineNum = lineNum + 1
  .InsertLines lineNum, "  MsgBox " & """" & "I added a module!" & """"
  lineNum = lineNum + 1
  .InsertLines lineNum, "End Sub"
  End With

End Sub
0
отвечен lexeter 2023-01-03 17:06

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх