ホーム > ユーザーフォーム > Lesson10: コンボボックス

コンボボックス
コンボボックス コンボボックス
コンボボックスは、テキストボックスとリストボックスを合わせたようなコントロールです。
項目を入力することできるし、一覧から選択することもできます。
リストボックスと同様の操作ができます。
コンボボックス
リストボックスの勉強で、番号を選ぶと名前が表示されるようにしました。
リストボックス
今度はそのリストボックスを消して、コンボボックスでできるように変更します。
プロパティ 設定
オブジェクト名 cmbNum
RowSource 成績表!B3:B6
コンボボックス
プログラムもリストボックスと同様に、Changeイベントを使って、
Private Sub cmbNum_Change()
  
  txtName.Value = Cells(3 + cmbNum.ListIndex, 3)
  
End Sub

コンボボックス
番号を選ぶと名前が表示されるようになりました。
2007年4月
コンボボックス コンボボックス その2
リストボックスとそっくりなコンボボックス。
違いはコンボボックスに直接入力できること。
試しにボックスに入力してみると...???
バク
テキストボックスに、入って欲しくないものが表示されました。
リストにない値が入力されると、Linsindexプロパティは「-1」になります。
オブジェクト.ListIndex = -1

「-1」ってことはリストから何も選択していない状態と同じです。
予期しない動きがあったというのは、作ったプログラムにバクがあったということです。
Linsindexプロパティが「-1」のときの処理をくわえます。
「-1」のときは何も選択していない状態なので、
テキストボックスには何も表示したくない。
だから「-1」のときはテキストボックスを空にする処理をくわえます。
Private Sub cmbNum_Change()
  
  If cmbNum.ListIndex = -1 Then
    txtName.Value = vbNullString
  Else
    txtName.Value = Cells(3 + cmbNum.ListIndex, 3)
  End If
  
End Sub

vbNullString は、値が0の文字列。
Value = "" でも問題なく動くけれど、vbNullString を使うほうがいいらしい。
上級者になると違いが明白になるらしい...?
初心者の私には関係ないらしいけど、とりあえず。

前と同じようにコンボボックスに入力してみると
バク修正後
テキストボックスには何も表示されなくなりました。
バグがなくなりました。
2007年4月
コンボボックス コンボボックス その3
その2でバグをなくしたけれど、
単にコンボボックスに直接入力できないようにする方法も。
Styleプロパティを使用します。
定数 内容
fmStyleDropDownCombo 0 直接入力、リストからの選択ともに可能
fmStyleDropDownList 2 値はリストからの選択のみ
あるいは、リストにある値しか入力できなくする方法もあります。
MatchRequiredプロパティを使用します。
設定 内容
True リストないにある値のみ入力可能
False リストにない値も入力可能
2007年6月
コンボボックス コンボボックス その4
バグはなくなったけれど、もうちょっと追加。
ユーザーフォームが表示されたとき、番号1の名前が表示されるようにしたい。
ユーザーフォームが表示されるときは、UserForm_Initialize()
そこで、番号1を選ぶ。つまり、cmbNum.ListIndex = 0
Private Sub UserForm_Initialize()
  
  cmbNum.ListIndex = 0
  
End Sub

これだけ、ユーザーフォームが表示されたとき、
番号1が選択され、名前に「しげっち」が表示されるようになりました。
2007年6月