假设Excel工作表包含两个vba Sub
过程:
Sub1:工作表上的处理程序更改
Private Sub Worksheet_Change(ByVal Target As range)
'do something
End Sub
Sub2:单击按钮时运行的Sub
当用户在编辑单元格时单击Sub2按钮时,两个Sub
都按Sub2的顺序执行(因为他点击了按钮) - > Sub1(因为编辑操作已终止)。
如何撤销此订单?我想在运行与点击按钮相关联的Sub
之前处理工作表更改。
两个Sub
必须保持不相关。 IE浏览器。如果单击Sub2按钮并且没有进行单元格编辑,则只应执行Sub2。
答案 0 :(得分:3)
我提出了这个解决方案:
Private Sub Worksheet_Change(ByVal Target As range)
'handle worksheet changes here
End Sub
'Workaround to make sure other pending events (like worksheet changes) are handled first.
'It schedules handleButtonClick at the end of the event queue
Public Sub handleButtonClick ()
Application.OnTime Now, "handleButtonClick_private"
End Sub
Private Sub handleButtonClick_private ()
'handle button click here
End Sub
它的工作原理是将实际的处理程序推迟到事件队列的末尾。因此,将在执行实际处理程序之前处理可能的挂起工作表更改事件。
答案 1 :(得分:0)
这意味着Sub2
在Sub1
的相关工作表中进行了更改,因此......
使用下面的方法:
Private Sub Worksheet_Change(ByVal Target As range)
Application.EnableEvents = False 'Edited
If ActiveSheet.Name = "SheetName" Then
'do something
End If
Application.EnableEvents = True 'Edited
End Sub 'Worksheet_Change
<强>被修改强>
Sub Sub2
Application.EnableEvents = False
'do something
Application.EnableEvents = True
End Sub 'Sub2
因此,Sub1
过程仅在相关工作表已激活时运行,并且当Sub2
过程正在运行时,另一个事件过程尚未激活。