Excel VBA将动态命名范围结果合并为静态范围i/o,保持动态

Excel VBA将动态命名范围结果合并为静态范围i/o,保持动态,excel,64-bit,vba7,vba,Excel,64 Bit,Vba7,Vba,上下文(VBA7.1,Excel 2013 Pro): 所有图纸和动态命名范围(DNR)都是通过编程方式创建的。我想将一些DNR单元(在多个列上有相同数据的情况)合并到一个DNR中,以便对它们进行分组。在此阶段,单位DNR及其合并结果均在工作表范围内 问题: 合并的命名范围不保留所有单个DNR的动态属性。如果我手动操作,它当然可以工作,只是为了确认要合并的DNR是有效的动态的 问题: 如何应用命名范围合并,使结果范围也保持为动态命名范围 主代码 Sub xx() ... some code g

上下文(VBA7.1,Excel 2013 Pro):
所有图纸和动态命名范围(DNR)都是通过编程方式创建的。我想将一些DNR单元(在多个列上有相同数据的情况)合并到一个DNR中,以便对它们进行分组。在此阶段,单位DNR及其合并结果均在工作表范围内

问题
合并的命名范围不保留所有单个DNR的动态属性。如果我手动操作,它当然可以工作,只是为了确认要合并的DNR是有效的动态的

问题
如何应用命名范围合并,使结果范围也保持为动态命名范围


主代码

Sub xx()
... some code goes here ...
    Dim DNRnames() As String
    Dim MergedRange As Range
    Dim currentRng As Range
    Dim rngStr As Variant
    Dim strStringToExclude() As String

    ' Get created DNRs on this sheet
        strStringToExclude = Split("_Desc,Headers", ",")
        DNRnames = DNRGetNames(aWS.Name, False, strStringToExclude)

      ' Merge DNRs into 1 
        For Each rngStr In DNRnames
          ' Set currentRng = aWS.Names(CStr(rngStr)).RefersToRange
          Set currentRng = aWS.Range(CStr(rngStr)) ' also this way keeps it static
          If Not MergedRange Is Nothing Then
            Set MergedRange = Union(MergedRange, currentRng)
          Else
            Set MergedRange = currentRng
          End If
        Next rngStr

      ' Add "MergedRange" to the aWS : ISSUE : the MergeRange is NOT dynamic...
      ' as it would be if I would create it in the ws by a named_range=(range1,range2,..)
        aWS.Names.Add Name:=DNRprefix & "All", RefersTo:=MergedRange
...
end sub
GetDNR:以字符串数组形式从工作表中返回命名范围,并排除一些我不想合并的选定命名范围(这是一种解决方法,因为我在VBA中找到了“Union”但没有“Substract”函数)

通过
GetDNR
函数返回的DNR

引用必须是字符串(例如
“=A1,B2”
):

Range.Address
限制为255个字符,因此可能需要在合并范围之前创建它


对于工作簿范围命名范围:

MergedRange.Name = DNRprefix & "All"

Thx-Slai;我并没有百分之百地理解它。第二行是
aWS.Names.Add…
没有编译,我对VBA没有足够的技能来找出问题所在。@hornetbzz我在
aWS.Names.Add DNRprefix&“All”、“=”&MergedRange.Address
行中看不到任何可能无法编译的内容,但如果您能提供更多细节,我可能会想到一些东西。我在Excel 2016上试用了它,它使用了
Sheet1.Names.Add“ab”,“A1,B2”
aWS.Names.Add Name:=DNRprefix(0)和“_All”,“=”&MergedRange.Address(0,0)
导致此编译错误:
预期:命名参数
删除
名称:=
参数名称,或者也包括
引用:=
参数名称。@hornetbzz抱歉,我可能误解了这个问题。我找不到一种方法来保持组合命名范围的动态性,即使是像
,referesto:=“=Name1,Name2”
,referesto:=“=INDIRECT(““Name1,Name2”)”,
,referesto:=”=EVALUATE(““Name1,Name2”)
。我猜一个VBA UDF函数可能是一个选项,它引用类似于
Range(“Name1,Name2”)
的内容。
Set MergedRange = aWS.Range(Join(DNRnames, ","))
aWS.Names.Add DNRprefix & "All", "=" & MergedRange.Address
MergedRange.Name = DNRprefix & "All"