【问题标题】:Use named ranges in VBA在 VBA 中使用命名范围
【发布时间】:2021-10-01 04:30:59
【问题描述】:

如何在 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, j)) & "," & Trim(MyArray (3, j))
    dctCol(strKey1) = j
Next

【问题讨论】:

  • 应该只是Range("NamedRangeName")。所以对你来说,Range("Range1").Value 因为你将它添加到数组中。
  • @Simon 但是如果用户将范围的名称更改为“MyRange”怎么办?即使更改了命名范围,我也希望我的代码能够运行。这就是我的意思:(
  • 您可以创建另一个命名范围,链接到您想要的范围并在代码中使用它(因为它会在所需范围更改名称时自动更新)。否则,让此人使用 InputBox 输入命名范围的名称
  • 如果用户删除名称或更改命名区域,建议做什么?
  • 最后我想将单元格从工作表(来自另一个工作簿)复制到该范围。因此,如果 Range 不存在,则不会发生复制。

标签: arrays excel vba range named-ranges


【解决方案1】:

目前还不清楚需要什么。但是,如果您只想处理一本书中的所有命名范围,无论它们的名称如何,您都可以通过 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

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多