2

我无法从 Excel VBA 中的命名公式返回值(一个简单的命名范围按预期工作)。

重新创建的步骤

  1. 空白工作簿
  2. 创建命名范围/公式rowOffset等于:

    =ROW(Sheet1!$A$2)-ROW(Sheet1!$A$1)
    
  3. rowOffset按预期进行评估(等于 1)

但是,我一直无法弄清楚如何返回rowOffsetVBA 内部的值。

有错误的示例代码

'##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 的(非常简单!)答案。通过当地人的窗口一趟,我应该能够自己解决这个问题!哈哈。

4

3 回答 3

2

首先,有趣的问题!

工作代码:

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()实际上返回带有一个元素而不是单个值的数组,
即 ie {1},而您所需要的只是使用它的第一个元素或连接数组Join

在此处输入图像描述

于 2014-04-15T20:12:39.590 回答
1

看起来以下答案应该为您提供完成它所需的详细信息。很惊讶没有更简单的东西,但希望它有所帮助!

Excel 在工作表中列出命名范围并获取值

于 2014-04-15T19:51:12.723 回答
0

谢谢这对我有帮助。我变了

Application.Evaluate(Me.Names("rowOffset").Value)

Application.Evaluate(ThisWorkbook.Names("rowOffset").Value)

这允许用户访问在电子表格中没有单元格地址的命名范围。

于 2019-10-15T14:12:49.843 回答