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 一种编码风格,现在已经不再使用了。
当写下面的 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 一种编码风格,现在已经不再使用了。