2016-06-13 592 views
0

我需要製作一個Worksheet_Change,用於檢查2張不同工作表中2個不同單元格中值的更改。但是,我有兩張以上的工作表,不想使用Workbook_Change,因此這些其他工作表不受影響。VBA嘗試使WorkSheet_Change在多張工作表上工作但不是全部

我的代碼工作,但只檢查一個工作表中的單元格,但不檢查其他工作表。我需要檢查兩個工作表。

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("M9")) Is Nothing Then 
    Application.EnableEvents = False 
    Application.ScreenUpdating = False 
    Call Macro5 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

    End If 

If Not Intersect(Target, Range("I88")) Is Nothing Then 
    Application.EnableEvents = False 
    Application.ScreenUpdating = False 
    Call Macro6 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

    End If 

    End Sub 

謝謝。

+1

您必須將代碼放置在其他工作表模塊中,然後 – newguy

+0

哇我一直在使用excel一段時間,從來沒有意識到我可以爲不同的表單添加不同的代碼。非常感謝你的幫助 :)。 – Artak

+2

還有工作簿級別的Workbook_SheetChange(ByVal Sh As Object,ByVal Target As Range)'您可以使用它來避免重複您的代碼(並且如果'Sh.Name'不是您的受監控工作表之一,則退出) –

回答

0

在工作簿的代碼模塊中,您可以訪問在任何工作表上觸發的事件。

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
     Application.EnableEvents = False 
    Application.ScreenUpdating = False 

    If (Not Intersect(Target, Range("M9")) Is Nothing) Then 
     Call Macro5 
    ElseIf (Not Intersect(Target, Range("M9")) Is Nothing) Then 
     Call Macro6 
    End If 

    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

End Sub 

如果您需要了解事件觸發的工作表,則可以使用ByVal Sh As Object參數。

如果Sh.Name =「工作表Sheet1」,然後

如果你想訪問使用智能感知噓對象的屬性,投噓從對象背背到工作表對象

Dim ws as WorkSheet 
Set ws = Sh 
0

Private命令將您的子程序限制爲當前工作表,所以您在使用該命令時保持子程序不會改變您的所有工作表是正確的。

像newguy說的那樣,最簡單的解決方法是將代碼放置在每個您希望更改的工作表模塊中,每個工作表模塊都使用Private命令。

相關問題