• ベストアンサー

変数の宣言(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をつけなくて良い理由を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (260/624)
回答No.3

そうですね Dim s As String を省くと s は暗黙の宣言として 最初に入力されたデータのプロパティー が当てられます Dim s As String により明示的に宣言します。 変数を使うとき 時間と時刻 氏名と名前 等 思い違えで同じものとしてコーディングして プログラムの実行では見つからないまま結果が狙い通りにならない事があります。 自分は[変数の宣言を強制する]にして、これを避けています。 これで 宣言していない変数の場所で実行時エラーとなって先へ進みません

qyblxwolyb3
質問者

お礼

難しいですがそういう事なんですね。 ありがとうございます。

その他の回答 (2)

回答No.2

2つのSubに共通の変数を有効に使えば、多少は簡単に書ける、、、 Option Explicit Dim s As String Sub test1() s = "QQQ" Call test2 End Sub Sub test2() MsgBox s End Sub

qyblxwolyb3
質問者

お礼

この方法はよく使ってました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

同じ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ステートメントのヘルプにしっかり書いてあるので、是非熟読してください。

qyblxwolyb3
質問者

お礼

変数sはtest2では引き継がれないのですね。 dimやpublicの代わりにbyval・byrefをつけるのですか ヘルプ読んでみます。