TL;DR: How to prevent ActiveX ComboBox from being triggerd when adding or deleting items in the source list
Please note that I have seen this post and it is not the same problem or rather it does not provide a workable solution for my current project.
You can replicate the problem by creating an ActiveX ComboBox and giving it a source list range on the sheet from A1:A4, Output cell B2, then adding this code:
Private Sub ComboBox1_Change()
MsgBox ("hello")
End Sub
Sub TestAddItem()
Range("A4").Insert xlDown
Range("A4").Value = "NewItem"
End Sub
If you run TestAddItem
, upon getting to the "New Item" line, the Change
event for the combo box will be triggered.
I have searched for solutions to this, but could only find the workaround suggestion to add a Boolean Variable that checks whether or not to actually proceed with the code in the change event. Here is what that would look like in my example:
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
The same thing happens if the destination of the combo box is changed. Adding or deleting items from the source range manually does not trigger the event.
Note: Application.EnableEvents = False
has no impact on ActiveX elements! They will fire anyway (by design from Microsoft)
How do I prevent this from happening? As it stands, this ActiveX element is unusable, or at least I can't use it if I need to set Boolean variables everywhere in my code.
ComboBox1.Value = vbNullString
in the first line ofSub TestAddItem()
(just before the rest of your code). – Ralph