コンボ ボックスの内容をドロップダウン表示するには
[Alt] + [↓]
ComboBox.Dropdown メソッド
既定の動作のため、実装は不要です。
リストの幅を設定するには
→リスト幅/ListWidth
リストの列の幅を設定するには
→列幅/ColumnWidths
列幅はセミコロンで区切って指定します。
1cm;2cm
特定の列を非表示にするには、0cmを指定します。
値集合ソース以外の値を入力できないようにするには
- 非連結の場合
- 値集合ソース:(任意の値)
- 値集合タイプ:値リスト
- 既定値:(任意の値)
入力を制限する方法
- 値リストの編集の許可:いいえ
- IME 入力モード:使用不可
Private Sub コンボ1_BeforeUpdate(Cancel As Integer) '値集合ソース以外の値を無効化する。 'KeyDown, KeyPress で制御できない、「検索と置換」ダイアログ(Ctrl+H)による変更を無効化する。 Dim strRowSource() As String strRowSource = Split(コンボ1.RowSource, ";") Dim varValue As Variant For Each varValue In strRowSource If コンボ1.Value = varValue Then Exit Sub End If Next Cancel = True End Sub Private Sub コンボ1_KeyDown(KeyCode As Integer, Shift As Integer) '編集関連の入力を無効化する。 Select Case Shift Case 0 Select Case KeyCode Case KeyCodeConstants.vbKeyDelete '削除の無効化 KeyCode = 0 End Select Case Shift And acCtrlMask Select Case KeyCode Case vbKeyV, vbKeyX '貼り付け、切り取りの無効化 KeyCode = 0 End Select End Select End Sub Private Sub コンボ1_KeyPress(KeyAscii As Integer) '値集合ソースの値の時、値を変更する。 'それ以外は、値の入力を無効化する。 Dim strRowSource() As String strRowSource = Split(コンボ1.RowSource, ";") Dim varValue As Variant For Each varValue In strRowSource If KeyAscii = Asc(varValue) Then コンボ1.Value = varValue Exit Sub End If Next KeyAscii = 0 End Sub
New
データタブの入力チェック/LimitToList をはいに設定する。
- 警告メッセージが表示されるようになります。
- リスト外入力時/NotInList イベントが発生するようになります。
Private Sub コンボ1_NotInList(NewData As String, Response As Integer)
'入力値を元に戻します。
コンボ1.Undo
'警告メッセージを無効にします。
Response = acDataErrContinue
End Sub
参考
ComboBox.LimitToList プロパティ (Access) | Microsoft Docs
ComboBox.NotInList イベント (Access) | Microsoft Docs
Old
変更時/Change イベントで、選択された値を退避しておき、リストが選択されていない時(=任意の値が入力された時)は、退避した値に戻します。
Private strコンボ As String
Private Sub cmbコンボ_Change()
If cmbコンボ.ListIndex = -1 Then
'リストが選択されていない時
cmbコンボ.Text= strコンボ
End If
strコンボ = cmbコンボ.Text
End Sub
上下キーで項目を選択できるようにするには
Private Sub コンボ1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp
If Shift = 0 Then
If 0 < コンボ1.ListIndex Then
'↑キーが押された時、一つ上の項目を選択する
コンボ1.ListIndex = コンボ1.ListIndex - 1
End If
KeyCode = 0
End If
Case vbKeyDown
If Shift = 0 Then
If コンボ1.ListIndex < コンボ1.ListCount - 1 Then
'↓キーが押された時、一つ下の項目を選択する
コンボ1.ListIndex = コンボ1.ListIndex + 1
End If
End If
KeyCode = 0
End Select
End Sub
入力した値がリストの値に含まれるかを判定するには
IsNull(コンボ1.Column(0))