TL; DR:如何在源列表中添加或删除项目时阻止触发ActiveX ComboBox
请注意我已经看过this post并且它不是同一个问题,或者它没有为我当前的项目提供可行的解决方案。
您可以通过创建ActiveX ComboBox并在A1:A4,输出单元格B2的工作表上为其提供源列表范围,然后添加此代码来复制问题:
Private Sub ComboBox1_Change()
MsgBox ("hello")
End Sub
Sub TestAddItem()
Range("A4").Insert xlDown
Range("A4").Value = "NewItem"
End Sub
如果您在进入" New Item"之后运行TestAddItem
在行中,将触发组合框的Change
事件。
我已经搜索了这个解决方案,但只能找到解决方法建议添加一个布尔变量来检查是否实际继续更改事件中的代码。这是我的例子中的样子:
Option Explicit
Public bMakeItHappen As Boolean
Private Sub ComboBox1_Change()
If bMakeItHappen Then
MsgBox ("hello")
End If
End Sub
Sub TestAddItem()
bMakeItHappen = False
Range("A4").Insert xlDown
Range("A4").Value = "NewItem"
End Sub
如果更改了组合框的目标,则会发生同样的情况。手动添加或删除源范围中的项目不会触发事件。
注意:Application.EnableEvents = False
对ActiveX元素没有影响!他们无论如何都会开火(来自微软的设计)
如何防止这种情况发生?目前,这个ActiveX元素无法使用,或者至少我无法使用它,如果我需要在代码中的任何地方设置布尔变量
答案 0 :(得分:4)
由于涉及事件计时,它就足以满足工作表代码窗格中的以下代码:
loaded === total