VBA - 范围对象的偏移量(命名引用)

Posted

技术标签:

【中文标题】VBA - 范围对象的偏移量(命名引用)【英文标题】:VBA - Offset of Range Object (a named reference) 【发布时间】:2020-06-23 07:06:09 【问题描述】:

我对 VBA 比较陌生,我发现理解 MS VBA 文档非常困难。

我正在编写一个宏来对财务模型执行一些场景测试。我有一个名为 Notional Tenor(整数值)的命名引用,我想检索右侧单元格的值(3 + J(先前定义的整数值))。

Dim Notional_Tenor As Range, Value As Integer
Set Notional_Tenor = Sheets("Scenario & Inputs").Range("Notional_Tenor")
Value = Notional_Tenor.Offset(0, 3 + J).Value2
Debug.Print Value

我的 Debug.Print 语句在我的即时框中没有显示任何内容(值应该等于 18)。是我的代码吗?

非常感谢任何帮助!谢谢

【问题讨论】:

J 是否已定义和设置? 用调试器检查Range变量Notional_Tenor的地址:它是否指向预期的地址(你可以使用Debug.Print Notional_Tenor.address)。检查变量J的内容:是否有预期值? 当工作表“Scenario & Inputs”处于活动状态时,尝试添加 Notional_Tenor.Offset(0, 3 + J).select ,在 vba 编辑器中逐步运行 (F8),然后查看所选单元格是否正确(值为 18)。 @MG92 是的,它已定义并设置 @FunThomas 是的,这很有帮助,谢谢 【参考方案1】:

如果“Notional_Tenor”范围不是单个单元格(例如,3 个单元格 x 5 个单元格的范围),则此偏移量将无法正常工作,因为它无法为多个单元格返回值。 如果是单数单元格,直接引用即可。 如果您正在搜索范围以查找参考单元格,则可以通过以下方式实现:

Dim j As Integer
Dim foundRange As Range
Dim searchFor as string
Dim Notional_Tenor As Range
Dim Value As Integer

j = 1
searchFor = "some value"

Set Notional_Tenor = Sheets("Scenario & Inputs").Range("Notional_Tenor")

Set foundRange = Notional_Tenor.Find(What:=searchFor, LookIn:=xlValues, LookAt:=xlWhole)
Value = foundRange.Offset(0, 3 + j).Value
MsgBox Value

【讨论】:

以上是关于VBA - 范围对象的偏移量(命名引用)的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 使用二维数组的值填充单元格时出错

VBA学习笔记之Range.Offset属性

Internet Explorer TextRange 中的字符偏移

未捕获的 DOMException:无法在“范围”上执行“setStart”:偏移量大于节点的长度

PHP中的ArrayAccess——通过引用分配给偏移量

从“未配置分区重置策略的偏移量超出范围”中恢复