2016-08-05 2 views
1

Мне нужно создать именованный диапазон, который ссылается на последние несколько строк данных в таблице 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) 

Я не понимаю, что происходит не так.

ответ

2

Изменить

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)" 

ли, что для остальных, а

+0

Yahoo, это работает! Спасибо! Я пытался понять это несколько часов. Можете ли вы дать небольшое объяснение, почему это работает? Документация Microsoft не очень помогает в этом отношении. – MJA

+1

Я просто добавил 'Name: =' и 'RefersToR1C1: ='. Я знаю, что это странно, потому что по умолчанию параметры 1-го 2 - это имя и ссылка, и в большинстве случаев вам не нужно указывать их, но в этом случае вам нужно ... заставить его работать –

Смежные вопросы