【问题标题】:Read Named Range Names into VBA array将命名范围名称读入 VBA 数组
【发布时间】:2017-06-07 10:46:58
【问题描述】:

我试图弄清楚如何将给定工作表中的范围名称放入数组中。我已经了解了 listnames 功能,但这似乎一次性列出了它们。有什么想法吗?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    类似:

    Sub listum()
        Dim ary(1 To 3) As String
        With ActiveWorkbook
            If .Names.Count > 0 Then
                For i = 1 To .Names.Count
                    MsgBox (i & "  " & .Names(i).Name & "  " & Range(.Names(i)).Address)
                    ary(i) = .Names(i).Name
                Next
            End If
        End With
    End Sub
    

    将显示它们并将它们放入一个数组中。

    调整数组大小以满足您的需要。
    确保工作簿中没有非范围名称。

    【讨论】:

    • 非常感谢,我试试看
    • 刚刚试过这个,我不知道“名称” - 但它会将工作簿名称、打印区域等放入数组中,这会导致问题。有什么想法吗?
    • @JamesMcS 你需要测试它们......毕竟,PrintArea 是一个有效的单元格组,就像任何其他用户定义的命名范围一样!
    • @JamesMcS:你有没有找到办法很好地排除它们?我正在使用命名范围为单词构建一个小型模板导出器,最好排除内置字段github.com/coezbek/…
    【解决方案2】:

    我的版本是我用的动态数组:

        Sub TestNamedRange()
        Dim i As Long
        Dim intCount As Long
        Dim NameArray() As String
        'count number of named ranges
        intCount = ThisWorkbook.Names.Count
        ReDim NameArray(intCount)  'for dynamic number of named ranges
        'assign all names to each array element
        For i = 1 To intCount
          NameArray(i) = ThisWorkbook.Names(i).Name 'remove .Name if you want address range only
        Next
       'check array elements
       For Each ele In NameArray
         Debug.Print ele
       Next
      'manipulate your array here
      End Sub
    

    【讨论】:

    • 虽然我很少见过名称超过 32767 个的工作簿,但最好使用 Long 而不是整数。由于使用 Integer 与 Long 相比没有任何优势,我建议始终使用 Long 来避免此类问题。
    • 非常感谢!我试试看
    • @JamesMcS 请放弃。我才刚开始:-) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2013-12-27
    • 2019-12-05
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多