Kasowanie pustych arkuszy jest tematem znacznie mniej popularnym od kasowania pustych wierszy w tabeli. Co ciekawe, problem pierwszy występuje bardzo często, jednak w przeciwieństwie do drugiego – nie stanowi żadnego zagrożenia.
Trzy arkusze
Każdy nowo dodany skoroszyt składa się standardowo z trzech arkuszy. Opcję tą można zmienić w ustawieniach Excela, ale użytkownicy nie zawsze o tym wiedzą. Być może taka liczba też im odpowiada.
Skutek tego jest taki, że w przesyłanych plikach tylko pierwszy arkusz jest uzupełniony. Dwa pozostałe są puste. Wynika to z pewnego lenistwa. Mało komu chce się usuwać puste arkusze, zwłaszcza gdy plik został przygotowany naprędce.
Usunięcie arkusza wiąże się również z wyświetleniem komunikatu ostrzegawczego. Ustawienie to można wyłączyć jedynie makrem. Więcej przykładów można znaleźć pod tym linkiem.
Kod makra
Kasowanie pustych arkuszy to czynność, przy której musimy pamiętać o jednej ważnej rzeczy.
Nie można usunąć wszystkich arkuszy z pliku. Musi on zawierać przynajmniej jedną zakładkę.
Musimy to istotne założenie uwzględnić w naszym zadaniu.
Makro główne
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub KasujPusteArkusze() ' To makro kasuje puste arkusze w pliku. Poprzez puste arkusze ' rozumiem takie, które nie zawierają żadnych danych w komorkach. ' W celu sprawdzenia czy arkusz zawiera jakieś niepuste komórki ' będę się posługiwał funkcją arkuszową ILE.NIEPUSTYCH/COUNTA. Dim wks As Worksheet ' Egzemplarz obiektu Worksheet ' Aby zacząć kasowanie musimy się upewnić, że conajmniej jeden arkusz ' zawiera jakiekolwiek dane. W przeciwnym razie usunięcie wszystkich ' arkuszy nie będzie możliwe. Inaczej mówiąc - każdy skoroszyt musi ' zawierać conamniej jeden arkusz. If Not CzyPustyPlik(ThisWorkbook) Then ' Wyłączamy wyświetlanie alertów. Będą się one pojawiać zawsze ' przy próbie skasowania arkusza. Po zakończeniu pętli przywrócimy ' ustawienie tej właściwośći na True Application.DisplayAlerts = False For Each wks In ThisWorkbook.Worksheets ' każdy arkusz w pliku If CzyPustyArkusz(wks) Then ' sprawdzamy czy jest pusty wks.Delete ' kasujemy pusty arkusz End If Next wks ' następny arkusz w pętli Application.DisplayAlerts = True ' Przywracamy alerty! End If Set wks = Nothing ' Niszczymy egzemplarz obiektu End Sub |
Czy pusty plik?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Function CzyPustyPlik(ByVal wkbBook As Workbook) As Boolean ' Ta funkcja sprawdza czy skoroszyt jest pusty. Jeżeli plik zawiera ' conajmniej jeden arkusz, który jest niepusty wówczas funkcja zwraca ' w wyniku wartość False, w przeciwnym razie będzie to True Dim wksSheet As Worksheet ' Egzemplarz obiektu Worksheet ' Przyjmuję założenie, że skoroszyt jest pusty. Następnie w pętli będę ' sprawdzać każdy arkusz. Jeżeli przynajmniej jeden z nich będzie ' niepusty wówczas funkcja zwróci wartość False CzyPustyPlik = True For Each wksSheet In wkbBook.Worksheets ' każdy arkusz w pliku If Not CzyPustyArkusz(wksSheet) Then ' gdy arkusz zawiera dane CzyPustyPlik = False ' wtedy skoroszyt jest niepusty Exit Function ' wyjdź z funkcji End If Next wksSheet Set wksSheet = Nothing ' Niszczymy egzemplarz obiektu End Function |
Czy pusty arkusz?
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Function CzyPustyArkusz(ByVal wksSheet As Worksheet) As Boolean ' Funkcja sprawdza czy arkusz jest pusty. Robi to na podstawie funkcji ' arkuszowej ILE.NIEPUSTYCH/COUNTA. ' Jeżeli istnieje conajmniej jedna niepusta komórka w arkuszu (formuły ' także są wliczane) to zwróć wartość False CzyPustyArkusz = (WorksheetFunction.CountA(wksSheet.UsedRange) = 0) End Function |