VBA 尝试使 WorkSheet_Change 在多张纸上工作,但不是全部
VBA Trying to make WorkSheet_Change work on multiple sheets but not all
我需要制作一个 Worksheet_Change 来检查 2 个不同工作表中 2 个不同单元格中值的变化。但是我有超过 2 张纸,不想使用 Workbook_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
谢谢。
Private 命令将您的子例程限制在当前工作表中,因此您使用该命令来防止子例程更改您的所有工作表是正确的。
正如 newguy 所说,最简单的解决方法是将代码放入您希望它更改的每个工作表模块中,每个模块都使用 Private 命令。
在工作簿的代码模块中,您可以访问在任何工作表上触发的事件。
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 参数。
If Sh.Name = "Sheet1" then
如果您想使用智能感知访问 Sh 对象的属性,请将 Sh 从对象转换回 WorkSheet 对象
Dim ws as WorkSheet
Set ws = Sh
我需要制作一个 Worksheet_Change 来检查 2 个不同工作表中 2 个不同单元格中值的变化。但是我有超过 2 张纸,不想使用 Workbook_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
谢谢。
Private 命令将您的子例程限制在当前工作表中,因此您使用该命令来防止子例程更改您的所有工作表是正确的。
正如 newguy 所说,最简单的解决方法是将代码放入您希望它更改的每个工作表模块中,每个模块都使用 Private 命令。
在工作簿的代码模块中,您可以访问在任何工作表上触发的事件。
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 参数。
If Sh.Name = "Sheet1" then
如果您想使用智能感知访问 Sh 对象的属性,请将 Sh 从对象转换回 WorkSheet 对象
Dim ws as WorkSheet
Set ws = Sh