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):
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
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:
0 komentarzy