在编写以下VBA时,假设我们使用Format:=2
,错误“Expected =”的根本原因是什么。
Workbook.Open (filename, Format:=2)
我知道这个格式在设置变量时可以使用,如下面的代码所示,但为什么它在这里工作而不是上述格式呢?
Set wrkb = Workbook.Open (filename, Format:=2)
此操作符的名称是:=
,它是如何使用的?
答案 0 :(得分:1)
它不是一个运算符,它是一个命名参数。
您可以通过直接指定参数/参数的顺序来选择参数/参数的顺序。
命名参数的概念也存在于多种现代语言中,例如c#(它是可选的,就像在VBA中一样)和swift(默认情况下它是必需的,但你可以禁用它)。
命名参数还允许您省略完全可选的参数,但是传递一个参数列表中的参数。尝试命名参数的好方法是消息框,因为它有许多带有默认值的可选参数。
示例:仅指定标题的MsgBox:
MsgBox Title:="wew lad"
或者,用更现代的方式编写vb(a)代码:
Call MsgBox(Title:="wew lad")
MsgBox是一个很好的例子,因为你可以正常调用它,然后再直接指定一个参数(也可以使用其他方法):
Call MsgBox("Yes!", Title:="wew lad")
一旦有命名参数,就不能在以下后添加有序参数:
'Call MsgBox (Prompt:="Yes!", vbOkCancel Title:="wew lad")
'this doesnt work!
现在,为什么会引发错误:
MsgBox ("Hello", Title:="test")
这是vba的一些怪异部分。使用括号调用具有返回值但忽略该值的函数有点不合适。
您可以通过在其前面添加Call
来规避这一点(vba然后知道它可以忽略结果)。
这看起来像这样:
Call MsgBox ("Hello", Title:="test")
老实说,我不知道为什么会这样,但我已经知道这会导致非常奇怪的错误。 使用括号语法时,我真的建议在方法调用之前使用Call
关键字。
正如Macro Man所提到的,您也可以省略括号,而不是使用Call
:
MsgBox "Hello", Title:="test"
它也会起作用。这是原始的vba编码风格,不再使用了。