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



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

相关内容

  • 没有找到相关文章

最新更新