概要
コンボボックスの選択肢をVBAで動的に生成。
そして…
- 選択肢が1つだけなら、その値を選択状態にしておく。
- 選択肢が2つ以上なら空の選択肢を追加して、その値を選択状態にしておく。
のような切り替え。
コンボボックスの動的設定
詳細は下記参照。
サンプル(列が1つ)
'フォーム開いた時の動作。
Private Sub Form_Open(Cancel As Integer)
'フォーム上に『cmb_1』という名前のコンボボックスがある前提。
'選択肢を動的に設定。
Me.cmb_1.RowSourceType = "Value List"
Me.cmb_1.RowSource = ""
Me.cmb_1.ColumnCount = 1
'選択肢追加。
Me.cmb_1.AddItem "あ"
'下記コメントアウトを外すかどうかで動作が変わる。
'Me.cmb_1.AddItem "い"
'選択肢の数によって初期選択などの切替。
If Me.cmb_1.ListCount = 1 Then
Me.cmb_1.Value = Me.cmb_1.ItemData(0)
Else
Me.cmb_1.AddItem ""
Me.cmb_1.Value = ""
End If
End Sub
サンプル(列が2つ)
'フォーム開いた時の動作。
Private Sub Form_Open(Cancel As Integer)
'フォーム上に『cmb_1』という名前のコンボボックスがある前提。
'選択肢を動的に設定。
Me.cmb_1.RowSourceType = "Value List"
Me.cmb_1.RowSource = ""
Me.cmb_1.ColumnCount = 2
'選択肢追加。
Me.cmb_1.AddItem "あ;あです;"
'下記コメントアウトを外すかどうかで動作が変わる。
'Me.cmb_1.AddItem "い;です;"
'選択肢の数によって初期選択などの切替。
If Me.cmb_1.ListCount = 1 Then
Me.cmb_1.Value = Me.cmb_1.ItemData(0)
Else
Me.cmb_1.AddItem ""
Me.cmb_1.Value = ""
End If
End Sub
ポイント
選択肢の『数』を変数で持っておく必要は無い
Me.コンボボックスの名前.ListCount
で取得できる。
選択肢の『値』を変数で持っておく必要は無い
一番上の選択肢でよければ Me.コンボボックスの名前.ItemData(0)
でよい。
列数に依存しない
前述のサンプルたちを参照。
参考サイトさん
バージョン
Windows 10 Pro 22H2 19045.2846
Microsoft Access for Microsoft 365 MSO (バージョン 2303 ビルド 16.0.16227.20202) 32 ビット