Wenden Sie eine Excel VBA-Funktion auf viele Dateien an

4

Ich habe eine Excel VBA-Funktion und ungefähr 30 Dateien mit Daten (und derselben Datenstruktur), auf die ich die Funktion anwenden möchte.

Mein Ansatz wäre, ein Makro in eine separate Excel-Datei zu schreiben, die die Excel-Dateien öffnet und die erforderlichen Änderungen an jeder der 30 Dateien vornimmt.

lexeter
quelle
Sie können Ihre Funktion in eine makrofähige Vorlage oder in ein Add-In einfügen, ohne den Code in jede Arbeitsmappe einfügen zu müssen.
Máté Juhász

Antworten:

0

Das Schreiben des Makros in eine separate Datei scheint der beste Weg zu sein. Relevanten Code gefunden Hier zum Durchlaufen meiner Excel-Dateien:

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

"In diesem Beispiel ist DoWork () Ihr Makro, das Sie auf alle Ihre Dateien anwenden. Stellen Sie sicher, dass Ihre gesamte Verarbeitung in Ihrem Makro immer im Kontext des wb (aktuell geöffnete Arbeitsmappe) erfolgt."

Es wurde zusätzlicher Code zum Einfügen des entsprechenden VBA-Codes in jede meiner 30 Dateien gefunden Hier :

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
lexeter
quelle
1
Links können jederzeit unterbrochen werden. Bitte fügen Sie Ihrer Antwort eine Zusammenfassung hinzu.
Máté Juhász