在 VBA 中使用命名范围

问题描述

如何在 VBA 中使用动态命名范围?例如,现在我使用名为“Range1”的命名范围,但用户可能会选择不同的名称(我必须使用很多命名范围,因此我需要更通用的名称)。我是新手,但我应该将命名范围存储在变量中吗?提前致谢!

这是我目前所拥有的:

Dim MyArray
Dim dctCol As dictionary
Dim strKey1 As String

Set dctCol = New dictionary  
MyArray = Range(ActiveWorkbook.Names("Range1").RefersToRange.Address)
For j = 2 To UBound(MyArray,2) 
    strKey1 = Trim(MyArray (1,j)) & "," & Trim(MyArray (2," & Trim(MyArray (3,j))
    dctCol(strKey1) = j
Next

解决方法

目前还不清楚需要什么。但是如果你只想处理一本书中的所有命名范围,而不管它们的名字,你可以通过 WB 名称集合:

Sub ListNamesAddresses()
    Dim nm As Name
    For Each nm In ActiveWorkbook.Names
        Debug.Print nm.Name,nm.RefersToRange.Address
        'do something with names and it's properties
    Next
End Sub

输出:

Name1         $D$4:$D$21
Name2         $E$4:$E$21
Name3         $F$4:$F$21
Name4         $G$4:$G$21
Name5         $H$4:$H$21
Name6         $I$4:$I$21