在编写以下 VBA 时,鉴于我们使用的是Format:=2
.
Workbook.Open (filename, Format:=2)
我知道在按照以下代码设置变量时这种格式有效,但为什么它在这里有效而不是上述格式?
Set wrkb = Workbook.Open (filename, Format:=2)
还有这个运算符叫什么,:=
它是如何使用的?
在编写以下 VBA 时,鉴于我们使用的是Format:=2
.
Workbook.Open (filename, Format:=2)
我知道在按照以下代码设置变量时这种格式有效,但为什么它在这里有效而不是上述格式?
Set wrkb = Workbook.Open (filename, Format:=2)
还有这个运算符叫什么,:=
它是如何使用的?
它不是运算符,而是命名参数。
您可以通过直接指定参数的顺序来选择参数/参数的顺序。
命名参数的概念也存在于多种现代语言中,例如 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 的一些奇怪的部分。调用带有返回值的函数但在使用括号时忽略该值有点坏。
您可以通过在其前面添加 a 来规避此Call
问题(vba 然后知道它可以忽略结果)。
这看起来像这样:
Call MsgBox ("Hello", Title:="test")
老实说,我不知道为什么会这样,但我已经让它引起了非常奇怪的错误。当您使用括号语法时,我真的可以推荐Call
在方法调用之前使用关键字。
正如 Macro Man 所提到的,您也可以省略括号,而不是使用Call
:
MsgBox "Hello", Title:="test"
它也会起作用。这是最初的 vba 编码风格,现在不再使用了。