Microsoft Access 掲示板

数字とマイナスだけを入力させたい

9 コメント
views
4 フォロー

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 としました。しかし-キーを押すと"数字を入力して下さい"のメッセージとなります。これが出来ないのが分からなくて投稿しました。私の知識不足によるものだと思っているのですが、解決できなくて。どこが間違っているのでしょうか?

Masa
作成: 2023/11/07 (火) 09:46:25
通報 ...
1
hiroton 2023/11/07 (火) 10:33:56 d8771@f966d

複雑な制限でなければ入力規則プロパティで対応すると簡単です

入力規則を使ってデータ入力を制限する

数値に限るなら

>0 Or <1

等、指定すればいいです

2

hirotonさん、ありがとうございます。確かにそうですね。ただ>0 Or <1だと小数も入力可能になってしまいます(例えば2.5)。整数と負の分だけ入力の場合はどうすればいいでしょうか? すみません。

3
hiroton 2023/11/07 (火) 13:02:03 d8771@f966d

「整数である」の判定はいくつか手法があると思いますが、たとえば

(>0 Or <1) And Not Like "*.*"

とかですかね

数値であることのチェックは前述とおりやっておいて、文字列としてみたときに小数点が含まれていなければいいというチェックを追加でやります

4

見積書作成用のフォーム

金額フィールドには数字だけを入力させる

値引き等のマイナス(減算)キーも有効にする

整数と負の分だけ入力

入力する数値の桁数に一定の上限があるのであれば、そのテキストボックスの[定型入力]プロパティを設定なさればよいでしょう。

(設定例)

#########9
5

これで数字以外は規制できたのですが(BS等は可)、値引き等のマイナス(減算)キーも有効にするためアスキーコードを調べたら45だったので、それを追記して Case 8 To 10, 13, 45 としました。しかし-キーを押すと"数字を入力して下さい"のメッセージとなります。

テキストボックスのキー入力時に下記のコードを設定して試してみましたが、「-」キーを問題なく入力できました。

Private Sub テキスト0_KeyPress(KeyAscii As Integer)
 Select Case KeyAscii
    Case 8 To 10, 13, 45
    Case 48 To 57
    Case Else
        MsgBox "数字を入力して下さい", vbExclamation + vbOKOnly, "入力検査"
        KeyAscii = 0
  End Select
End Sub
6

hirotonさんskさん、ありがとうございました。コード使わずにシンプルに可能ですね。頭がカチカチになってました。色々試してみます。
hatenaさん、ありがとうございました。確かにそれで機能しました。私の方でごちゃごちゃしている内に混乱してた様です。(すみません・・・)
あと入力制御の事でお聞きしたいのですがコンボボックスが同フォームにあり、そこはマウスで選択する以外キー入力が一切受付ない様にするには、どうすればいいでしょうか?

7
hiroton 2023/11/07 (火) 16:43:35 d8771@f966d

キー入力に関するイベントで全部リセットしてしまえばいいんじゃないですかね

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)
  KeyCode = 0
End Sub

Private Sub コンボ_KeyPress(KeyAscii As Integer)
  KeyAscii = 0
End Sub

Private Sub コンボ_KeyUp(KeyCode As Integer, Shift As Integer)
  KeyCode = 0
End Sub
8

UIとしては、
数字とマイナス以外の文字が入力されていたらメッセージを出して修正をユーザーに要求するという仕様より、
最初から数字とマイナス以外の文字がキーボードから入力できないようにしておくという仕様のほうがユーザーにやさしいと思います。
ただ貼り付けなどで数値以外の値が入力された場合にそなえて、入力規則も設定しておく、という設計がいいと思います。

さらにIMEがオンだとKeyDownイベントでは検知できないので、「IME 入力モード」を「オフ」に設定しておくいいでしょう。

9

hirotonさん、hatenaさん ありがとうございました。色々勉強になります。
IME 入力モードとの兼ね合いは全く知りませんでした。試してみます。