2016-04-14 18 views
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 
+0

はプログラムで値を選択すると、変更イベント(その後ListBox1.Selected(I)= TRUE)を起動します。私はそれを回避する方法がわかりません。 – Crowcoder

+0

eventsOFFフラグはそれを処理します。面白いのは、デバッグモードでコードをステップ実行しても正常に動作することです。リストボックスのイベント階層はどこで見つけることができますか? – illoosions

+0

私はVBAからのイベントに多くのフックがあるとは思わない。これは、リストボックスを使用して実行しようとしている典型的なものではありません。 – Crowcoder

答えて

0

次の行は、あなたの問題を解決する挿入

ListBox1.SetFocus

+0

このような非常に小さな答えは、元の質問の下のコメントとして簡単に述べることができます – Dbz

関連する問題