从模块访问工作表方法

时间:2015-12-11 12:20:07

标签: excel vba excel-vba

这是我想要实现的目标。我希望向用户显示特定工作表已更改的消息,并要求他手动在该工作表上运行宏。我可以像这样使用workheet_change方法

Private Sub OptionButton1_Click()

Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Hey! Cell " & Target.Address(0, 0) & " just changed!", 
End Sub

上面的代码必须在工作表模块中。我想知道是否有办法从我的自定义模块执行此操作,原因是我有成千上万的excel工作簿需要更新,我可以轻松地将旧模块替换为我通常使用的另一个宏更新的模块更新工作簿中的代码。

2 个答案:

答案 0 :(得分:3)

在自定义模块中,将其放置:

Public Sub My_Code_for_Changes(Target As Range)
    MsgBox "Hey! Cell " & Target.Address(0, 0) & " just changed!"
End Sub

在你的工作表模块中,你只需要放置它:

Private Sub Worksheet_Change(ByVal Target As Range)
    My_Code_for_Changes Target
End Sub

或者处理工作簿的所有工作表(可以排除一些):

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name = "NameToExclude" Then Exit Sub
    My_Code_for_Changes Target, Sh
End Sub

有了这个:

Public Sub My_Code_for_Changes(Target As Range, Sh As Worksheet)
    MsgBox "Hey! Cell " & Target.Address(0, 0) & " in sheet " & Sh.Name & " just changed!"
End Sub

答案 1 :(得分:0)

您可以为此案例创建一个加载项文件作为应用程序级事件处理程序 https://support.microsoft.com/en-us/kb/213566

这种方式的优点: - 可以用于您打开的每个工作簿,而无需再次复制任何代码