Не удается применить автофильтр VBA к таблице, которую я экспортирую в CSV - PullRequest
0 голосов
/ 13 января 2019

У меня есть таблица со строками, в которых есть ячейки с "" пустым ?! символы, поэтому я пытаюсь сделать следующее, чтобы отфильтровать эти строки

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

Но я получаю всю таблицу, когда делаю следующее

'COPY TABLE RANGE TO ARRAY
tblArr = tbl.Range.Value

'SET FILE OUTPUT
fNum = FreeFile()
Open csvFilePath For Output As #fNum

For i = 1 To UBound(tblArr)
    rowArr = Application.Index(tblArr, i, 0)
    csvVal = VBA.Join(rowArr, ";")
    Print #1, csvVal  
Next

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

Весь саб

Sub saveTableToCSV()

Dim tbl As ListObject
Dim csvFilePath As String
Dim fNum As Integer
Dim tblArr As Variant


Dim rowArr

Dim csvVal


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

'SET PATH
csvFilePath = "C:\Users\FatherNick\Desktop\CSVFile.csv"
'COPY TABLE RANGE TO ARRAY
tblArr = tbl.Range.Value

'SET FILE OUTPUT
fNum = FreeFile()
Open csvFilePath For Output As #fNum

For i = 1 To UBound(tblArr)

    rowArr = Application.Index(tblArr, i, 0)
    csvVal = VBA.Join(rowArr, ";")
    Print #1, csvVal

Next
'RESET FILTER
'tbl.AutoFilter.ShowAllData
Close #fNum
Set tblArr = Nothing
Set rowArr = Nothing
Set csvVal = Nothing
End Sub

Как я могу передать Array отфильтрованную таблицу, а не всю таблицу?

1 Ответ

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

Попробуйте что-то вроде кода ниже (пояснения в комментариях к кодам):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...