4

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

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

1 ответ1

0

Запись макроса в отдельном файле кажется наилучшим способом. Нашел здесь соответствующий код относительно того, как перебрать мои файлы 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .