我的工作表中已有特定列的已定义名称。 如何按定义的名称显示单元格值?
我试过这些:
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
答案 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());
}