vba - 用非易失性VBA方法替换Indirect,但不能用OFFSET等Excel函数嵌套返回值?
问题描述
我对这个问题有一个后续问题。
所以我想用 VBA 方法替换 INDIRECT 函数调用,因为 INDIRECT 是不稳定的,我的 excel 文档需要几秒钟才能加载,有时没有响应。
但是当我使用 INDIRECTVBA 方法并使用 OFFSET 函数嵌套它时,我得到一个错误,它显示“#VALUE!” (是的,我知道 OFFSET 是另一个 volatile 函数,我将替换为 INDEX ..)
具体来说:单元格 BJ10 包含文本“$R$71”,这是对保存数据的单元格的引用。
=INDIRECT($BJ$10) 有效但不稳定。
=INDIRECTVBA($BJ$10) 有效。
=(OFFSET(INDIRECT($BJ$10),0,0)) 有效,但具有双重波动性。
=(OFFSET(INDIRECTVBA($BJ$10),0,0)) 不计算,它显示“#VALUE!”
有什么想法吗?
这是 INDIRECTVBA 方法:
Public Function INDIRECTVBA(ref_text As String)
INDIRECTVBA = Range(ref_text)
End Function
Public Sub FullCalc()
Application.CalculateFull
End Sub
解决方案
您的函数不返回范围,因此它作为 OFFSET() 的第一个参数失败(这需要该位置的范围)。
此外,当任何其他工作表处于活动状态时(假设它在标准模块中),您的函数将失败,因为Range()
默认范围为 ActiveSheet。
尝试类似:
Public Function INDIRECTVBA(ref_text As String)
Set INDIRECTVBA = Application.ThisCell.Parent.Range(ref_text)
End Function
如果所有内容都不在同一张纸上,那么您将需要某种方式来指定应在 UDF 中使用哪张纸
推荐阅读
- javascript - 如何使用 Angular 5 构建 chrome 扩展
- single-sign-on - 如何将社交凭证与自定义凭证映射
- python-3.x - Flask-login 授权每次输入期间面临的问题
- jquery - Slick.js 垂直,中心模式,slidesToShow > 5 不起作用
- php - JMS 序列化器、反序列化和 xpath
- java - 成功验证用户身份后继续执行代码
- php - PHP:阻止在类外创建实例变量
- kubernetes - 使用 kubernetes 注释时出现问题
- php - 从 mysql 表中选择并打印 2 个单独的行
- javascript - 反应,无法从 onKeyPress 输入事件中获取 event.key