fbpx

Jak ukryć wszystkie arkusze oprócz aktywnego? (VBA)

21.11.2023 | ECP3, Makra VBA

Kiedy mamy do czynienia z plikiem zawierającym mnóstwo arkuszy i dodatkowo często potrzebujemy ukryć arkusze inne niż aktywny, robienie tego ręcznie zabierze nam sporo cennego czasu. 

W takiej sytuacji warto pokusić się o napisanie prostego makra, które tę czynność ukrywania będzie wykonywało za nas. Najlepiej jeszcze po naciśnięciu jakiegoś dedykowanego skrótu klawiszowego. Właśnie to pokażę Ci w tym artykule. 

Na wstępie powiem, że aby makra zadziały w pliku, musi on zostać zapisany jako plik obsługujący makra, czyli jako xlsm lub xlsb (skoroszyt binarny). 

OK, kiedy to mamy za sobą, możemy przejść do napisania makra. Wejdźmy zatem do VBE (Alt + F11) i stwórzmy nowy moduł (Insert/Module): 

Pusty moduł

Dalej w tym module napiszemy makro o nazwie Ukrywanie, a zatem rozpocznijmy je i od razu zadeklarujemy dwie zmienne obiektowe typu WorkSheet: 

Sub Ukrywanie() 

    Dim Ark As Worksheet, Aktywny As Worksheet 

End Sub 

 

Teraz pora na przypisanie wartości do zmiennej Aktywny, a tą wartością będzie po prostu ActiveSheet, czyli aktywny arkusz. Dzięki takiemu rozwiązaniu nasze makro będzie działało też w innych plikach, zawsze w aktywnym arkuszu, jeśli tylko plik z makrem będzie otwarty.  

Kod przypisania wygląda następująco: 

Set Aktywny = ActiveSheet

 

Ok. Teraz pora na przechadzkę po kolekcji wszystkich arkuszy w pliku, aby sprawdzić, czy przypadkiem ich nazwa jest inna niż tego aktywnego, który przed chwilą określiliśmy. Jeśli TAK – należy ukryć taki arkusz.

Aby przejść się po wszystkich arkuszach, użyjemy pętli for each, korzystającej z technicznej zmiennej Ark. To ona będzie zawierała „bieżący” arkusz w każdym przejściu pętli. Oto ona: 

For Each Ark In ActiveWorkbook.Worksheets 

 

Next 

Oczywiście na razie jest pusta, jednak teraz ją zapełnimy. Wrzucimy do środka prostego if-a, który będzie sprawdzał nazwy tych arkuszy. Cała pętla z if-em wygląda tak: 

For Each Ark In ActiveWorkbook.Worksheets 

    If Ark.Name <> Aktywny.Name Then 

        Ark.Visible = xlSheetHidden 

    End If 

Next 

 

A wszystko do kupy wygląda następująco: 

Sub Ukrywanie() 

    Dim Ark As Worksheet, Aktywny As Worksheet 

    Set Aktywny = ActiveSheet 

     

    For Each Ark In ActiveWorkbook.Worksheets 

        If Ark.Name <> Aktywny.Name Then 

            Ark.Visible = xlSheetHidden 

        End If 

    Next 

End Sub 

Procedura ukrywająca arkusze

 

Disclaimer na koniec! 

W tym kodzie odwoływałam się do arkuszy typu Worksheet, czyli do klasycznych, najczęściej używanych typów arkuszy. Jeśli jednak nasz plik zawiera arkusze np. wykresów, to nasze makro się wysypie. W takiej sytuacji użyłabym np. innej pętli – zwykłego for, operującego na liczniku. Wtedy odwołalibyśmy się do Sheets i jechali po numerach arkuszy, niezależnie od ich zawartości.  


Film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Jeżeli chcesz lepiej poznać makra i VBA zapisz się na listę zainteresowanych kursem Excel w codziennej pracy cz. 3! Podczas oczekiwania na kurs będę Ci wysyłała informacje, ciekawostki i excelowe triki. Bezpłatnie! 

Pomogłam Ci? Postaw mi wirtualną kawę! →

Przeczytaj podobne wpisy

Kategorie

0 Comments

Submit a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest