コンボボックスに直接キー入力をさせない

f:id:accs2014:20180901203134p:plain:right:w500

 コンボボックスの「入力チェック」プロパティを「はい」にすることにより、既定のリストに含まれる値以外は受け入れないことができます。
 しかしキーボードによる入力自体はできますので、うっかり入力してしまうとエラーになり、特に操作に慣れていない初心者はハマってしまうこともあります。
 そこで、コンボボックスにキーボードからの入力をさせない方法についてです。


f:id:accs2014:20180901203132p:plain:right:w550

 これはプロパティの設定だけではうまくいきません。
 コンボボックスの「名前」プロパティを「住所都道府県」としたうえで、フォームモジュールに次のように入力します。

Option Compare Database

Private Sub 住所都道府県_KeyDown(KeyCode As Integer, Shift As Integer)

    'Tab,Enter,Esc以外を無効にする
    If KeyCode <> vbKeyTab And KeyCode <> vbKeyReturn And KeyCode <> vbKeyEscape Then
        KeyCode = 0
    End If

End Sub

 つまり、キーボードの入力があったときにその内容を無にする(「KeyCode」の値を0にする)ことで逐一無効にする、というわけです。
 なお、実用性を考慮しTabキーとEnterキー(次のコントロールに進む)、Escキー(一度選択した内容をキャンセルする)については有効とするようにしています。一切無効にする場合はIf~の行ととEnd Ifの行は不要です。


f:id:accs2014:20180901203130p:plain:right:w450

 これでキーボードによる文字入力を阻止できますので、リストに含まれない値が入力されることを防げます。


 ただし、このようにカーソルが入ってしまうことは防げません。そこまで阻止したい場合はさらなる工夫が必要になりますが、もはや実用性には影響しないレベルですので詳しくは改めて;-o-)