- ベストアンサー
変数の宣言(s As String)で良い理由
vbaについてしつもんです。 標準モジュールで Option Explicit Dim s As String Sub test1() Call test2("qqq") End Sub Sub test2(s As String) MsgBox s End Sub としたのですが、もしかしてDim s As Stringって必要ないのでしょうか? あってもなくても動きます。 (s As String)があるからDim s As Stringは不要なのですか? だとしたら、(s As String)に dim や publicをつけなくて良い理由を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
そうですね Dim s As String を省くと s は暗黙の宣言として 最初に入力されたデータのプロパティー が当てられます Dim s As String により明示的に宣言します。 変数を使うとき 時間と時刻 氏名と名前 等 思い違えで同じものとしてコーディングして プログラムの実行では見つからないまま結果が狙い通りにならない事があります。 自分は[変数の宣言を強制する]にして、これを避けています。 これで 宣言していない変数の場所で実行時エラーとなって先へ進みません
その他の回答 (2)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
2つのSubに共通の変数を有効に使えば、多少は簡単に書ける、、、 Option Explicit Dim s As String Sub test1() s = "QQQ" Call test2 End Sub Sub test2() MsgBox s End Sub
お礼
この方法はよく使ってました。
- keithin
- ベストアンサー率66% (5278/7941)
同じsを使ったせいで間違って理解していますが、不要じゃなく単に使ってないだけです。 次のようにしてみると、もう少し理解が進むかも?しれません。 option explicit dim s as string ’モジュールシートの中でパブリック宣言 sub test1() call test2("qqq") msgbxo s end sub sub test2(z as string) ’プロシジャの中で単独で宣言 msgbox s msgbox z s = "sss" end sub >(s As String)に dim や publicをつけなくて良い理由 Subステートメントの引数には、dimやpublicといった要素はありません。代わりにbyvalとかbyrefとかありますが、そこいらはsubステートメントのヘルプにしっかり書いてあるので、是非熟読してください。
お礼
変数sはtest2では引き継がれないのですね。 dimやpublicの代わりにbyval・byrefをつけるのですか ヘルプ読んでみます。
お礼
難しいですがそういう事なんですね。 ありがとうございます。