データベースで VBA コードを使用して KeyPress イベントをトラップする必要があります。
ALT-F11 を押してデータベースの背後にあるコードを表示し、次のようなものを使用します..
Private Sub Combo2_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57, 65 To 90, 97 To 122 'alphachars only
Combo2.ListIndex = FindIndex(Combo2.Value, KeyAscii)
Case vbKeyDecimal
Case vbKeyBack
Case vbKeyRight
Case vbKeyLeft
Case vbKeyInsert
Case vbKeyDelete
Case vbKeyShift
Case Else
KeyAscii = 0
Exit Sub
End Select
End Sub
「cboYourCombo」は、実際のコンボ ボックス コントロールの実際のオブジェクト名です。
そして、上記のサブルーチン内で、数字や文字などの重要なキーストロークをトラップします
この行...
Combo2.ListIndex = FindIndex(Combo2.Value, KeyAscii)
... FindIndex() 関数を実行しようとしており (記述する必要があります)、文字列内の文字の開始位置を返し、コンボボックスのインデックスをその位置から開始するように設定していると言っています。実際にはこれは機能しませんが、アイデアはわかります。
実際には、FindIndex() 関数で目的のデータの場所を検索し、検索した場所より前の文字を返すルーチンに、コンボボックス内のリスト全体を渡す必要があります。本質的には、フィールドの左から右に見るようにコンボボックスに指示していますが、上記のルーチンでデータの場所を既に見つけています。
すなわち。
このリストがあるとしましょう...
ABC123
ABC456
AHJ738
BHS238
MKJ299
上記をコーディングすると、キーを押すたびに、上記のリストでその文字を持つ最初の項目が検索されます。この場合、数字の 7 としましょう。
'7' を押すと、ルーチンが 'AHJ738' 項目を見つけ、これがたまたまリストの 3 番目の項目になりました。
つまり、'AHJ7' (少なくとも) が返され、コンボボックスがだまされてフィールドの左側から検索されます。
つまり、コンボ ボックス コントロールには、テキスト ボックスの途中でキーストロークを探すための事前構築済みのメソッドがありません。これを行うことができる代替のコンボボックスコントロールをGoogleで検索しない限り、これは商用バリアントです。