首页 > 解决方案 > 是否可以创建一个返回对象的函数?

问题描述

我正在研究一个宏,它需要使用以下方法引用大量命名范围:

ThisWorkbook.Names("$NAMEDRANGE$").RefersToRange.$METHOD$

我认为如果我可以创建一个可以如下使用的函数,它可能会使代码更易于阅读/使用:

NamedRange("$NAMEDRANGE$").$METHOD$

在不知道它是否可行的情况下,我尝试了以下方法:

Function NamedRange(ByVal sName As String) As Object
    return ThisWorkbook.Names(sName).RefersToRange

End Function

这甚至不会编译,产生一个

预期:语句结束

我想我可能需要使用类模块,但我对它们不是很熟悉。这是可能的,还是我应该在每一行上拼出整个参考?


我在 C 语言上花费了太多时间。这段代码运行良好:

Function NamedRange(ByVal sName As String) As Object
   Set NamedRange = ThisWorkbook.Names(sName).RefersToRange

End Function

谢谢您的帮助!

标签: vbaexcel

解决方案


Return语句确实存在于 VBA 中,但它与过时的GoSub语句一起使用,从以前开始SubFunction范围是一件事 - 提示 QBasic 记忆......

    foo = 42
    GoSub Increment
    Debug.Print foo ' prints 43
    Exit Sub
Increment:
    foo = foo + 1
    Return

所以 VBA 真的希望语句在令牌之后立即结束Return,因此出现“预期:语句结束”错误。

这不是你想要的。Function在 VBA 中, (and ) 成员的返回值Property Get是通过字面上分配给成员标识符来分配的:

Function GetFoo() As Long
    GetFoo = 42
End Function

而且由于您要返回对象引用,因此Set需要关键字:

Function GetBar() As Something
    Set GetBar = New Something
End Function

请注意,这样做不会立即返回给调用者 - 如果您需要立即退出函数范围,则需要Exit Function明确退出。


推荐阅读