vbams-wordoptional-parametersmsgbox

MsgBox not accepting optional parameters


I'm struggling with this basic piece of code :

     If Dir(LocationAddress & "\" & chart & " Complete.pdf") = "" Then
                MsgBox("The file wasn't created.", vbCritical + vbRetryCancel)
            Else
                MsgBox ("The file was created.")
            End If

When I click "save" in the VBA editor, the line corresponding to the error message turns red, and when I try to execute, it tells me there's a syntax error. I found this similar code online, with a different syntax, which also doesn't work, even when copied and pasted into the editor.

MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")

I also ran my initial code with only one style instruction as an optional argument, to make sure the issue wasn't simply that I was combining them with improper syntax.

I hardly know anything about vba, I've only written a few subs by copying and editing code found online.


Solution

  • As igittr commented above, on the line MsgBox("The file wasn't created.", vbCritical + vbRetryCancel), the parenthesis aren't needed.

    When there's only one statement on the line, then VBA knows that the arguments are for the MsgBox procedure. If you put brackets around the arguments, it will try to evaluate everything within the brackets first, resulting in the error (that's why MsgBox ("The file was created.") still works, even though the brackets again aren't needed).

    So either write the line as MsgBox "The file wasn't created.", vbCritical + vbRetryCancel

    Or, if you want to still use brackets, use Call MsgBox("The file wasn't created.", vbCritical + vbRetryCancel). This works because you have two statements, Call and MsgBox, and the brackets are needed to indicate what procedure the arguments belong to.