我在从 Excel VBA 中的命名公式返回值时遇到问题(简单的命名范围按预期工作)。
重新创建的步骤
- 空白工作簿
创建命名范围/公式
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 的(非常简单!)答案。通过本地人的窗口一趟,我应该能够自己解决这个问题!哈哈。
最佳答案
首先,有趣的问题!
沃金代码:
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
获取它的第一个元素或连接数组。
关于excel - 从命名范围/公式返回值(错误 1004、2015 或 13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092865/