我想获得每个命名单元格的值。我从下面的代码开始。
它能够列出名称但不显示正确值的单元格。在变量n.value
中,我得到一个引用,例如=Orders!$G$8
,而我期望25美元,因为25美元是单元格真正包含的内容。
问题是:
如何使用" Names"获取包含的值在for循环中收集?
代码:
Sub ListVarsWithValue()
Dim n As Name
Dim Count As Integer
Dim s As String
s=""
For Each n In ActiveWorkbook.Names
s = s + n.Name + "=" + n.Value + chr(10) '<-- n.value not OK
Next n
MsgBox s
End Sub
答案 0 :(得分:3)
这是因为名称的值是公式形式的增强地址..............您需要:
Sub ListVarsWithValue()
Dim n As Name
Dim Count As Integer
Dim s As String
s = ""
For Each n In ActiveWorkbook.Names
s = s & n.Name & "=" & n.Value & "-" & Range(n.Value).Value & vbCrLf
Next n
MsgBox s
End Sub
逻辑是:
Range(n.Value).Value
就像:Range("Sheet4!$B$4").Value
就像:bee
这是实际的细胞内容!
答案 1 :(得分:2)
Name表示一系列单元格的已定义名称。当你在activeworkbook上运行它时,你将拉出Print_Areas和xlfn.countifs_以及你甚至不知道的其他奇怪的名字对象。此外,如果您的范围超过一个单元格,则范围(n.value).value将不起作用。尝试为每个名称提取值有两个未知数。
我会在你的sub中抛出一个测试,以确保有一个值。这很快又脏,但你明白了。
Sub sdf()
On Error Resume Next ''shouldn't use this but demonstrates how to get what you need
For Each n In ActiveWorkbook.Names
If Not IsError(Range(n.Value).Value) Then ''just try something like this
Debug.Print n.Name & n.Value & Range(n.Value).Value
End If
Next
End Sub