Как выбрать несколько несмежных столбцов в отфильтрованной таблице Excel, используя имена столбцов - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь скопировать несколько несмежных столбцов из отфильтрованной таблицы на другой лист. Я застрял в части множественного выбора:
* Данные взяты из внешнего источника -> Я не могу контролировать исходную структуру
* Фильтрующие материалы из столбцов, которые мне не нужно копировать -> Яне могу пропустить импорт столбцов, которые мне не нужно копировать.
* Таблица отфильтрована -> Я не могу просто выбрать столбец (например, C: C), мне нужны только отфильтрованные строки.

Возможно ли это сделать с помощью имен заголовков?

Я пробовал несколько строк кода (см. Ниже), но ни одна из них не дала желаемых результатов. Если я записываю макрос, я просто получаю выбор диапазона:
Range ("C155: C30230, E155: E30230"). Выберите

Это то, что ядо сих пор пробовал, сгруппированы по результатам:
Обратите внимание, что это тестовый код, поэтому он не обязательно ссылается на те же столбцы -> Работа, но не совсем то, что я хочу:
' this is only one column Range("myTable[[#Headers],[Email]]").Select

' this is full (unfiltered) column selection Union(ws.Range("C:C"), ws.Range("E:E")).Select<br>

' this is not using header name Union(ActiveSheet.ListObjects("myTable").ListColumns(3).Range, ActiveSheet.ListObjects("myTable").ListColumns(5).Range).Select

-> Эти фрагменты генерируют ошибку времени выполнения "Метод 'Диапазон' объекта
'_Worksheet' не удалось":
Union(Range("myTable[[#Headers],[Email]]").Select, Range("myTable[[#Headers],[Language]]").Select)

Dim rng As Range Set rng = Union(Range("myTable[[#Headers],[Email]]"), Range("myTable[[#Headers],[Language]]"))

Union(Range("myTable[[#Headers],[Email]]"), Range("myTable[[#Headers],[Language]]")).Select

Union(Range("myTable[[#Headers],[Email]]"), Range("A:A")).Select

-> Ошибка генерирования этого фрагмента«Ошибка компиляции: несоответствие типов»:
Dim rng As Range Set rng = Union(Range("myTable[[#Headers],[Email]]").Address, Range("myTable[[#Headers],[Language]]").Address)

Моя цель на этом этапе - просмотреть все выбранные столбцы фильтрованной таблицы.
Спасибо за просмотр этого

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Это работает для меня.

Sub x()

With ActiveSheet.ListObjects(1)
    Union(.ListColumns(1).Range, .ListColumns(3).Range).SpecialCells(xlCellTypeVisible).Copy Range("A18")
End With

End Sub

enter image description here

Есть хорошее руководство по таблицам здесь .

0 голосов
/ 16 октября 2019

Используя структурированные ссылки, как вы показываете, я думаю, вы хотите что-то вроде:

Set R = Union(Range("Table1[[#All],[Email]]"), Range("Table1[[#All],[Language]]")).SpecialCells(xlCellTypeVisible)

R.Copy 'your_destination

Некоторые из ваших ошибок связаны с:

  • вы не предоставляете объекты диапазона дляАргументы Union метода
  • , который вы предоставляете только строке Заголовка для аргумента
  • Использование Select просто сбивает с толку и редко, если вообще необходимо,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...