2016-06-13 593 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命令。

相关问题