【问题标题】:Create dynamic named range in VBA that references ListObjects table在 VBA 中创建引用 ListObjects 表的动态命名范围
【发布时间】:2016-12-11 08:01:45
【问题描述】:

我需要创建一个命名范围来引用 ListObject 表中的最后几行数据。虽然我可以从功能区(公式 > 定义名称)手动执行此操作,但我必须在 20 张纸上执行此操作,每张有 3 个范围。

当我使用 VBA 尝试此操作时,我收到错误 1004 并警告说公式存在问题,如果我不尝试输入公式,请删除“=”。任何想法如何解决这个问题?

打开一个新的 Sheet1 来试试我的代码。它将创建一个 ListObjects 表并尝试创建命名范围。

Sub test2()
    Dim wks As Worksheet, tbl As ListObject
    Dim arr()

    arr = [{"Date","1/1/2016","2/1/2016","3/1/2016","4/1/2016";"Green",100,200,300,400;"Yellow",350,250,150,50;"Red",10,7,5,3}]
    Set wks = ActiveSheet
    wks.Range("a1:d5") = WorksheetFunction.Transpose(arr)

    Set tbl = wks.ListObjects.Add(xlSrcRange, wks.Range("a1").CurrentRegion, , xlYes)
    tbl.Name = "tblTix"

    ActiveWorkbook.Names.Add "rngRedLast3Mos", "=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH(""Red"",tblTix[#Headers],0)-1,3,1)"  'THIS FAILS
    ActiveWorkbook.Names.Add "rngRedLast3Mos", "=OFFSET(Sheet1!$A$1,2,3,3,1)"  'THIS WORKS
    ActiveWorkbook.Names.Add "rngRedLast3Mos", "=Sheet1!$D$3:$D$5"  'THIS ALSO WORKS

    Debug.Print ActiveWorkbook.Names("rngRedLast3Mos").RefersTo
    Debug.Print ActiveSheet.Range("rngRedLast3Mos").Address

End Sub

如果我在名称管理器中手动定义范围,我可以分配这个引用,它可以工作:

=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH("Red",tblTix[#Headers],0)-1,1,1)

我不明白出了什么问题。

【问题讨论】:

    标签: vba excel named-ranges listobject


    【解决方案1】:

    改变

    ActiveWorkbook.Names.Add "rngRedLast3Mos", _
    "=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH(""Red"",tblTix[#Headers],0)-1,3,1)"
    

    ActiveWorkbook.Names.Add Name:="rngRedLast3Mos", RefersToR1C1:= _
    "=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH(""Red"",tblTix[#Headers],0)-1,3,1)"
    

    其他的也这样做

    【讨论】:

    • 雅虎,它有效!谢谢!我试图弄清楚几个小时。你能解释一下为什么会这样吗?微软的文档在这方面不是很有帮助。
    • 我刚刚添加了Name:=RefersToR1C1:=。我知道这很奇怪,因为默认情况下,第 2 个参数是名称和引用,在大多数情况下,您不需要指定它们,但在这种情况下,您必须.. 使其工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多