MsgBox() - 为什么它可以使用一个参数但不能使用多个参数?

时间:2015-01-05 18:10:03

标签: vba

这是一个非常理论化的问题,我想学习如何扩展我对VBA语言的理解,但是在official documentation中没有找到任何内容,也没有在此处和其他论坛中找到先前的问题(也许它不是值得怀疑的原因?)。

如果我写:

MsgBox "myPrompt", vbYesNo, "MyTitle"

它出现了一个带有自定义提示,按钮和标题的消息框。 但是,如果我写这个,我得到一个编译错误(预期“=”):

MsgBox ("myPrompt", vbYesNo, "MyTitle")

直到现在,它都是关于语法的。在第二种情况下,我应该将函数的返回值存储到变量中,所以我非常同意“=”符号是预期的。但是,以下行将起作用:

MsgBox("myPrompt")

无论如何返回值1,我只需运行

即可看到
a = MsgBox("myPrompt")
MsgBox a

因此,根据我的说法,MsgBox ("myPrompt", vbYesNo, "MyTitle")在没有赋值的情况下不起作用的原因似乎不再存在,应该与编译错误所说的预期变量赋值有关。 有人可以向我解释这个吗,拜托?

1 个答案:

答案 0 :(得分:3)

在很高的层面上,它与编译器如何解释命令有关。

如你所述,这两项工作都是:

MsgBox "Hello World"
MsgBox ("Hello World")

但这不会(没有分配变量):

MsgBox ("Hello World", vbYesNo, "Title")

这是因为(没有赋值),VB认为有一个参数值"Hello World", vbYesNo, "Title"。显然,这是不正确的,你得到一个友好的错误信息。

如果您尝试这样做,它会起作用。

MsgBox ("Hello World"), (vbYesNo), ("Title")

因为每个参数都在它自己的括号中提供。

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


修改

MsgBox ("hello world")有效,因为它会忽略括号,就像使用简单的整数赋值一样,例如x = (2)