在VBA中创build引用ListObjects表的dynamic命名范围

我需要创build一个指向ListObject表中最后几行数据的命名范围。 虽然我可以手动从function区(公式>定义名称),我必须做20个工作表,每个3个范围。

当我尝试使用VBA时,出现错误1004,并提示公式存在问题,如果我不想input公式,则删除“=”。 任何想法如何解决这个问题?

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

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 

如果我在名称pipe理器中手动定义范围,我可以分配这个参考,它的工作原理:

 =OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH("Red",tblTix[#Headers],0)-1,1,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)" 

这样做的rest