Мне нужно создать именованный диапазон, который ссылается на последние несколько строк данных в таблице ListObject. Хотя я могу сделать это вручную из ленты (Формулы> Определить имя), я должен сделать это через 20 листов с 3 диапазонами.Создайте динамический именованный диапазон в VBA, который ссылается на таблицу ListObjects
Когда я пытаюсь это использовать с помощью VBA, я получаю ошибку 1004 и предупреждение о том, что есть проблема с формулой и удалить «=», если я не пытаюсь ввести формулу. Есть идеи, как это решить?
Откройте новый лист1, чтобы попробовать мой код. Он создаст таблицу 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)
Я не понимаю, что происходит не так.
Yahoo, это работает! Спасибо! Я пытался понять это несколько часов. Можете ли вы дать небольшое объяснение, почему это работает? Документация Microsoft не очень помогает в этом отношении. – MJA
Я просто добавил 'Name: =' и 'RefersToR1C1: ='. Я знаю, что это странно, потому что по умолчанию параметры 1-го 2 - это имя и ссылка, и в большинстве случаев вам не нужно указывать их, но в этом случае вам нужно ... заставить его работать –