Используйте текст ячейки в качестве аргумента функции range() со структурированными ссылками.

Я хочу выполнить расширенный фильтр с помощью vba. Проблемным шагом является то, что имя исходной таблицы (для расширенного фильтра) записано в ячейке, и мне кажется, что я не могу найти способ передать его вrange().

Вот идея:

Ячейка F5 содержит "DatePlace", и это имя таблицы, которую следует использовать в расширенном фильтре. Записав макрос, я увидел, что мы можем использовать структурированные ссылки в VBA, но когда я пытаюсь взять ссылку из значения F5, расширенный фильтр больше не выполняется.

Я получаю это окно с сообщением об ошибке (переведено с французского):

Execution error '1004':
Error defined by the application or by the object

Вот одна из моих попыток:

Worksheets("Planning")
.Range(Worksheets("Macro").Range("$F$5").Text & "[[#Headers],[#Data]]")
.AdvancedFilter Action _:=xlFilterCopy, 
CriteriaRange:=Worksheets("Planning").Range("E7:F8"), 
CopyToRange:=Worksheets("Planning").Range( _"E11:F11"), Unique:=False

Я пробовал с .Value вместо того .Text. Я тоже пробовал передать его строковой переменной. Я тоже пробовал писать полную ссылку в ячейку F5. И когда я попытался получить переменную диапазона, я просто переместил проблему в начало этой переменной.

Любая помощь приветствуется.

Изменить 1: Этот способ сделать это работает, но мне нужно жестко закодировать структурированную ссылку, и это именно то, чего я хочу избежать.

Worksheets("Planning")
.Range("DateLieu[[#Headers],[#Data]]")
.AdvancedFilter Action _:=xlFilterCopy, 
CriteriaRange:=Range("A6:B7"), 
CopyToRange:=Range( _"A10:B10"), Unique:=False

Изменить 2: он должен был работать без проблем. Вот как теперь выглядит код.

' Variables
Dim rngPlanning As String

' Initiations
rngPlanning = ThisWorkbook.Worksheets("Macro").Range("$F$5").Text & "[[#Headers],[#Data]]"

' Actions
    Application.CutCopyMode = False
    Debug.Print (rngPlanning)
    Worksheets("Planning").Range(rngPlanning).AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Worksheets("Macro").Range("$E$7:$F$8"), _
        CopyToRange:=Worksheets("Macro").Range("$E$11:$F$11"), _
        Unique:=False

0 ответов

Другие вопросы по тегам