こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBAでコンボボックスで選択

コンボボックスで選択したいと思っていますがうまくいきません。
教えてください。
Private Sub userform_initialize()
 With ComboBox2
  .Font.Size = 12
  .AddItem "A"
  .AddItem "B"
  .AddItem "C"
 End With
If ComboBox2 = "A" Then
 With ComboBox3
  .Font.Size = 12
 .AddItem "a-1"
 .AddItem "a-2"
 End With
ElseIf ComboBox2 = "B" Then
With ComboBox3
  .Font.Size = 12
 .AddItem "b-1"
.AddItem "b-2"
End With
Else: ComboBox2 = "C"
With ComboBox3
.Font.Size = 12
.AddItem "c-1"
.AddItem "c-2"
End With
End If
End Sub
コンボボックス2で"A"を選んだら、コンボボックス3には"a-1とa-2"の選択したい
のですが、"c-1,c-2"しかでません。よろしくお願いします。

投稿日時 - 2007-01-06 20:35:56

QNo.2647540

すぐに回答ほしいです

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

まず、ComboBox2の初期値が何も設定されてない場合、
If ComboBox2 = "A" Then
は成立せず、次の
ElseIf ComboBox2 = "B" Then
も成立しないので、その次の
Else: ComboBox2 = "C"
に処理が来ます。しかし、ここでは ElseIfとなってないので、無条件にComboBox2の値が"C"になり、その後の処理で"c-1"と"c-2"が追加されてしまいます。

そして、このプロシージャは userform_initialize() という名前がついてますが、もしこの処理が初期化の処理のときだけ実行されるのであれば、その後ComboBox2で別の値を選択しても、それはComboBox3に反映されません。

ComboBox2の値からComboBox3のリストを設定するプロシージャを別に作り、初期化の処理と、ComboBox2のChangeイベントでそれを呼べばいいのではないでしょうか。

Private Sub SetComboBox3()
 With ComboBox3
  .Clear
  .Font.Size = 12
  If ComboBox2 = "A" Then
   .AddItem "a-1"
   .AddItem "a-2"
  ElseIf ComboBox2 = "B" Then
   .AddItem "b-1"
   .AddItem "b-2"
  ElseIf ComboBox2 = "C" Then
   .AddItem "c-1"
   .AddItem "c-2"
  End If
 End With
End Sub

としておいて、

Private Sub userform_initialize()
 With ComboBox2
  .Font.Size = 12
  .AddItem "A"
  .AddItem "B"
  .AddItem "C"
 End With
 SetComboBox3
End Sub

Private Sub ComboBox2_Change()
 SetComboBox3
End Sub

とすればいかがでしょうか。

投稿日時 - 2007-01-06 21:15:35

お礼

ありがとうございました。<(_ _)>
できました。
Setcomboboxですね。ありがとうございました。
初心者ですみませんでした。

投稿日時 - 2007-01-06 21:57:19

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問