• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA初心者です。)

VBA初心者のためのテキストボックスとコンボボックスの関連付け方法

このQ&Aのポイント
  • VBA初心者の方に向けて、ユーザーフォーム上にテキストボックスとコンボボックスを作成し、それらを関連づける方法について説明します。
  • コンボボックスの値を選択したり入力することで、テキストボックスに値を表示することができます。しかし、コンボボックスの値をBackSpaceで消すとエラーが発生します。
  • この問題の解決方法について、詳しい解説をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kotori_D
  • ベストアンサー率36% (54/149)
回答No.1

Private Sub ComboBox2_Change() ということなので、変更されたら以下が実行されるということですよね。 そうなるとComboBox2.Valueの値が何もない状態に"変更"されたらどうなるでしょう。 エラーが出ます。 なので Private Sub ComboBox2_Change() if ComboBox2.Value <> "" then 実行内容 end if end Sub とすればいいかと思いますよ?

kamioni
質問者

お礼

的確かつ明快、そして素早い回答ありがとうございました。

その他の回答 (1)

  • FEX2053
  • ベストアンサー率37% (7995/21381)
回答No.2

この ComboBox2_Change() というプログラムは、「コンボボックスの内容が変わった時」に起動 されるプログラムという意味です。ですので、「データを削除した時」 も「コンボボックスの内容が変わった時」ですから、自動的に起動して しまいます。 起動したら、当然コンボボックスの中身は「ブランク」ですから、 データの被除数(ComboBox2.Value)がブランクになって、計算 出来なくなってしまいます。 これを回避するためには、先にComboBox2.Valueの中身をチェックする 必要があります。例えば IF ComboBox2.Value>0 Then  TextBox1.Value = WorksheetFunction.Round(100 / ComboBox2.Value, 2) Else  TextBox1.Value = "" EndIf と言う様な感じですね。 なお、本来なら「ComboBox2.Value」は文字列が来てしまう可能性があり ますので、文字列でないかも事前にチェックしておく必要があります。

kamioni
質問者

お礼

今までChangeの意味をなんとなく分かったつもりでいましたが、FEX2053さんの解説で100%理解できました。 >文字列でないかも事前にチェックしておく必要があります 自分でやってみます。丁寧な説明、ありがとうございました。

関連するQ&A