Operowanie na ukrytych wierszach często prowadzi do nieprzewidzianych skutków, a w konsekwencji do błędów.
Ukryte Wiersze
Przykładem może być wykorzystanie metody Find do znalezienia ostatniego niepustego wiersza. Gdy część danych jest ukryta filtrem, funkcja może zwrócić błędny wynik.
Jest to sytuacja bardzo niebezpieczna dla programisty. Co zatem robić? Czy musimy rezygnować z ulubionych rozwiązań na rzecz innych?
Moim zdaniem niekoniecznie. Możemy zawsze sprawdzić czy na tabeli jest założony filtr i go ewentualnie ściągnąć lub pokazać wszystkie dane.
Obiekt “Tabela”
Ostatnio natrafiłem na bardzo ciekawy problem.
Standardowo, w celu ustalenia czy arkusz ma założony autofiltr używa się właściwości AutoFilterMode. Opcjonalnie może być też FilterMode, jeśli chcemy dodatkowo sprawdzić czy mamy wyfiltrowane dane.
To są jednak właściwości arkusza. Problem pojawia się, gdy korzystamy z Tabeli (wbudowane narzędzie Excela wcześniej znane jako Lista).
Takie dane nie reagują na stan właściwości AutoFilterMode, bowiem reprezentują zupełnie inny obiekt – Tabelę. Nawet jeśli widzimy gołym okiem filtr, który jest założony na tabelę, to właściwość AutoFilterMode zwróci w wyniku FALSE. I to może być dalej źródłem potencjalnych błędów.
Kod Makra
Aby sprawdzić zarówno arkusz jak i ewentualnie tabelę, można się posłużyć takim fragmentem kodu…
For Each wksArkusz In ThisWorkbook.Worksheets
If wksArkusz.ListObjects.Count > 0 Then
If Not wksArkusz.ListObjects(1).AutoFilter Is Nothing Then
wksArkusz.Range("A1").AutoFilter
End If
Else
If wksArkusz.AutoFilterMode Then
wksArkusz.Range("A1").AutoFilter
End If
End If
Next wksArkusz