在编写以下VBA时,如果我们使用的是Format:=2
,那么错误"Expected ="的根本原因是什么?
Workbook.Open (filename, Format:=2)
我理解这种格式在设置变量时有效,如下面的代码,但是为什么它在这里工作,而不是在上面的格式?
Set wrkb = Workbook.Open (filename, Format:=2)
这个操作符叫什么,:=
,它是如何使用的?
这不是一个操作符,它是一个命名参数
可以通过直接指定实参/形参的顺序来选择它们。
命名参数的概念也存在于许多现代语言中,例如c#(它是可选的,就像在VBA中一样)和swift(默认情况下它是必需的,但你可以禁用它)。
命名参数还允许您完全省略可选的参数,但传递一个在参数列表中更靠后的参数。尝试使用命名参数的一个好方法是messagebox,因为它有许多带有默认值的可选参数。
示例: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")
老实说,我不知道这是为什么,但我有它引起非常奇怪的bug。当您使用括号语法时,我建议在方法调用之前使用Call
关键字。
正如Macro Man提到的,您也可以省略括号,而不是使用Call
:
MsgBox "Hello", Title:="test"
它也会起作用。这是最初的vba编码风格,现在已经不再使用了。