如何遍历命名单元格并列出每个单元格的值

时间:2016-05-17 22:55:42

标签: excel vba excel-vba

我想获得每个命名单元格的值。我从下面的代码开始。 它能够列出名称但不显示正确值的单元格。在变量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

2 个答案:

答案 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

enter image description here

逻辑是:

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