コンボボックス
コンボボックスは、テキストボックスとリストボックスを合わせたようなコントロールです。
項目を入力することできるし、一覧から選択することもできます。
リストボックスと同様の操作ができます。
リストボックスの勉強で、番号を選ぶと名前が表示されるようにしました。
今度はそのリストボックスを消して、コンボボックスでできるように変更します。
プロパティ |
設定 |
オブジェクト名 |
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月