#excel #vba #excel-tables #advanced-filter
#excel #vba #excel-таблицы #расширенный-фильтр
Вопрос:
У меня есть лист «RM» в рабочей книге и еще один лист «ST» в той же рабочей книге. «RM» имеет Table2, а «ST» — таблицу 3
Я использую следующий код для копирования из RM на другой лист «Andy» refName — это критерий в «Andy», а topRowName — строка «Andy!B1:M1»
Sheets("RM").Range("Table2[#All]").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range(refName), CopyToRange:=Range(topRowName), Unique:= _
False
Пока все хорошо, все работает
Теперь я хочу скопировать из «ST» также в «Andy», но вставить его на несколько строк ниже «topRowName», чтобы он не перезаписывался, поэтому я делаю смещение
Sheets("ST").Range("Table3[#All]").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range(refName), CopyToRange:=Range(topRowName).Offset(5), Unique:= _
False
но он выдает ошибку 1004 «В извлеченном диапазоне отсутствует или недопустимое имя поля»
Я попытался жестко запрограммировать значения в диапазоне следующим образом
Sheets("RM").Range("Table2[#All]").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range(refName), CopyToRange:=Range(Andy!B5:M5), Unique:= _
False
Но это все равно не работает. Это потому, что в месте вставки есть таблица? я попытался изменить размер таблицы, чтобы она не конфликтовала с новой вставкой, но это не помогло. Любая помощь приветствуется
Комментарии:
1. Проверьте определения вашего рабочего листа. Как определяется вкладка диапазона (refName)? Может ли CriteriaRange быть на любом листе (я не знаю)? Как определяется диапазон (topRowName)?
Range(Andy!B5:M5)
неправильный синтаксис. Таблицы 2 и таблица3 могут быть построены по-разному. Попробуйте использовать имена диапазонов таблиц вместо [#All]. Наконец, попробуйте запустить второй фильтр независимо от первого. Если оба работают независимо, но не вместе, проблема будет другой.2. Это может быть один из немногих случаев, когда
Activate
требуется. СAdvanced Filter CopyToRange
помощью метода рабочий лист, на который вы копируете, должен бытьActiveSheet
.
Ответ №1:
Спасибо всем, я нашел ответ на причину, по которой это происходило. Мне нужно было очистить содержимое места, в которое я вставляю. По-видимому, Excel не любит копировать содержимое в диапазон, если что-то уже присутствует, в частности, ListObject, такой как таблица. Я предположил, что он просто напишет поверх него.