1
我需要創建一個引用ListObject表中最後幾行數據的命名範圍。雖然我可以從功能區手動執行此操作(「公式」>「定義名稱」),但我必須在20張紙上執行此操作,每個紙張都有3個範圍。在VBA中創建引用ListObjects表的動態命名範圍
當我嘗試使用VBA時出現錯誤1004,並警告說公式存在問題,如果我不嘗試輸入公式,則刪除「=」。任何想法如何解決這個問題?
打開一個新的Sheet1來嘗試我的代碼。它將創建一個ListObjects表並嘗試創建Named範圍。
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)
我不明白什麼地方出了錯。
雅虎,它的作品!謝謝!我試圖找出幾個小時。你能解釋一下爲什麼這有效嗎?微軟的文檔在這方面不是很有幫助。 – MJA
我剛添加了'Name:='和'RefersToR1C1:='。我知道這很奇怪,因爲默認情況下,前2個參數是名稱和引用,並且在大多數情況下,您不需要指定它們,但在這種情況下,您必須...使其工作 –