我有多个 Excel 工作簿,每个工作簿代表一天的数据,每个工作簿都有多个工作表,代表当天的每个事件。
我需要在工作簿中的每个工作表上按顺序运行 6 个宏,然后转到下一个工作簿(所有工作簿都位于桌面上的同一文件夹中)
目前,我使用它(如下)在所有工作表上按顺序运行宏,但我在尝试让某些东西在所有工作簿上运行时遇到困难
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
Run Code Online (Sandbox Code Playgroud)
知道我该怎么做吗?
我没有您的宏,因此我创建了虚拟宏,这些虚拟宏将一些值输出到每个工作簿的每张工作表的“立即”窗口(包含宏的工作簿除外)。
您的代码似乎取决于激活每个工作表的输出宏。这是不好的做法。我将工作簿和工作表名称传递给宏。我输出单元格 A1 ( ) 的值.Cells(1, 1).Value来展示它是如何完成的。
我希望这足以让您开始。有什么不清楚的就问。
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
Run Code Online (Sandbox Code Playgroud)