投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/4/2 14:16:46
VBA において、引数ひとつのメソッドを呼び出す際に、丸括弧をつけてはいけません。
括弧を付ける場合は、Call ステートメントを使うか、戻り値を受け取る必要があります。

引数がひとつの場合、括弧をつけてもコンパイルは通りますが、意味が変わってしまうことがあります。

Sub Test()
    Dim s1 As String
    s1 = "あいうえお"
    Example s1      '括弧をつけずに呼び出す 
    MsgBox s1       'New String になる 
    
    Dim s2 As String
    s2 = "かきくけこ"
    Example (s2)    '括弧を付けて呼び出す 
    MsgBox s2       'かきくけこ のまま 
End Sub

Sub Example(x As String)
    x = "New String"
End Sub




特に、2 個以上の引数を必要とする場合は要注意。

'MsgBox (txt, vbInformation)         ' これは文法エラー 

MsgBox txt, vbInformation            ' 一般的な書き方 
Call MsgBox(txt, vbInformation)      ' 上記を Call 構文で書いた場合 
ret = MsgBox(txt, vbInformation)     ' 上記の戻り値を受け取る場合 

MsgBox (txt), (vbInformation)        ' 呼び出せるが、ByRef な引数の場合は意味が変わってしまう 
Call MsgBox((txt), (vbInformation))  ' 上記を Call 構文で書いた場合 
ret = MsgBox((txt), (vbInformation)) ' 上記の戻り値を受け取る場合