VBA:如何按其定义的名称显示单元格值?

时间:2010-10-07 11:57:42

标签: excel vba scripting excel-vba ms-office

我的工作表中已有特定列的已定义名称。 如何按定义的名称显示单元格值?

我试过这些:

  Public Sub Test()
    Dim R As Range
    Set R = ThisWorkbook.Names("SomeName").RefersToRange
    MsgBox CStr(R.Value)
  End Sub

但运行时错误发生“类型不匹配”(错误代码:13)。

代码有什么问题? RefersToRange.Value的实际数据类型是什么?

文档说RefersToRange返回Range对象,但它似乎与ActiveCell返回的Range对象不同,因为我对以下代码没有任何问题:

  MsgBox CStr(ActiveCell.Value)

我一直在使用Excel 2003

4 个答案:

答案 0 :(得分:2)

如果范围跨越多个单元格,则需要遍历该范围内的单元格并分别获取每个单元格的值。否则会抛出错误。

Sub Test()

    Dim r As Range
    Dim cell As Range

    Set r = Range("Something")

    If r.Cells.Count > 1 Then
        For Each cell In r.Cells
            MsgBox cell.Value
        Next cell
    Else
        MsgBox r.Value
    End If
End Sub

但是,您可以通过设置多单元格区域的值来将值设置为范围中定义的所有单元格:

Sub Test()

    Dim r As Range

    Set r = Range("Something")

    r.Value = "Test"
End Sub

答案 1 :(得分:2)

RefersToRange确实返回一个Range对象。我假设你在Cstr线上得到了Type Mismatch。如果范围有多个单元格,则Value属性返回Variant数组。在立即窗口中执行此操作(VBE中的Control + G)。

?typename(thisworkbook.Names("SomeRange").RefersTorange)
Range
?typename(thisworkbook.Names("SomeRange").RefersToRange.Value)
Variant()

CStr函数无法处理数组参数,这就是您收到该错误的原因。您可以到达范围内的特定单元格,如第一个单元格,如此

ThisWorkbook.Names("SomeRange").RefersToRange(1).Value

或者像芬克建议的那样循环播放它们。

答案 2 :(得分:1)

您应该只能为Range(甚至是Cells)属性提供名称:

Set R = ThisWorkbook.Range("SomeName")

答案 3 :(得分:0)

您可以按名称获取单元格值,如下所示: -

@Inject
UserDaoImpl userDaoImpl;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    User user = userDaoImpl.findByUsername("USERNAME");

    PrintWriter out = response.getWriter();
    out.println(user.getName());
}