Используйте текст ячейки в качестве аргумента функции 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