2015-12-11 190 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