【发布时间】:2015-05-07 10:19:13
【问题描述】:
我有一个包含不同工作表的工作簿。
我有不同工作表的宏。
我有一个用于所有以SOD 开头的工作表的宏,
另一个以DMNE 开头的工作表宏,另一个以SAS 开头的工作表宏。
我有一个用于跟踪使用情况的宏。
我的要求是当我单击以SOD 开头的工作表时,如何运行与SOD 相关的宏。在所有工作表中都是如此。
【问题讨论】:
标签: vba excel excel-2010
我有一个包含不同工作表的工作簿。
我有不同工作表的宏。
我有一个用于所有以SOD 开头的工作表的宏,
另一个以DMNE 开头的工作表宏,另一个以SAS 开头的工作表宏。
我有一个用于跟踪使用情况的宏。
我的要求是当我单击以SOD 开头的工作表时,如何运行与SOD 相关的宏。在所有工作表中都是如此。
【问题讨论】:
标签: vba excel excel-2010
您可以将 sub 保存到您的 ThisWorkbook 模块中。它将触发任何工作表激活事件。
工作表可以作为参数传递给被调用的子。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Left(Sh.Name, IIf(InStr(Sh.Name, "-") > 0, InStr(Sh.Name, "-") - 1, Len(Sh.Name)))
Case "SOD"
Call SOD(Sh)
Case "SAS"
Call SAS(Sh)
Case "DMNE"
Call DMNE(Sh)
Case "Usage Tracking"
Call UsageTracking
Case Else
MsgBox "sheet procedure not defined"
End Select
End Sub
【讨论】:
这取决于您保存宏的位置。每个录制的宏都保存在一个模块文件中。您必须打开 Visual Basic 编辑器 (Alt+F11),然后您可以在工作表上定义一个子例程(双击 Worksheet1 打开一个新的编辑器窗口)。在那里你可以使用这样的东西:
Private Sub Worksheet_Activate()
If Left(ActiveSheet.Name, 3) = "SOD" then
Call Module1.Macro1
Call Module2.Macro2
End If
End Sub
【讨论】: