2012-03-25 6 views
0

Ich habe mehr Excel-Dateien jeweils ein Tag-Daten darstellen, wobei jede Arbeitsmappe mehrere Blätter hat jedes Ereignis am Tag darstellen ..Ausführen mehrere Makros, um über mehr Excel-Dateien - vba

ich brauche 6 Makros, um laufen über jedes Blatt in einer Arbeitsmappe und dann zur nächsten Arbeitsmappe wechseln (alle Arbeitsmappen befinden sich im selben Ordner auf dem Desktop)

im Moment verwende ich dies (unten), um die Makros in Reihenfolge über alle Blätter auszuführen aber ich habe Probleme beim Versuch, etwas über alle Arbeitsbücher zu laufen

Sub RUN_FILL() 
Dim sh As Worksheet 

For Each sh In ThisWorkbook.Worksheets 
sh.Activate 

Call macro_1 
Call macro_2 
Call macro_3 
Call macro_4 
Call macro_5 
Call macro_6 

Next sh 
End Sub 

irgendeine idee wie ich das machen könnte?

+0

Sind alle Arbeitsmappen zu Beginn geöffnet oder möchten Sie sie nacheinander öffnen/verarbeiten/schließen? Passt auch die Reihenfolge der Arbeitsmappen? –

+0

Die Arbeitsmappen sind alle anfänglich geschlossen, abgesehen von einer ID, von der aus sie ausgeführt werden, spielt die Reihenfolge der Arbeitsmappen keine Rolle, sondern nur die Reihenfolge, in der die Makros auf den einzelnen Arbeitsblättern ausgeführt werden. – sam

Antwort

4

Ich habe kein Makros, damit ich Dummy-Makros erstellt habe einige Werte, die Ausgabe in die Direkt-Fenster für jedes Blatt von jeder Arbeitsmappe (mit Ausnahme der Arbeitsmappe, die das Makro enthält).

Ihr Code scheint davon abhängig zu sein, dass das Ausgabemakro jedes Arbeitsblatt aktiviert. Das ist schlechte Praxis. Ich übergebe die Arbeitsmappe und den Arbeitsblattnamen an die Makros. Ich gebe den Wert von Zelle A1 (.Cells(1, 1).Value) aus, um zu zeigen, wie es gemacht wird.

Ich hoffe, das ist genug, um Sie zu beginnen. Fragen Sie, ob etwas unklar ist.

Option Explicit 
Sub ControlCall() 

    Dim FileNameCrnt As String 
    Dim InxWSheet As Long 
    Dim MsgErr As String 
    Dim PathCrnt As String 
    Dim RowReportCrnt As Long 
    Dim WBookCtrl As Workbook 
    Dim WBookOther As Workbook 
    Dim WSheetNameOtherCrnt As String 

    If Workbooks.Count > 1 Then 
    ' It is easy to get into a muddle if there are multiple workbooks 
    ' open at the start of a macro like this. Avoid the problem. 
    Call MsgBox("Please close all other workbooks " & _ 
       "before running this macro", vbOKOnly) 
    Exit Sub 
    End If 

    Application.ScreenUpdating = False 

    Set WBookCtrl = ActiveWorkbook 

    ' Assume all the workbooks to be processed are in the 
    ' same folder as the workbook containing this macro. 
    PathCrnt = WBookCtrl.Path 

    ' Add a slash at the end of the path if needed. 
    If Right(PathCrnt, 1) <> "\" Then 
    PathCrnt = PathCrnt & "\" 
    End If 

    FileNameCrnt = Dir$(PathCrnt & "*.xl*") 

    Do While FileNameCrnt <> "" 

    If FileNameCrnt <> WBookCtrl.Name Then 
     ' Consider all workbooks except the one containing this macro 
     Set WBookOther = Workbooks.Open(PathCrnt & FileNameCrnt) 

     For InxWSheet = 1 To WBookOther.Worksheets.Count 
     WSheetNameOtherCrnt = WBookOther.Worksheets(InxWSheet).Name 

     Call macro_1(WBookOther, WSheetNameOtherCrnt) 
     Call macro_2(WBookOther, WSheetNameOtherCrnt) 
     Call macro_3(WBookOther, WSheetNameOtherCrnt) 
     Call macro_4(WBookOther, WSheetNameOtherCrnt) 
     Call macro_5(WBookOther, WSheetNameOtherCrnt) 
     Call macro_6(WBookOther, WSheetNameOtherCrnt) 
     Next 
     WBookOther.Close SaveChanges:=False 
    End If 
FileNameCrnt = Dir$() 
Loop 

Application.ScreenUpdating = True 

End Sub 
Sub macro_1(WBookOther As Workbook, WSheetNameOtherCrnt As String) 

    With WBookOther 
    With .Worksheets(WSheetNameOtherCrnt) 
     Debug.Print "1 " & WBookOther.Name & " " & _ 
        WSheetNameOtherCrnt & " " & .Cells(1, 1).Value 
    End With 
    End With 

End Sub 
Sub macro_2(WBookOther As Workbook, WSheetNameOtherCrnt As String) 

    With WBookOther 
    With .Worksheets(WSheetNameOtherCrnt) 
     Debug.Print "2 " & WBookOther.Name & " " & _ 
        WSheetNameOtherCrnt & " " & .Cells(1, 1).Value 
    End With 
    End With 

End Sub 
Sub macro_3(WBookOther As Workbook, WSheetNameOtherCrnt As String) 

    With WBookOther 
    With .Worksheets(WSheetNameOtherCrnt) 
     Debug.Print "3 " & WBookOther.Name & " " & _ 
        WSheetNameOtherCrnt & " " & .Cells(1, 1).Value 
    End With 
    End With 

End Sub 
Sub macro_4(WBookOther As Workbook, WSheetNameOtherCrnt As String) 

    With WBookOther 
    With .Worksheets(WSheetNameOtherCrnt) 
     Debug.Print "4 " & WBookOther.Name & " " & _ 
        WSheetNameOtherCrnt & " " & .Cells(1, 1).Value 
    End With 
    End With 

End Sub 
Sub macro_5(WBookOther As Workbook, WSheetNameOtherCrnt As String) 

    With WBookOther 
    With .Worksheets(WSheetNameOtherCrnt) 
     Debug.Print "5 " & WBookOther.Name & " " & _ 
        WSheetNameOtherCrnt & " " & .Cells(1, 1).Value 
    End With 
    End With 

End Sub 
Sub macro_6(WBookOther As Workbook, WSheetNameOtherCrnt As String) 

    With WBookOther 
    With .Worksheets(WSheetNameOtherCrnt) 
     Debug.Print "6 " & WBookOther.Name & " " & _ 
        WSheetNameOtherCrnt & " " & .Cells(1, 1).Value 
    End With 
    End With 

End Sub 
1

Pseudo-Code Umriss:

For each file in folder ' I'd use the FileSystemObject for this 
    Set wb = Workbooks.Open file 
    For Each sh in wb.worksheets 
     .... 
    Next 
    wb.save 
    wb.close 
Next 
Verwandte Themen