从模块访问工作表方法

这是我正在努力实现的。 我想让用户看到一个特定的工作表已被更改的消息,并要求他手动在该表上运行一个macros。 我可以像这样使用worksheet_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工作簿,需要更新,我可以很容易地取代旧的模块更新与另一个macros,我通常使用更新工作簿中的代码。

在你的自定义模块中,放置这个:

 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 

您可以创build一个加载项文件作为这种情况下的应用程序级别的事件处理程序https://support.microsoft.com/en-us/kb/213566

这种方式的好处: – 可以用于你打开的每个工作簿,而不需要复制任何代码