多个Worksheet_change事件互相触发

我有一个工作簿在工作表中有多个Worksheet_Change事件。 这些macros中的每一个都与一个活动的xcombobox有关。

问题是,当我改变其中一个combobox的macros触发(如预期的),从而启动另一个macros(这是不假设运行)。 我已经设置了Application.EnableEvents = False但问题可能是我正在改变一个cell.value,它链接到另一个combobox,因此也链接到另一个worksheet_change事件。

如我所见,解决方法可能是只运行macros,如果combobox是实际选定的combobox,但这里是第二个问题。 我无法find一个方法让vba返回活动combobox的名称。

请注意,这些combobox未连接到用户窗体,它们只是直接放置在工作表上。

有没有人有任何想法如何解决这个问题?

任何帮助深表感谢,

我看到有两种可能的解决scheme

1 – 正如加里的学生所说,你可能已经在不知不觉中切换了Application.EnableEvents ,你可以试着去捕获发生的事情。

2 – 也许设置一个叫做DontRunMacros的全局布尔variables,并在第一个macros开始时将其设置为TRUE ,并在结尾处设置为FALSE 。 然后,你只要有其他macros开始If DontRunMacros Then Exit Sub – 这将阻止其他人运行,不pipe事件,火灾…

希望有所帮助!

你也可以设置一个全局variables处理事件。 您在每次更改事件开始时检查它。

 Dim ufEventsDisabled As Boolean Sub YourSub() ufEventsDisabled = False Range("A1").Value=1 'This triggers the event ufEventsDisabled = True Range("A1").Value=1 'This doesn't trigger the event End Sub Private Sub Worksheet_Change(ByVal Target As Range) If ufEventsDisabled=True Then Goto ExitEvent: 'Your regular worksheet code ExitEvent: ufEventsDisabled=False End Sub 

有可能是一个错误重新启用事件………..你总是可以插入:

 MsgBox Application.EnableEvents 

在你的代码中的点来捕获这个。

非常感谢您的快速回复。

我最终在工作表中使用了一个命名的单元格,类似于hstay所取代的。

 If ThisWorkbook.Sheets("MD").Range("AllowMacro").Value = 0 Or Me.Name <> ActiveSheet.Name Then Exit Sub 

但是,因为我需要工作表来计算代码运行时的一些单元格,我不能设置application.Calculation = xlManual。 所以代码仍然试图执行一堆其他的更改事件,但上面的代码阻止它们不仅仅运行第一行。 然而,这仍然需要很多时间,这是相当令人沮丧的。 猜猜我只需要再次考虑这个问题。

这就是我如何开始和结束我所有的workheet_chnage事件:

 If ThisWorkbook.Sheets("MD").Range("AllowMacro").Value = 0 Or Me.Name <> ActiveSheet.Name Then Exit Sub ThisWorkbook.Sheets("MD").Range("AllowMacro").Value = 0 Application.ScreenUpdating = False Application.EnableEvents = False 'some random code that trigger other change_events Application.EnableEvents = True Application.ScreenUpdating = True ThisWorkbook.Sheets("MD").Range("AllowMacro").Value = 1