2017-01-01 10 views
0

私は、ユーザーフォーム上にcombobox1,2,3およびtextbox1を持っていたとしましょう。 After updateイベントがcombobox1に関連付けられていました。 Tabキーが押されたときafter updateイベントが発生しました(コンボボックス2とコンボボックス3を埋める)。このイベントのコードでは、exit subの直前にtextbox1.setfocusがあり、他のコボボックスをタブ順(コンボボックス1,2,3、textbox1)にスキップします。それはうまくいった。VBA Excel更新後のイベントの発生イベントの起動イベントの入力

私は現在combobox2である別のコンボボックスを追加すると、タブの順序が1,2,3,4に変更されました。 After updateはまだcombobox1に関連付けられており、textbox1.setfocusはexitサブの前の最後の行です。残念ながら、after updateのサブラインを終了すると、combobox3 enter eventが発生し、コンボボックス3にフォーカスが移動します。タブオーダーはコンボボックス1、2、3、4であるため、タブオーダーをスキップするので、理解しにくいです。

私はコードをデバッグしたとき、exitboxが実行されたときにコードラインがコンボボックス3のイベントに入力されると、textbox1にフォーカスが設定されました... ユーザーフォームのコードウィンドウの行為で

+0

'Application.Enableevents = False' - 他のイベントが発生しないようにします。 'Exit Sub'または' End Sub'の前にイベントを再びオンにします。 – vacip

+0

@vacipこれは助けになるかもしれませんが、それでもどうしてこのように振る舞い始めましたか? – kkris77

+0

@vacipあなたの解決策をもう1つ質問します。enableイベントをfalseに設定する必要があります。 updateイベントの後に実行する必要がありますが、aupdateイベントの後に 'exit sub'が実行されたときだけイベントを開始し、 'exit sub'の直前でenableイベントを有効にするように提案しました。 – kkris77

答えて

1

次のように:

  • ユーザーフォームがこのの前に任意のサブ/ファンクションコードで

    Dim SetTextBox1Focus As Boolean 
    
  • を置き、それゆえBoolean変数

    スコープComboBox1_AfterUpdate()イベントハンドラの場所:

    Private Sub ComboBox1_AfterUpdate() 
        If (condition that checks if the data entered in combobox1 exists in the database) is True Then 
    
         ... 
         your code to fill comboboxes 2, 3 ad 4 
         ... 
    
         Me.TextBox1.SetFocus 
         SetTextBox1Focus = True '<--| "flag" TextBox1 to receive the focus 
        End If 
    End Sub 
    
  • ものでComboBox2ComboBox3ComboBox4

    Private Sub ComboBox2_Enter() 
        CheckSetTextBox1Focus 
    End Sub 
    
    
    Private Sub ComboBox3_Enter() 
        CheckSetTextBox1Focus 
    End Sub 
    
    
    Private Sub ComboBox4_Enter() 
        CheckSetTextBox1Focus 
    End Sub 
    
  • 追加仮定すると、タブインデックス例えば

    ComboBox1TexBox1にあるすべてのユーザーフォームコントロールのEnterイベントハンドラを追加します続くCheckSetTextBox1Focus()サブ

    Sub CheckSetTextBox1Focus() 
        If SetTextBox1Focus Then 
         Me.TextBox1.SetFocus 
         SetTextBox1Focus = False 
        End If 
    End Sub 
    
+0

@ kkris77、でしたか?それを通って? – user3598756

+0

私は最近、時間がなかった、私は週末に試してみます – kkris77

+0

ありがとう、それは私の場合を解決! – kkris77

関連する問題