Невозможно выбрать автоматически отфильтрованные данные таблицы с помощью VBA - PullRequest
0 голосов
/ 23 января 2019

У меня есть таблица с продуктами, я применяю автофильтр и получаю отфильтрованные продукты

Set tbl = Worksheets("FOR EXPORT").ListObjects("MyTable")
'SET AUTOFILTER
tbl.Range.AutoFilter Field:=3, Criteria1:="<>*ERROR*"

Я хочу отфильтровать продукты, скопировать их в массив, чтобы иметь возможность экспортировать их в CSV

Поэтому я пытаюсь выбрать отфильтрованные продукты, такие как

Dim VisRng As Range
' set the new Range object to the visible cells of `tbl.Range`
Set VisRng = tbl.Range.SpecialCells(xlCellTypeVisible)
' copy only the visible cells in range to array
tblArr = VisRng.Value

Если я добавлю tbl.Range.SpecialCells(xlCellTypeVisible).select, он запрашивает объект

Даже если есть около 362 отфильтрованных продуктов, я получаю только196

Как скопировать отфильтрованные данные в переменную tblArr?Почему я получаю меньше продуктов?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Другим решением было бы VisRng.Copy и вставить значения в новую рабочую книгу / рабочий лист.Затем экспортируйте / сохраните этот лист как CSV.Копирование / вставка несмежного диапазона делает его непрерывным в месте назначения.

Пример:

Dim NewWB As Workbook 'create new workbook
Set NewWB = Application.Workbooks.Add

VisRng.Copy

NewWB.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
NewWB.SaveAs Filename:="C:\Temp\MyFile.csv", FileFormat:=xlCSV
NewWB.Close SaveChanges:=False
0 голосов
/ 23 января 2019

Ваши отфильтрованные данные не являются смежными.Если вы фильтруете свои данные и между первым и последним отфильтрованными строками есть скрытые строки, тогда ваши данные не будут смежными.

Если вы отсортируете свои данные по Field:=3 до фильтрации, то у вас будет смежный диапазон, который вынужно положить в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...