関数・プロシージャの呼び出しとCallステートメント [VBA]
と、いうか、引数を括弧で囲むかどうかと、Callを書くか書かないかについて。
まず、括弧について。
関数やプロシージャを呼び出す場合、関数名(プロシージャ名)の後に括弧「(」「)」を付けるかどうかについてです。
関数やプロシージャから戻り値を受け取る場合、括弧を付けます。
例えば、
MsgBox "テスト", vbInformation
この場合は、メッセージボックスを表示させるだけなので、括弧なしでOKです。
戻り値を受け取る下記のような場合は、
intR = MsgBox("テスト", vbInformation + vbYesNo)
と、なります。
また、
MsgBox("テスト", vbInformation + vbYesNo)
intR = MsgBox "テスト", vbInformation + vbYesNo
これらは、構文エラーになります。
次に、Callステートメントについて。
Callステートメントは、関数名・プロシージャ名の後ろに括弧を付けるけど、戻り値を受け取らない場合に記述します。
例えば
Call MsgBox("テスト", vbInformation + vbYesNo)
このような記述になります。
最初っから括弧を書かなければCallも書かずに済むのですが、引数部分は括弧で囲んだ方が見やすいとか、戻り値があるけど捨ててることを明示的にしておきたいとか、いや、正確な理由は分かりませんが、こういうことになってます。
こちらも、下記のような記述は、
Call MsgBox "テスト", vbInformation + vbYesNo
構文エラーになります。
さて、なんでこんな事を取り上げたかと言いますと、たまに下記のようなコーディングに遭遇するからです。
Dim intR As Integer
intR = MsgBox("テスト", vbInformation)
たぶんですね、見よう見まねでMsgBoxを使ってみたら、なにやらエラーがでる。なんだかわかんないけど、こうするとエラーにならないから、以後ずっとこうしてる的な感じでしょうか。
ちゃんと理由を理解してないとこうなります。
そして、派遣プログラマにはこういう人がたくさんいます。