本当に馬鹿みたいな質問だったら申し訳ありません。最近VBを触り始めた初心者です。まだまだ調べるのが下手なので教えて頂きたくて質問させていただきます。配列で作ったText1とText2に数字以外の文字を入力できないように制限をかけたいと思っています。まずSubプロシージャで
Sub Limit()
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc("-")
Case vbKeyBack
Case Else
KeyAscii = 0
End Select
End Sub
と宣言し、
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
Limit
End Sub
Private Sub Text2_KeyPress(Index As Integer, KeyAscii As Integer)
Limit
End Sub
としたいのですが実行すると数字以外の文字が入ってしまいます。
何がいけないのでしょうか?
どなたか教えてください。
> 何がいけないのでしょうか?
きっと「サブプロシージャText1_KeyPress、Text2_KeyPressで"KeyAscii"がわかるから」
「サブプロシージャLimitでもKeyAsciiが使える」という想定の元作ったわけですね?
残念ながらそれは出来ません。これが"いけない"のだと思います。
「サブプロシージャの実引数、およびサブプロシージャ内部で宣言された変数」は
「サブプロシージャの中でしか使えない」です。
詳しくは
[MSDNライブラリ]
-[Visual Basic ドキュメント]
-[Visual Basic の使用方法]
-[プログラミングガイド]
-[プログラミングの基礎]
-[変数、定数、およびデータ型]
-[変数の適用範囲]
を読んで、関連するトピックも読んでください。
※実行したいだけなら、
プロシージャに引数を与えてあげれば…
ガッさんご回答ありがとうございます。
Private Sub txtJpn_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc("-")
Case vbKeyBack
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub txtMathe_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc("-")
Case vbKeyBack
Case Else
KeyAscii = 0
End Select
End Sub
だとちゃんと動くのですが、これだとプログラムが長くなってしまうので簡単に書ける方法はないかなと思ったのですが。。。
これだと動くよ。
Sub Limit(intKey As Integer)
Select Case intKey
Case Asc("0") To Asc("9")
Case Asc("-")
Case vbKeyBack
Case Else
intKey = 0
End Select
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Call Limit(KeyAscii)
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Call Limit(KeyAscii)
End Sub
あこさんありがとうございました!
動きました!!これだとどうして動くのか教えていただけますか?
ガッさんの指示どおりヘルプは読んだの?
読みましたけど、確認の意味を込めて教えていただきたかっただけです。
すいません。
>これだとどうして動くのか教えていただけますか?
引数を渡しているだけなんですけどね。
ガッさんや特攻隊長まるるうさんの仰るとおりヘルプでもじっくり読んでみてください。
何事も勉強です。
>読みましたけど、確認の意味を込めて教えていただきたかっただけです。
それ自体は悪い事ではないと思いますけど、
>これだとどうして動くのか教えていただけますか?
この文章では読んだか読んでないかも分かりませんし、何をどう理解
したかも分かりません。ヘルプの内容を全て繰り返して説明することに
なってしまいます。回答側の労力を考えた事がありますか?自分で
理解できた部分は自分が説明し、分からない部分だけ限定して質問して
下さい。本来は全て自分で調べるべき事なのですから、自分でできる事
の手は抜かないようにお願いします。
今回初めて質問したので要領がわからなかったので気分を悪くされたのなら申し訳ありません。今回、ご回答いただいた皆様ありがとうございました。
ツイート | ![]() |