vba – 在运行macros之前处理工作表更改事件

假设一个带有两个vba Sub过程的Excel工作表:

  • Sub1:工作表上的处理程序更改

     Private Sub Worksheet_Change(ByVal Target As range) 'do something End Sub 
  • Sub2:点击button时运行的Sub

当用户在编辑单元格时点击Sub2button时,两个Sub按Sub2的顺序执行(因为他点击了button) – > Sub1(因为编辑操作已经终止)。

我怎样才能扭转这个秩序? 我想要处理工作表变化之前运行与点击button关联的Sub

两个Sub必须保持无关。 IE浏览器。 如果单击Sub2button并且没有进行单元编辑,则只应执行Sub2。

我想出了这个解决scheme:

 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 

它通过将实际处理程序推迟到事件队列的末尾来工作。 因此,可能的待处理的工作表更改事件将在实际处理程序执行之前处理。

这意味着Sub2在相关的Sub1表中进行更改,因此…

使用波纹pipe方法:

 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过程正在运行时,另一个事件过程未激活。