VBA 方法中 `:=` 语法的含义

Meaning of `:=` Syntax in VBA methods

当写下面的 VBA 时,错误 "Expected =" 的根本原因是什么,因为我们正在使用 Format:=2

Workbook.Open (filename, Format:=2)

我理解在如下代码中设置变量时这种格式有效,但为什么它在这里有效而不是上面的格式?

Set wrkb = Workbook.Open (filename, Format:=2)

还有这个运算符叫什么,:= 它是如何使用的?

它不是运算符,它是命名参数。

您可以通过直接指定它们是什么来选择 arguments/parameters 的顺序。

命名参数的概念也存在于多种现代语言中,例如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 中比较奇怪的部分。使用 return 值调用函数但在使用 括号 时忽略该值有点损坏。

你可以通过在它前面添加一个 Call 来绕过它(vba 然后知道它可以忽略结果)。

这看起来像这样:

Call MsgBox ("Hello", Title:="test")

老实说,我不知道这是为什么,但我发现它会导致非常奇怪的错误。 当您使用括号语法时,我真的建议在方法调用之前使用 Call 关键字。

正如 Macro Man 提到的,您也可以省略括号,而不是使用 Call:

MsgBox "Hello", Title:="test"

它也会起作用。这是最初的 vb 一种编码风格,现在已经不再使用了。