私はこのフォーラムの初めてのユーザーです。これが私のシナリオです。ユーザーフォームには、コンボボックス、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