1

抱歉,这是一个很难用语言表达的明确问题。

以下行有效:

对象字。文件。添加模板:=templatePath

但这条线不是:

设置objMergedReq=objWord。文件。添加模板:=templatePath

我得到以下编译器错误:

应为:语句结尾

为什么这两者的解释不同?如何消除错误?案例2中需要额外的括号吗?

1
  • 1
    设置时需要使用括号,所以设置x=f(y) 评论 2017年5月3日16:22

3个答案

重置为默认值

关键在于:

对象字。文件。添加模板:=templatePath

这是一个函数调用,但返回的值(对象引用)被丢弃,因此,函数的实际使用就像它是一个过程一样;使用VBA隐性的过程调用语法,括号不存在。您可以使用[deprecated]明确的调用语法以要求括号:

调用objWord。文件。添加(模板:=模板路径)

正如您所注意到的,这是非法的:

设置objMergedReq=objWord。文件。添加模板:=templatePath

因为函数调用(这里没有丢弃返回值)在指定参数列表时需要括号:

设置objMergedReq=objWord。文件。添加(模板:=模板路径)

如果您想“到处使用括号”,请记住,只要您需要指定2个或更多参数,就会遇到其他语法问题:

MsgBox(message,vbOkOnly+vbInformation)'非法

这是因为当参数被括号包围时,您实际上是在告诉VBA将括号中的内容作为一个值进行求值,并传递结果ByVal公司功能/程序,即使该函数/过程将参数显式指定为传地址.

2

设置时需要使用括号,所以设置x=f(y)

1
  • 2
    谢谢。就这样…设置objMergedReq=objWord。文件。添加(模板:=模板路径) 评论 2017年5月3日16:35
2

如果没有返回值,例如使用Sub或忽略返回值,则不要将参数放在括号中。您可以选择使用“Call”,然后将参数放在括号中。

在您的示例中,

对象字。文件。添加模板:=templatePath

add方法确实创建了一个返回值,但您没有使用它。因此,您可以不使用括号(如您所示),也可以使用“Call”语句:

调用objWord。文件。添加(模板:=模板路径)

在第二个示例中,您使用的是返回值,因此需要括号:

设置objMergedReq=objWord。文件。添加(模板:=模板路径)

需要“集合”,因为您正在指定对象。如果返回值是非对象,那么同样的规则也适用——只需省略“Set”即可。

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.