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

我已经为我的工作表中的特定列定义了一个名称。 如何通过定义的名称显示单元格值?

我试过这些:

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

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

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

该文件说,RefersToRange返回Range对象,但它似乎不同于ActiveCell返回的Range对象,因为我没有问题,下面的代码:

  MsgBox CStr(ActiveCell.Value) 

我一直在使用Excel 2003

RefersToRange返回一个Range对象。 我假设你得到了Cstr行的types不匹配。 如果范围有多个单元格,则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 

或者像Finkbuild议的那样通过它们循环。

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

 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 

您应该能够提供名称范围(甚至单元格)属性:

 Set R = ThisWorkbook.Range("SomeName") 

您可以按照以下名称获取单元格值: –

 Workbook.Range("SomeName").Value