gpt4 book ai didi

vba - 在 VBA 中,创建对象与不创建对象时的语法是否不同?

转载 作者:行者123 更新时间:2023-12-04 21:12:07 29 4
gpt4 key购买 nike

抱歉,这很难说成一个明确的问题。

以下行有效:

objWord.Documents.Add Template:=templatePath

但这条线不是:
Set objMergedReq = objWord.Documents.Add Template:=templatePath

我收到以下编译器错误:
Expected: end of statement

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

最佳答案

症结是这样的:

objWord.Documents.Add Template:=templatePath

这是一个函数调用,但返回的值(对象引用)被丢弃,因此该函数实际上就像是一个过程一样使用;使用 VBA 的隐式过程调用语法,括号不存在。您可以使用 [deprecated] 显式调用语法来要求括号:
Call objWord.Documents.Add(Template:=templatePath)

如您所见,这是非法的:
Set objMergedReq = objWord.Documents.Add Template:=templatePath

因为每当指定参数列表时,函数调用的语法(您不会在此处丢弃返回的值)都需要括号:
Set objMergedReq = objWord.Documents.Add(Template:=templatePath)

如果您想“在任何地方都使用括号”,请知道您将遇到其他语法问题,只要您需要指定 2 个或更多参数:
MsgBox (message, vbOkOnly + vbInformation) 'illegal

这是因为当参数被括号包围时,您实际上是在告诉 VBA 将括号的内容作为一个值来计算,并传递结果 ByVal到函数/过程,即使该函数/过程明确指定参数为 ByRef .

关于vba - 在 VBA 中,创建对象与不创建对象时的语法是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43765358/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com