2015-12-11 126 views
1

这是我正在努力实现的。我想让用户看到特定工作表已被更改的消息,并要求他手动在该表上运行宏。我可以使用这样的工作表变更方法从模块访问工作表方法

Private Sub OptionButton1_Click() 

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

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

+0

为什么不调用其他宏(用vba函数调用methodName)? –

回答

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 
+0

感谢您的解决方案。我的问题仍然存在,因为在用新代码更新工作簿时,无法在工作表模块中添加Worksheet_Change方法。我只能用另一个宏更新我的自定义模块。 – justanotherguy

+0

看看这个:http://www.cpearson.com/excel/vbe.aspx,这将允许你直接在现有模块中插入代码,例如'ThisWorkbook'模块中的第二个命题'Workbook_SheetChange'! – R3uK