Excel 365中VBA相对命名Range属性返回值异常问题
Excel 365 动态相对命名范围VBA取值问题解决方法
你设置的是相对引用类型的命名范围(=Materiais!$B3),Excel界面中会自动基于活动单元格的行号偏移,但VBA默认不会自动识别这种相对引用的上下文,导致取值错误。以下是几种可行的解决方法:
方法1:用Evaluate函数解析相对引用
Evaluate会遵循Excel界面的规则,以当前活动单元格为基准解析相对命名范围,代码如下:
Sub ValorRange() MsgBox Evaluate("Materiais!ID").Value End Sub
执行后就能正确获取对应活动单元格行的B列值。
方法2:手动定位目标单元格
直接获取活动单元格的行号,跳过命名范围的相对引用逻辑,代码示例:
Sub ValorRange() Dim targetRow As Long targetRow = ActiveCell.Row MsgBox ThisWorkbook.Worksheets("Materiais").Range("B" & targetRow).Value End Sub
方法3:修改命名范围为动态绝对引用
将命名范围ID的引用地址修改为:
=Materiais!$B$INDIRECT(ROW())
修改后,无论是Excel界面还是VBA代码中,Range("ID").Value都会自动基于当前单元格的行号返回对应B列的值。
版本差异说明
Excel 365调整了VBA解析相对引用命名范围的默认上下文,不再自动以活动单元格为基准计算偏移;而Excel 2010会默认继承活动单元格的上下文,因此不会出现该问题。
内容的提问来源于stack exchange,提问作者Alex Boorjs
相关产品推荐
相关产品推荐

