Vba MsgBox()-为什么它只能使用一个参数,而不能使用多个参数?

Vba MsgBox()-为什么它只能使用一个参数,而不能使用多个参数?,vba,Vba,这是一个非常理论化的问题,我想了解这个问题,以扩大我对VBA语言的理解,但在这里和其他论坛的或之前的问题上没有发现任何东西(也许不值得怀疑为什么?) 如果我写: MsgBox "myPrompt", vbYesNo, "MyTitle" 它将出现一个带有自定义提示、按钮和标题的消息框。 但是,如果我写这篇文章,我会得到一个编译错误(预期为“=”): 到目前为止,都是关于语法的。在第二种情况下,我应该将函数的返回值存储到一个变量中,因此我非常同意“=”符号是预期的事实。但是,以下行将起作用: M

这是一个非常理论化的问题,我想了解这个问题,以扩大我对VBA语言的理解,但在这里和其他论坛的或之前的问题上没有发现任何东西(也许不值得怀疑为什么?)

如果我写:

MsgBox "myPrompt", vbYesNo, "MyTitle"
它将出现一个带有自定义提示、按钮和标题的消息框。 但是,如果我写这篇文章,我会得到一个编译错误(预期为“=”):

到目前为止,都是关于语法的。在第二种情况下,我应该将函数的返回值存储到一个变量中,因此我非常同意“=”符号是预期的事实。但是,以下行将起作用:

MsgBox("myPrompt")
它返回值
1
,我只需运行

a = MsgBox("myPrompt")
MsgBox a
因此,根据我的说法,
MsgBox(“myPrompt”,vbYesNo,“MyTitle”)
在没有赋值的情况下无法工作的原因似乎不再与编译错误所说的变量赋值有关。
谁能给我解释一下吗

在非常高的层次上,它与编译器如何解释命令有关

正如您所指出的,这两项工作:

MsgBox "Hello World"
MsgBox ("Hello World")
但这不会(不指定变量):

这是因为(没有赋值),VB认为只有一个参数值
“Hello World”,vbYesNo,“Title”
。显然,这是不正确的,您会收到一条友好的错误消息

如果你尝试这个,它会起作用的

MsgBox ("Hello World"), (vbYesNo), ("Title")
因为每个参数都在自己的括号中提供

从语法上讲,这与上面的
MsgBox(“helloworld”)
语句完全相同。您只需在括号中指定每个参数,而不是仅指定一个


编辑


MsgBox(“hello world”)
之所以有效,是因为它完全忽略了括号,就像它在简单整数赋值时所做的那样,例如
x=(2)

parantises向VBA指示它是一个函数,应该有一个返回值。如果不为其提供变量,则会出现错误。如果只编写MsgBox(“myPrompt”),解释器将假定为“vbOKOnly”(默认值),并将其视为一种方法。即使是被“容忍”的,这样做也是错误的。好问题。以前从没注意过。你一定是对的,我没想过!更清楚地说,它之所以有效,是因为它忽略了括号,就像它忽略了x=(2)的括号一样?@MatteoNNZ-完全正确。我不确定
Sub
调用参数不在括号内的原因是什么,而是“它是什么”。好的,这很清楚。如果你不介意的话,我会把这个小例子添加到你的答案中,使它100%完整,即使对我来说它已经很清楚了(所以被接受)。@MatteoNNZ-很好的补充。我认为这将增加它的清晰度。
MsgBox ("Hello World", vbYesNo, "Title")
MsgBox ("Hello World"), (vbYesNo), ("Title")