Excel 将命名范围名称读入VBA数组

Excel 将命名范围名称读入VBA数组,excel,vba,Excel,Vba,我试图找出如何将给定工作表中的范围名称放入数组中。我已经有了listnames函数,但它似乎一次就列出了它们。有什么想法吗?比如: Sub listum() Dim ary(1 To 3) As String With ActiveWorkbook If .Names.Count > 0 Then For i = 1 To .Names.Count MsgBox (i & " " &

我试图找出如何将给定工作表中的范围名称放入数组中。我已经有了listnames函数,但它似乎一次就列出了它们。有什么想法吗?

比如:

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
将显示它们并将它们放入数组中


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

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

    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以避免类似问题。非常感谢!我要给这个打个电话go@JamesMcS请放弃它。我刚开始:-)谢谢。非常感谢,我会给你一个机会。我刚刚试过这个,我不知道“名称”-但它将工作簿名称、打印区域等放入数组中,这会造成问题。有什么想法吗?@JamesMcS您需要测试它们……毕竟,
PrintArea
是一组有效的单元格,就像任何其他用户定义的命名区域一样@詹姆士:你有没有找到办法把他们排除在外?我正在使用命名范围为word构建一个小型模板导出器,最好排除内置字段