dポイントプレゼントキャンペーン実施中!

入力フォームのテキストボックスに数字の7から10までしか入らないように制御するために下記のように記載しましたが入力できません?
何が不味いのか教えてください。
よろしくお願いします。

Private Sub 給付割合_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If Chr(KeyAscii) < "7" Or Chr(KeyAscii) > "10" Then
KeyAscii = 0
End If

End Sub

質問者からの補足コメント

  • 全ての文字が入力できません
    テキストボックスでカーソルは点滅しています

      補足日時:2019/04/09 16:38
  • 下記の記述ですと7と8と9が入力できます。
    If Chr(KeyAscii) < "7" Or Chr(KeyAscii) > "9" Then
    KeyAscii = 0
    End If
    End Sub

    しかし

    If Chr(KeyAscii) < "7" Or Chr(KeyAscii) > "10" Then
    KeyAscii = 0
    End If
    End Sub

    とすると全て入力できません?
    ご存知の方お知恵をお貸しください。
    よろしくお願いします。

      補足日時:2019/04/09 17:34

A 回答 (3件)

そもそも"10"という2回のキー押下を必要とする値に対してKeyPressイベントで対応するのが誤りだと思います。




以下でどうですか?
TextBoxからフォーカス移動しようとする際に作用します。

Private Sub 給付割合_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim invalid As Boolean

invalid = True
Select Case 給付割合.Text
Case "7", "8", "9", "10", ""
invalid = False
End Select
If invalid Then
給付割合.Text = ""
Cancel = True
MsgBox "7~10の数字を入力してください", vbExclamation
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
10は確かにキーを2回押しますね。目からうろこが・・・
思っていることができました感謝です。

お礼日時:2019/04/10 09:35

まず、



> If Chr(KeyAscii) < "7" Or Chr(KeyAscii) > "10" Then

の前に、
Print "KeyAscii=" & KeyAscii
Print "Chr(KeyAscii)=" & Chr(KeyAscii)
Print """7""=" & """7"""
Print """10""=" & """10"""

なんかの値を確認とか。

Chr(KeyAscii)の値、具体的に何のキーを押したときにどういう値が入って欲しいのか?
が、文字列の「7」より小さいってどういうことなのか?
比較する「7」ってのはホントに文字列で良いのか?
ってのを考察して、質問者さんがやりたい事になってるかどうか?確認とか。
    • good
    • 0

> 入力できません?



なにが入力、表示されている状態で、何を、どういう風に入力しようとしたら、何がどうなるはずのものが、どうなって入力できないの?


例えば、「7」が入力されている状態で、それを「10」に変更しようとしたら、
「1」を入力した時点で範囲外なので0になり、10は入力できないとか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!