vba - 是否可以创建一个返回对象的函数?
问题描述
我正在研究一个宏,它需要使用以下方法引用大量命名范围:
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
谢谢您的帮助!
解决方案
该Return
语句确实存在于 VBA 中,但它与过时的GoSub
语句一起使用,从以前开始Sub
,Function
范围是一件事 - 提示 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
明确退出。
推荐阅读
- django - 当前用户以外的其他用户的 PassWordChangeForm
- java - 我可以在自动化测试期间从 HttpRequest 捕获 JSON 有效负载(JUnit 或带有 Selenium 的 TestNG)吗?
- vba - 我可以在 vba 中使用哪个函数,类似于我在 sql 中使用的函数
- c# - .NET 字典插入的奇怪性能行为
- swift - 带有复选框的 SwiftUI ToDoList?
- javascript - html-webpack-plugin - 脚本注入问题
- android - 条目名称“classes.dex”发生冲突
- javascript - 按顺序异步每一行,等待它返回
- c# - 反序列化 JSON 错误:类型需要 JSON 对象
- clang - libc++ 是否向后兼容旧版本?