0

我有以下子:

Public Function Log(sdsMessage As CStandardPropertySet2)
' Only print the fields contained int he sdsMessage
End Function

我像这样使用它:

Log(anSdsMessage)

但是,这会导致Argument not optional错误。

但如果我有这样的子:

Public Function Log(sdsMessage As CStandardPropertySet2) As CStandardPropertySet2
' Only print the fields contained int he sdsMessage
Set Log = sdsMessage
End Function

Set anSdsMessage = Log(anSdsMessage)

然后错误消失。这对我来说看起来很尴尬,因为我根本不需要修改消息,只想打印其中的字段。

有人可以告诉我我做错了什么吗?

4

1 回答 1

2

这是愚蠢的混淆 VBA 语法。当您将 jsutLog作为方法调用并且没有返回类型时,您省略括号。

所以Log anSdsMessage当没有设置返回值时

并且(正如您已经拥有的那样正确)Set anSdsMessage = Log(anSdsMessage)设置返回值时。

解决丹尼尔的评论

我可以写这段代码

Public Function Log(sdsMessage As Collection)
' Only print the fields contained int he sdsMessage
End Function

Sub tester()
    Dim o As Collection
    Set o = New Collection
    Log (o)
End Sub

并尝试运行tester子程序,我收到错误消息“编译错误:参数不是可选的”

删除括号并运行Log o实际上允许编译并删除错误。

于 2012-10-29T14:51:52.497 回答