我很难从Excel中的命名公式返回一个值(一个简单的命名范围如预期的那样工作)。
重新创建的步骤
rowOffset
,等于:
=ROW(Sheet1!$A$2)-ROW(Sheet1!$A$1)rowOffset
按预期计算(等于1)但是,我一直无法弄清楚如何在VBA中返回rowOffset
的值。
带误差的样本码
'##Sheet1 module##
Sub test()
'ERROR 1004: application-defined or object-defined error
Debug.Print Me.Range("rowOffset").Value
'Returns formula
Debug.Print Me.Names("rowOffset").Value
'ERROR 2015 in Immediate window
Debug.Print Application.Evaluate(Me.Names("rowOffset"))
'ERROR 13: type mismatch
Debug.Print Application.Evaluate(Me.Names("rowOffset").Value)
End Sub
为什么上面的代码在这种特定情况下不能工作,但是对于定义为=$A$1
的命名范围( A1的值会像预期的那样返回)?
编辑:感谢Simoco的(非常简单!)回答。一次通过当地人的窗口,我应该能够自己解决这个问题!哈哈。
发布于 2014-04-15 12:12:39
首先,有趣的问题!
工作代码:
Debug.Print Evaluate("rowOffset")(1)
或
Debug.Print Join(Evaluate("rowOffset"))
或
Debug.Print Evaluate("INDEX(rowOffset,1)")
或
Debug.Print [INDEX(rowOffset,1)]
为什么Debug.Print Evaluate("rowOffset")
不能工作?
原因是因为ROW()
实际上用一个元素而不是单个值返回数组,
也就是说,{1}
,您所需要的就是使用Join
获取它的第一个元素或级联数组。
发布于 2014-04-15 11:51:12
看起来,下面的答案应该会给出完成任务所需的详细信息。惊讶的是没有更简单的东西,但希望它有帮助!
发布于 2019-10-15 06:12:49
谢谢这个帮了我。我改变了
Application.Evaluate(Me.Names("rowOffset").Value)
至
Application.Evaluate(ThisWorkbook.Names("rowOffset").Value)
这允许用户访问在规范表中没有单元格地址的命名范围。
https://stackoverflow.com/questions/23092865
复制相似问题