【问题标题】:Meaning of `:=` Syntax in VBA methodsVBA 方法中 `:=` 语法的含义
【发布时间】:2017-01-08 23:01:14
【问题描述】:

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

Workbook.Open (filename, Format:=2)

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

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

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

【问题讨论】:

  • 只需使用Set wrkb = Workbook.Open (filename),其中filename 是一个由完整路径和文件名组成的字符串(包括文件扩展名,喜欢“.xlsx”)
  • 您好,感谢您的回答。您能否澄清为什么 Set 方法有效而另一个无效?我对理解语法很感兴趣,而不仅仅是死记硬背。谢谢
  • 你可以 Google 它,链接到 MSDN:msdn.microsoft.com/en-us/library/office/ff194819.aspx
  • 感谢您的链接。我用谷歌搜索了它,没有解释“:=”和使用 set 方法的理由。请参考他们在您提供的链接中对此有何评论?

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


【解决方案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 编码风格,现在已不再使用。

【讨论】:

  • 你的意思是:? Set wrkb = Workbook.Open (filename, Format:=2)
  • 您可以将普通参数与命名参数混合使用。生病添加解释
  • 你需要一个Call 在它之前。我不知道为什么,vba 似乎在这里以神秘的方式工作。 Call MsgBox ("Yes!", Title:="wew lad")def。作品
  • Or, in the more modern way of writing vb(a) code: 实际上,Call 关键字仅用于遗留用途,在“现代”VBA 代码中没有用处。您必须在示例中使用它的原因是您在参数周围使用了括号。除非您要分配给变量,否则不需要以这种方式使用括号,它实际上会产生不利影响。
  • MsgBox "Hello", Title:="test" 可以正常工作,将 Call 添加到某些内容的开头,因为您在不需要的地方使用了括号不是解决方法跨度>
猜你喜欢
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2012-03-23
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多