やっとアベノマスク届きました、どうもoReです。
今回は、テキストボックスに入力規制していきます。
IME Mode
IMEってあれです、あれ
↓これw
ひらがなにしたり、英数にしたりするやつね。
まずは、このIMEを規制しちゃいます。
IMEModeの構文
Object.IMEMode[= fmIMEMode ]
fmIMEMode一覧
定数 | 値 | 動作 |
fmIMEModeNoControl | 0 | IMEを制御しない(デフォ) |
fmIMEModeOn | 1 | IMEオン(日本語モード) |
fmIMEModeOff | 2 | IMEオフ(英語モード) |
fmIMEModeDisable | 3 | IMEオフ(無効) |
fmIMEModeHiragana | 4 | IMEオン(全角ひらがな) |
fmIMEModeKatakana | 5 | IMEオン(全角カタカナ) |
fmIMEModeKatakanaHalf | 6 | IMEオン(半角カタカナ) |
fmIMEModeAlphaFull | 7 | IMEオン(全角英数字) |
fmIMEModeAlpha | 8 | IMEオン(半角英数字) |
IMEを無効にするfmIMEModeDisableを使用します。
・Disable ディィセェィブル
Disableは、『無効にする』という意味みたいです。
コードで書く場合
UserForm_Initializeに書きます。
↓こんな感じ
Private Sub UserForm_Initialize()
TextBox1.IMEMode = fmIMEModeDisable 'IMEを無効にするよ
End Sub
↓もしくは
Private Sub UserForm_Initialize()
TextBox1.IMEMode = 3 'IMEを無効にするよ
End Sub
VBEで設定する場合
・TextBox1を選択→プロパティのIME Mode
→3 – fmIMEModeDisableを設定
動作確認してみてください。
半角英数になり、ひらがなに変更できなくなりましたか?
KeyPressプロシージャ
・Press プレェス
Pressは、『押す』という意味みたいです。
まあ、キーをおっぺすと発動するプロシージャってことです。
おっぺす?という方のためにw
おっぺすをググると、千葉の方言だったり埼玉の方言だったりまちまちなのね。
いやいや…九州の方言じゃね!?
わたくし高校生のころ九州にいましたが、普通に使ってましたけど…
意味合いは、『押し倒す』的な使い方でしたね。
よく女子をおっぺしてビンタくらってましたから、多分間違いありません。
では、さっそく使ってみましょう。
・オブジェクトをTextBox1→プロシージャをKeyPress
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
End sub
ついでに、KeyDownプロシージャも入れて違いをみましょうか。
↓こんな感じ
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
MsgBox "KeyDown" & KeyCode
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
MsgBox "KeyPress" & KeyAscii
End sub
これで、いろんなキーをポチポチおっぺしてみてください。
※ビンタに注意
なんとなく、違いがわかりましたかね?
KeyDownとKeyPressの違い
・返り値が違う
※Ascii アスキィー 詳しくはググってね。
・発動条件が違う
※Enterキーや、Shiftキーなどの制御キーでは発動しない
という事で、KeyPressプロシージャを使用して、
入力キーのみに規制しましょう。
KeyDownプロシージャは消しちゃってください。
数字キー以外規制
数字キーの返り値を調べると
数字キー | 返り値 ※Asciiコード |
0 | 48 |
1 | 49 |
2 | 50 |
3 | 51 |
4 | 52 |
5 | 53 |
6 | 54 |
7 | 55 |
8 | 56 |
9 | 57 |
このように返ってきますね。
では、どの入力キーをおっぺしても『9』が入力されるようにしてみましょう。
↓こんな感じ
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = 57 'キーをおっぺしたら9キーをおっぺした事にするよ
End Sub
9しか入力されなくなりましたか?
では、KeyAsciiに0を入れてみましょう。
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = 0
End Sub
入力できなくなりましたか?
0は、どのキーにも割り付けられていない為、
なにもキーをおっぺしてないのと同じ事になります。
あとは、条件分岐で返り値の48~57以外を規制してあげればOKです。
↓こんな感じ
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Then 'Asciiが48より小さい場合
KeyAscii = 0
ElseIf KeyAscii > 57 Then 'Asciiが57より大きい場合
KeyAscii = 0
End If
End Sub
ちゃんと、数字キーのみしか入力できなくなりましたか?
Or・And演算子
・Or オァ ・And アンドゥ
Orは、『又は』という意味みたいです。
Andは、『そして』という意味みたいです。
OrとAndの使い方は
If 条件1 Or 条件2 Then 条件1 又は 条件2 どちらかの条件を満たしていたら
If 条件1 And 条件2 Then 条件1 そして 条件2 どちらの条件も満たしていたら
といった使いかたをします。
↓こんな感じに変更
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Or KeyAscii > 57 Then 'Asciiが48より小さい又は、57より大きい場合
KeyAscii = 0
End If
End Sub
↓もしくは
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 'Asciiが48より小さい又は、57より大きい場合
End Sub
ちゃんと入力規制掛かってますか?
まとめ
Object.IMEMode[= fmIMEMode ]
入力キーのみで発動し、キーの『KeyAscii』を返す
どちらかの条件を満たしていたら
どちらの条件も満たしていたら
次回 フォーム上で画像を表示させてみるよ
コメント
すいません、、、出庫したい数が在庫より多い場合に警告を出したいです。。。
If文をつくりましたがうまくいきませんでした。
どこかに
入れればいいと思いますが、、、あてはめた場所が悪いのか
全部在庫より多いですと言われてしまいました。。。
もしわかれば、、、ご教授頂ければ幸いです。
hase様
はじめまして。
コメントありがとうございます。
>あてはめた場所が悪いのか
全部在庫より多いですと言われてしまいました
あてはめた場所ではなくて、
比較演算がうまくいってない様です。
比較演算する場合も
基本的に 数値 < 数値
上記のTextBox3は『文字列』なので、
『数値』にしてあげれば比較演算できると思います。
・Val(TextBox3)
もしくは、
・TextBox3 * 1
↓こんな感じです
遅くなり申し訳ありません!
ありがとうございます!
おっしゃったとおりに変更したところうまく演算してくれました!
大変感謝しております!
お役に立てたようで幸いです。
プログラム超超超初心者です
#35まで同じように出来て感動しています。
上のコメントをみまして、あたしも警告文をいれたいのですが、、、
今までの中でどこを変えたらいいのかご教示頂けますと助かりますm(__)m
すみません汗
あと、バーコードがすでに登録されている場合、二重登録を防ぐ方法はありますか?
オレグラミングをめちゃくちゃ頼りにしておりまして(//∇//)
お返事と続きもお待ちしています♡
yukie様
はじめまして。
コメントありがとうございます。
>今までの中でどこを変えたらいいのか…
↓このへんですかね
>バーコードがすでに登録されている場合、二重登録を防ぐ方法はありますか?
↓こんな感じにTourokuフォームに追加ですかね
多分…(*ノωノ)
お忙しい中、お返事ありがとうございます
今、上記のコードを早速入力して、試してみました。
動作確認できました!!!
素晴らし過ぎて、感動しております( ;∀;)
本当にありがとうございますm(__)m
続きも楽しみにしております♪
お役に立てたようで幸いです。