1
私はこれをuserformsで動作させようとしています。リストボックス内の値を選択すると、その変更イベントが2回呼び出されます。旗を置いた後でも回ることができません。なぜchangeイベントが2回呼び出されたのか分かりません。コントロールがフォーカスを取得したときのように縫い目を検出した後、changeイベントが呼び出されます。以下はコードです。 ListBox1_MouseMoveイベントの下vba listboxイベントが2回発生する
Public eventsOFF As Boolean
Public ctr As Integer
Private Sub ListBox1_Change()
Dim tmp As String, sel As Variant, s As Variant
If eventsOFF Then Exit Sub
eventsOFF = True
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then tmp = tmp & ListBox1.List(i) & ","
Next
ListBox1.Clear
sel = Split(tmp, ",")
ListBox1.AddItem "Entry 1"
ListBox1.AddItem "Entry 2"
ListBox1.AddItem "Entry 3"
ListBox1.AddItem "Entry 4"
ListBox1.AddItem "Entry 5"
For i = 0 To ListBox1.ListCount - 1
For Each s In sel
If s = ListBox1.List(i) Then ListBox1.Selected(i) = True
Next
Next
eventsOFF = False
ctr = ctr + 1
Debug.Print ctr
End Sub
Private Sub UserForm_Initialize()
ListBox1.AddItem "Entry 1"
ListBox1.AddItem "Entry 2"
ListBox1.AddItem "Entry 3"
ListBox1.AddItem "Entry 4"
ListBox1.AddItem "Entry 5"
End Sub
はプログラムで値を選択すると、変更イベント(その後ListBox1.Selected(I)= TRUE)を起動します。私はそれを回避する方法がわかりません。 – Crowcoder
eventsOFFフラグはそれを処理します。面白いのは、デバッグモードでコードをステップ実行しても正常に動作することです。リストボックスのイベント階層はどこで見つけることができますか? – illoosions
私はVBAからのイベントに多くのフックがあるとは思わない。これは、リストボックスを使用して実行しようとしている典型的なものではありません。 – Crowcoder