意外と理解していない人が多いようなので、これも書いておきます。次のコードで、正しいのはどちらでしょう。
Sub Sample1()
Dim re As Long
re = MsgBox "保存しますか?", vbYesNo
End Sub
Sub Sample2()
Dim re As Long
re = MsgBox("保存しますか?", vbYesNo)
End Sub
正しいのは下のSample2です。上のSample1は実行するまでもなく「re = MsgBox "保存しますか?"」の行でEnterキーを押した段階で

というエラーになります。
このように、関数やメソッドなどは、引数を括弧で囲まなければいけない場合と、囲まなくてもいい場合があります。そのルールは簡単です。返り値を使用するときは括弧をつけなければならず、返り値を使用しないケースでは括弧をつけなくてもいいんです。
上のコードは、MsgBoxで表示した[はい]ボタンと[いいえ]ボタンのうち、どちらのボタンがクリックされたかを変数reに格納しています。つまり、MsgBoxの返り値を使用しているわけです。たとえば次のようにMsgBoxの返り値を使用しない場合は、引数を括弧で囲む必要はありません。
Sub Sample1()
MsgBox "保存しました"
End Sub
ただし、返り値を使用しない場合は、引数を括弧で囲むことも許されています。次のコードはエラーにならず正常に動作します。
Sub Sample1()
MsgBox ("保存しました")
End Sub
ややこしいですね。こうした「括弧は必須でないけど、括弧で囲んでもいい」というルールが、この『括弧はどんなときに必要か問題』を理解しにくくしているんです。ですから、余計なことは忘れてください。次の2点だけを、しっかりと覚えてください。
括弧が必要なケースと、括弧が不要なケースを、いくつかお見せします。
Sub Sample3()
''返り値を使用しない
Workbooks.Open "C:\Book1.xls"
End Sub
Sub Sample4()
''返り値を使用する(開いたブックをオブジェクト変数に格納する)
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Book1.xls")
End Sub
Sub Sample5()
''返り値を使用しない
Range("A:A").Find "tanaka"
End Sub
Sub Sample6()
''返り値を使用する(見つかったセルを選択する)
Range("A:A").Find("tanaka").Activate
End Sub
Sub Sample7()
''返り値を使用しない
Worksheets.Add After:=ActiveSheet
End Sub
Sub Sample8()
''返り値を使用する(挿入したワークシートの名前を変更する)
Worksheets.Add(After:=ActiveSheet).Name = "tanaka"
End Sub
Sample5は、実際には意味がありませんけど、まぁそれはそれとして。