ACCESSはビギナーのものです。見積書作成用のフォームを作成してまして、その金額フィールドには数字だけを入力させるのに下記のコードをキー入力イベントに記述しました。(ネットからの引用にて)
Select Case KeyAscii
Case 8 To 10, 13
Case 48 To 57
Case Else
MsgBox "数字を入力して下さい", vbExclamation + vbOKOnly, "入力検査"
KeyAscii = 0
End Select
これで数字以外は規制できたのですが(BS等は可)、値引き等のマイナス(減算)キーも有効にするためアスキーコードを調べたら45だったので、それを追記して Case 8 To 10, 13, 45 としました。しかし-キーを押すと"数字を入力して下さい"のメッセージとなります。これが出来ないのが分からなくて投稿しました。私の知識不足によるものだと思っているのですが、解決できなくて。どこが間違っているのでしょうか?
通報 ...
複雑な制限でなければ入力規則プロパティで対応すると簡単です
入力規則を使ってデータ入力を制限する
数値に限るなら
等、指定すればいいです
hirotonさん、ありがとうございます。確かにそうですね。ただ>0 Or <1だと小数も入力可能になってしまいます(例えば2.5)。整数と負の分だけ入力の場合はどうすればいいでしょうか? すみません。
「整数である」の判定はいくつか手法があると思いますが、たとえば
とかですかね
数値であることのチェックは前述とおりやっておいて、文字列としてみたときに小数点が含まれていなければいいというチェックを追加でやります
入力する数値の桁数に一定の上限があるのであれば、そのテキストボックスの[定型入力]プロパティを設定なさればよいでしょう。
(設定例)
テキストボックスのキー入力時に下記のコードを設定して試してみましたが、「-」キーを問題なく入力できました。
hirotonさんskさん、ありがとうございました。コード使わずにシンプルに可能ですね。頭がカチカチになってました。色々試してみます。
hatenaさん、ありがとうございました。確かにそれで機能しました。私の方でごちゃごちゃしている内に混乱してた様です。(すみません・・・)
あと入力制御の事でお聞きしたいのですがコンボボックスが同フォームにあり、そこはマウスで選択する以外キー入力が一切受付ない様にするには、どうすればいいでしょうか?
キー入力に関するイベントで全部リセットしてしまえばいいんじゃないですかね
UIとしては、
数字とマイナス以外の文字が入力されていたらメッセージを出して修正をユーザーに要求するという仕様より、
最初から数字とマイナス以外の文字がキーボードから入力できないようにしておくという仕様のほうがユーザーにやさしいと思います。
ただ貼り付けなどで数値以外の値が入力された場合にそなえて、入力規則も設定しておく、という設計がいいと思います。
さらにIMEがオンだとKeyDownイベントでは検知できないので、「IME 入力モード」を「オフ」に設定しておくいいでしょう。
hirotonさん、hatenaさん ありがとうございました。色々勉強になります。
IME 入力モードとの兼ね合いは全く知りませんでした。試してみます。