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

时间:2016-09-01 07:20:31

标签: vba syntax syntax-error named-parameters colon-equals

在编写以下VBA时,假设我们使用Format:=2,错误“Expected =”的根本原因是什么。

Workbook.Open (filename, Format:=2)

我知道这个格式在设置变量时可以使用,如下面的代码所示,但为什么它在这里工作而不是上述格式呢?

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

此操作符的名称是:=,它是如何使用的?

1 个答案:

答案 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编码风格,不再使用了。