3

私はこのフォーラムの初めてのユーザーです。これが私のシナリオです。ユーザーフォームには、コンボボックス、2 つのテキストボックス、および [OK] ボタンがあります。ユーザーがコンボボックスのドロップダウン リストから選択を行うと、コンボボックスの変更イベントがトリガーされ、イベント処理コードによって、ユーザーの選択に基づいてワークシートからの情報がテキスト ボックスに入力されます。ユーザーは、テキストボックスの一方または両方で情報を編集できます。次に、ユーザーは「OK」を押します。次に、[OK] ボタンのクリック イベントによって、変更された情報がテキスト ボックスからワークシートのセルに書き込まれます。かなりまっすぐに見えます。私の問題は次のとおりです。プロパティが参照されるたびに、コンボボックスの変更イベントがトリガーされるように見えます。具体的には、以下の cb_CustomersUpdateOK_Click() サブルーチンの 3 つのインスタンスは、コンボボックスの ListIndex プロパティが参照されます。イベントがいつトリガーされたかを示すために、Change イベント コードに Msgbox を配置しました。OK クリック イベント コードの 3 つの assign ステートメントのそれぞれでブレークポイントを使用すると、3 つのステートメントのそれぞれでコンボボックスがトリガーされました (Msgbox が表示されました)。トリガーが発生すると、テキストボックス内の編集された情報が、コンボボックスの選択からの初期データで上書きされます。(1) コンボボックスの変更イベントがこのようにトリガーされるのはなぜですか? (2)そうならないためにはどうすればいいですか?3 つのステートメントのそれぞれでトリガーされた (Msgbox が表示された) コンボボックス。トリガーが発生すると、テキストボックス内の編集された情報が、コンボボックスの選択からの初期データで上書きされます。(1) コンボボックスの変更イベントがこのようにトリガーされるのはなぜですか? (2)そうならないためにはどうすればいいですか?3 つのステートメントのそれぞれでトリガーされた (Msgbox が表示された) コンボボックス。トリガーが発生すると、テキストボックス内の編集された情報が、コンボボックスの選択からの初期データで上書きされます。(1) コンボボックスの変更イベントがこのようにトリガーされるのはなぜですか? (2)そうならないためにはどうすればいいですか?

私は過去数時間これを調査してきましたが、ひどく役立つものは何も見つかりませんでした. どんな助けでも大歓迎です。さらに情報が必要な場合はお知らせください。

Private Sub combo_CustomersUpdateLastName_Change()

    MsgBox "combobox changed"       'For debug purposes

    With Sheets("Customers")
        tb_CustomersUpdateFirstName.Value = .Cells(combo_CustomersUpdateLastName.ListIndex + 2, 2).Value
        tb_CustomersUpdatePhone.Value = .Cells(combo_CustomersUpdateLastName.ListIndex + 2, 3).Value
    End With

End Sub

...

Private Sub cb_CustomersUpdateOK_Click()

    'Copy the updated customer data from the controls to the Customers sheet
    With Sheets("Customers")
        .Cells(combo_CustomersUpdateLastName.ListIndex + 2, 1).Value = combo_CustomersUpdateLastName.Value
        .Cells(combo_CustomersUpdateLastName.ListIndex + 2, 2).Value = tb_CustomersUpdateFirstName.Value
        .Cells(combo_CustomersUpdateLastName.ListIndex + 2, 3).Value = tb_CustomersUpdatePhone.Value

        'Sort the customer data in case the last name or first name was updated
        Range("CustomerInfo").Sort Key1:=.Columns("A"), Key2:=.Columns("B")
    End With

    MsgBox "Customer data updated."

    Unload form_CustomersUpdate

End Sub
4

1 に答える 1