VBA - использование автофильтра для фильтрации и копирования данных - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в VBA. На данный момент я пытаюсь отфильтровать данные на одном листе и скопировать результаты на другой лист. На самом деле это хорошо работает, но не работает в том случае, если автофильтр дает какие-либо результаты. В этом случае я бы увидел только заголовок.

Я попытался решить эту проблему, посчитав строки в видимом диапазоне. Теперь у меня есть эта проблема:

Для случая с 4 результатами (результаты заголовка + 4 строки) я получаю со следующим кодом 4 строки:

Sheets("Table1").UsedRange.Offset(1).SpecialCells(xlCellTypeVisible).Rows.Count

Когда у меня есть случай с 1 результатом (Заголовок первой строки + 1 результат строки) Я получаю тот же код, что и результат 1. А теперь моя проблема: когда у меня 0 результатов, я также получаю тот же код 1. Таким образом, нет никакой разницы между не результатом и одним результатом. И когда я пытаюсь считать без смещения

Sheets("Table1").UsedRange.Offset(0).SpecialCells(xlCellTypeVisible).Rows.Count'

, я всегда получаю 1. Даже когда это результаты. Кажется, что без смещения код просто считает заголовок.

Может кто-нибудь мне помочь?

Это та часть, где я использую автофильтр:

File = "File.xls"
Workbooks(File).Sheets("Table1").Activate
    
Sheets("Table1").Rows("1:1").AutoFilter Field:=10, Criteria1:=">=" & CDbl(Datum1), Operator:=xlAnd, Criteria2:="<=" & CDbl(Datum2)     

Sheets("Table1").Rows("1:1").AutoFilter Field:=2, Criteria1:="*Text*" 'Filterung angepasst

Debug.Print "Result:"
Debug.Print Sheets("Table1").UsedRange.SpecialCells(xlCellTypeVisible).Rows.Count
Debug.Print Sheets("Table1").UsedRange.Offset(1).SpecialCells(xlCellTypeVisible).Rows.Count

If Sheets("Table1").UsedRange.Offset(1).SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
    'Code for Copying
End If
...