Excel ブックで ActiveX イベントがトリガーされないようにするより良い方法を探しています (ただし、これは ActiveX オブジェクトを使用するすべての Office アプリに適用されます)。
Application.EnableEvents = false
これは ActiveX では機能しませんが、うまくいけば に似たものになります。
以下の例では、グローバル ブール値を使用するのは簡単ですが、ActiveX オブジェクト用のイベント ハンドラーがたくさんあるので、ActiveX イベントを一時的に無効にするために普遍的に適用できるものの方がはるかに簡単です。これらのメソッドのすべてに if/exit サブステートメントを追加したくはありません。
この問題を実証するには、ワークシートに ActiveX コンボボックスを作成し、そのシート モジュールに以下を追加します。
Public initializingContent As Boolean
Private Sub intializeAllActiveXContent()
'this doesn't apply to activeX events :'(
Application.EnableEvents = False
'this could work but is not really elegant
'change this to false to show my problem in
'the intermediate window (called not once but twice)
initializingContent = True
ComboBoxTest.Clear
ComboBoxTest.AddItem ("item1")
ComboBoxTest.AddItem ("item2")
ComboBoxTest.AddItem ("item3")
'select the top value in the box
ComboBoxTest.value = "item1"
initializingContent = False
Application.EnableEvents = True
End Sub
Private Sub ComboBoxTest_Change()
'I really don't want to have to wrap EVERY single ActiveX method
'with something like this for a whole variety of reasons...
If initializingContent Then Exit Sub
Debug.Print "do stuff I don't want to happen when intializeAllActiveXContent() runs " & _
"but I do when user changes box"
End Sub