たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_フォームの操作その3_キーボードのキーによる入力値の判定【KeyPress】【Asc】

フォーム内に設置したテキストボックスに、文字/数字/それ以外のどれが入力されたのか
押下したキーボードのキーによって判定し処理を分ける

文字コードとキーボードのキーについて

ANSI文字コードとは

米国規格協会が定めた「文字コードのセット」
つまりANSIという言葉は文字セットを指しており文字コード自体の名称ではないようだ
▼言葉の解説ページ▼
ANSI
文字コードの種類|エンジニアが知っておきたい”文字コード”

ANSIキーとは

どう定義するのが正解なのかは不明だが「ユーザーが入力可能な文字を生成するキー」を指す模様
▼HTML ASCII リファレンス▼
https://memopad.bitter.jp/w3c/charsets/ref_html_ascii.html
ANSIとASCIIの違いはネットで調べたらいろいろ載っているが
 後述のKeyPressイベントでは「KeyAscii As Integer」とあるのでAsciiのリファレンスを載せた

叩いたキーのタイプを判別

テキストボックスに、文字を入力したのか数字を入力したのか記号を入力したのか判定するにはどうするとよいのか

イベント【KeyPress】

キーボードのANSIキー(入力可能な文字を生成するキー)が押されたときに発生するイベント
このイベントを活用し、押されたキーの種類ごとに処理を分岐することが可能
※イベントの発生順 KeyDown→KeyPress→Change→KeyUp

▼参考記事▼
KeyPress イベント | Microsoft Learn

関数【ASC】

文字には文字コード(番号)が振られており、ASC関数を使用することで文字コードを調べることができる

▼記述例▼

Sub test_codeNum()
    Debug.Print Asc("0")
    Debug.Print Asc("a")
    Debug.Print Asc("")
    Debug.Print Asc("")
    Debug.Print Asc("")
End Sub


▼処理結果▼


叩いたキーによって処理を分岐

文字ごとのコードはASC関数や上述のリファレンスページで確認することもできるが、いちいち調べて適用する必要はない

▼記述例_フォームのモジュール内【KeyPress】イベントに記述▼

Private Sub txt1_KeyPress(KeyAscii As Integer)
    If KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then
        Me.lbl1.Caption = "数字キー"
    Else
        Me.lbl1.Caption = "数字キー以外が押下されました"
    End If
End Sub

▼処理結果_数字キーを押下した場合▼

▼処理結果_数字キー以外を押下した場合▼


上記の記述例をヒントにいろいろと試すと楽しいかも
▼文字の種類を判別する記述例▼

KeyAscii >= Asc("0") And KeyAscii <= Asc("9")  '数字
KeyAscii >= Asc("a") And KeyAscii <= Asc("z")  '英字
KeyAscii = 8 'BackSpace
KeyAscii = 9 'Tab
KeyAscii = 13 'Enter
KeyAscii = 27 'Esc
KeyAscii = 0 '文字入力をキャンセル

※ひらがな・カタカナ・漢字についても試したいが時間ないので先に進む