Subプロシージャについて教えてください。

解決


ビタミンC  2005-10-20 19:18:59  No: 126538

本当に馬鹿みたいな質問だったら申し訳ありません。最近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
としたいのですが実行すると数字以外の文字が入ってしまいます。
何がいけないのでしょうか?
どなたか教えてください。


ガッ  2005-10-20 19:29:41  No: 126539

> 何がいけないのでしょうか?
きっと「サブプロシージャText1_KeyPress、Text2_KeyPressで"KeyAscii"がわかるから」
「サブプロシージャLimitでもKeyAsciiが使える」という想定の元作ったわけですね?
残念ながらそれは出来ません。これが"いけない"のだと思います。
「サブプロシージャの実引数、およびサブプロシージャ内部で宣言された変数」は
「サブプロシージャの中でしか使えない」です。
詳しくは
[MSDNライブラリ]
  -[Visual Basic ドキュメント]
    -[Visual Basic の使用方法]
      -[プログラミングガイド]
        -[プログラミングの基礎]
          -[変数、定数、およびデータ型]
            -[変数の適用範囲]
を読んで、関連するトピックも読んでください。

※実行したいだけなら、
  プロシージャに引数を与えてあげれば…


ビタミンC  2005-10-20 19:35:50  No: 126540

ガッさんご回答ありがとうございます。
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
だとちゃんと動くのですが、これだとプログラムが長くなってしまうので簡単に書ける方法はないかなと思ったのですが。。。


あこ  2005-10-20 19:41:31  No: 126541

これだと動くよ。

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


ビタミンC  2005-10-20 19:59:17  No: 126542

あこさんありがとうございました!
動きました!!これだとどうして動くのか教えていただけますか?


特攻隊長まるるう  2005-10-20 20:16:46  No: 126543

ガッさんの指示どおりヘルプは読んだの?


ビタミンC  2005-10-20 20:33:07  No: 126544

読みましたけど、確認の意味を込めて教えていただきたかっただけです。
すいません。


あこ  2005-10-20 20:35:26  No: 126545

>これだとどうして動くのか教えていただけますか?
引数を渡しているだけなんですけどね。

ガッさんや特攻隊長まるるうさんの仰るとおりヘルプでもじっくり読んでみてください。
何事も勉強です。


特攻隊長まるるう  2005-10-20 20:45:41  No: 126546

>読みましたけど、確認の意味を込めて教えていただきたかっただけです。
それ自体は悪い事ではないと思いますけど、
>これだとどうして動くのか教えていただけますか?
この文章では読んだか読んでないかも分かりませんし、何をどう理解
したかも分かりません。ヘルプの内容を全て繰り返して説明することに
なってしまいます。回答側の労力を考えた事がありますか?自分で
理解できた部分は自分が説明し、分からない部分だけ限定して質問して
下さい。本来は全て自分で調べるべき事なのですから、自分でできる事
の手は抜かないようにお願いします。


ビタミンC  2005-10-20 20:53:54  No: 126547

今回初めて質問したので要領がわからなかったので気分を悪くされたのなら申し訳ありません。今回、ご回答いただいた皆様ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加