Aplique uma função Excel VBA a muitos arquivos

3

Eu tenho uma função Excel VBA e cerca de 30 arquivos com dados (e a mesma estrutura de dados) aos quais gostaria de aplicar a função.

Minha abordagem seria escrever uma macro em um arquivo separado do Excel que abre os arquivos do Excel e executa as modificações necessárias em cada um dos 30 arquivos.

    
por lexeter 27.10.2015 / 12:34

1 resposta

0

Escrever a macro em um arquivo separado parece ser o melhor caminho. Encontrado o código relevante aqui sobre como executar um loop nos meus arquivos do 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

"Neste exemplo, DoWork () é sua macro que você aplica a todos os seus arquivos. Certifique-se de fazer todo o seu processamento em sua macro sempre no contexto do wb (pasta de trabalho atualmente aberta)."

Encontrei código adicional sobre como inserir o código VBA relevante em cada um dos 30 arquivos aqui :

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
    
por 27.10.2015 / 13:00