2

在编写以下 VBA 时,鉴于我们使用的是Format:=2.

Workbook.Open (filename, Format:=2)

我知道在按照以下代码设置变量时这种格式有效,但为什么它在这里有效而不是上述格式?

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

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

4

1 回答 1

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 的一些奇怪的部分。调用带有返回值的函数但在使用括号时忽略该值有点坏。

您可以通过在其前面添加 a 来规避此Call问题(vba 然后知道它可以忽略结果)。

这看起来像这样:

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

老实说,我不知道为什么会这样,但我已经让它引起了非常奇怪的错误。当您使用括号语法时,我真的可以推荐Call在方法调用之前使用关键字。

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

MsgBox "Hello", Title:="test"

它也会起作用。这是最初的 vba 编码风格,现在不再使用了。

于 2016-09-01T07:49:58.693 回答