Arkusze VBA - ostateczny przewodnik

To jest ostateczny przewodnik po pracy z Arkuszami / Arkuszami w programie Excel.

Na dole tego przewodnika utworzyliśmy ściągawkę typowych poleceń do pracy z arkuszami.

Arkusze vs. Arkusze robocze

Istnieją dwa sposoby odwoływania się do Arkuszy za pomocą VBA. Pierwszy dotyczy obiektu Arkusze:

1 Arkusze("Arkusz1").Aktywuj

Drugi dotyczy obiektu Worksheets:

1 Arkusze ("Arkusz1"). Aktywuj

W 99% przypadków te dwa obiekty są identyczne. W rzeczywistości, jeśli szukałeś w Internecie przykładów kodu VBA, prawdopodobnie widziałeś oba używane obiekty. Oto różnica:

Kolekcja Arkuszy zawiera Arkusze Robocze ORAZ Arkusze Wykresów.

Więc użyj Arkuszy, jeśli chcesz dołączyć zwykłe Arkusze I Arkusze Wykresów. Użyj arkuszy roboczych, jeśli chcesz wykluczyć arkusze wykresów. W pozostałej części tego przewodnika będziemy używać zamiennie arkuszy i arkuszy roboczych.

Arkusze referencyjne

Istnieje kilka różnych sposobów odwoływania się do Arkuszy:

  • Aktywny arkusz
  • Nazwa karty arkusza
  • Numer indeksu arkusza
  • Nazwa kodowa arkusza

Aktywny arkusz

ActiveSheet to arkusz, który jest aktualnie aktywny. Innymi słowy, jeśli wstrzymałeś kod i spojrzałeś na Excel, widoczny jest arkusz. Poniższy przykład kodu wyświetli Messagebox z nazwą ActiveSheet.

1 MsgBox ActiveSheet.Name

Nazwa arkusza

Prawdopodobnie najlepiej znasz odwoływanie się do Arkuszy według ich nazwy karty:

1 Arkusze("Nazwa karty").Aktywuj

Numer indeksu arkusza

Numer indeksu arkusza to pozycja arkusza w skoroszycie. 1 to pierwszy arkusz. 2 to drugi arkusz itd.:

1 Arkusze(1).Aktywuj

Numer indeksu arkusza - ostatni arkusz w skoroszycie

Aby odwołać się do ostatniego arkusza w skoroszycie, użyj funkcji Sheets.Count, aby uzyskać ostatni numer indeksu:

1 Arkusze (Arkusze.Liczba). Aktywuj

Arkusz „Nazwa kodowa”

Nazwa kodowa arkusza to nazwa obiektu w VBA:

1 KodNazwa.Aktywuj

Odwołania do arkuszy w innych skoroszytach

Można również łatwo odwoływać się do Arkuszy w innych skoroszytach. Aby to zrobić, musisz użyć obiektu Workbooks:

1 Skoroszyty("VBA_Examples.xlsm").Worksheets("Arkusz1").Aktywuj

Ważny: Skoroszyt musi być otwarty, zanim będzie można odwoływać się do jego Arkuszy.

Aktywuj a wybierz arkusz

W innym artykule omawiamy wszystko na temat aktywacji i wyboru arkuszy. Krótka wersja jest taka:

Kiedy aktywujesz arkusz, staje się on ActiveSheet. To jest arkusz, który zobaczysz, gdy spojrzysz na swój program Excel. Tylko jeden arkusz może być aktywowany na raz.

Aktywuj arkusz

1 Arkusze("Arkusz1").Aktywuj

Kiedy wybierzesz Arkusz, staje się on również ActiveSheet. Możesz jednak wybrać wiele arkuszy naraz. W przypadku zaznaczenia wielu arkuszy jednocześnie, „górnym” arkuszem jest ActiveSheet. Możesz jednak przełączać ActiveSheet w wybranych arkuszach.

Wybierz arkusz

1 Arkusze("Arkusz1").Wybierz

Wybierz wiele arkuszy

Użyj tablicy, aby wybrać wiele arkuszy naraz:

1 Arkusze (Array("Arkusz2", "Arkusz3")).Wybierz

Zmienna arkusza roboczego

Przypisanie arkusza roboczego do zmiennej umożliwia odwoływanie się do arkusza roboczego według jego nazwy zmiennej. Może to zaoszczędzić wiele pisania i ułatwić odczytanie kodu. Istnieje również wiele innych powodów, dla których warto używać zmiennych.

Aby zadeklarować zmienną arkusza roboczego:

1 Dim ws jako arkusz roboczy

Przypisz arkusz do zmiennej:

1 Ustaw ws = Arkusze("Arkusz1")

Teraz możesz odwoływać się do zmiennej arkusza roboczego w swoim kodzie:

1 ws.Aktywuj

Zapętlaj wszystkie arkusze w skoroszycie

Zmienne arkusza roboczego są niezbędne, gdy chcesz przeglądać wszystkie arkusze w skoroszycie. Najłatwiej to zrobić:

12345 Dim ws jako ArkuszDla każdego ws w ArkuszachMsgBox ws.nameNastępny

Ten kod przejdzie przez wszystkie arkusze w skoroszycie, wyświetlając nazwę każdego arkusza w oknie komunikatu. Przeglądanie wszystkich arkuszy w skoroszycie jest bardzo przydatne podczas blokowania / odblokowywania lub ukrywania / odkrywania wielu arkuszy jednocześnie.

Ochrona arkusza roboczego

Ochrona skoroszytu

Ochrona skoroszytu blokuje skoroszyt przed zmianami strukturalnymi, takimi jak dodawanie, usuwanie, przenoszenie lub ukrywanie arkuszy.

Możesz włączyć ochronę skoroszytu za pomocą VBA:

1 ActiveWorkbook.Protect Hasło:="Hasło"

lub wyłącz ochronę skoroszytu:

1 ActiveWorkbook.UnProtect hasło:="Hasło"

Uwaga: Możesz także chronić / odbezpieczać bez hasła, pomijając argument Hasło:

1 ActiveWorkbook.Protect

Ochrona arkusza roboczego

Ochrona na poziomie arkusza roboczego zapobiega zmianom w poszczególnych arkuszach.

Chroń arkusz roboczy

1 Arkusze ("Arkusz1"). Chroń "Hasło"

Odblokuj arkusz roboczy

1 Arkusze ("Arkusz1"). Odblokuj "Hasło"

Istnieje wiele opcji ochrony arkuszy roboczych (zezwalaj na zmiany formatowania, zezwalaj użytkownikowi na wstawianie wierszy itp.). Zalecamy używanie rejestratora makr do rejestrowania żądanych ustawień.

Bardziej szczegółowo omówimy ochronę arkusza roboczego.

Widoczna właściwość arkusza roboczego

Być może już wiesz, że arkusze robocze można ukryć:

W rzeczywistości istnieją trzy ustawienia widoczności arkusza roboczego: Widoczny, Ukryty i Bardzo Ukryte.Ukryte arkusze mogą zostać odkryte przez zwykłego użytkownika programu Excel - klikając prawym przyciskiem myszy w obszarze karty arkusza roboczego (pokazanej powyżej). Arkusze VeryHidden można odkryć tylko za pomocą kodu VBA lub z poziomu edytora VBA. Użyj następujących przykładów kodu, aby ukryć/pokazać arkusze:

Odkryj arkusz roboczy

1 Arkusze("Arkusz1").Visible = xlSheetVisible

Ukryj arkusz

1 Arkusze("Arkusz1").visible = xlSheetHidden

Bardzo ukryj arkusz roboczy

1 Arkusze("Arkusz1").Visible = xlSheetVeryHidden

Zdarzenia na poziomie arkusza roboczego

Zdarzenia to wyzwalacze, które mogą spowodować uruchomienie „Procedur zdarzeń”. Na przykład możesz spowodować, że kod będzie uruchamiany za każdym razem, gdy zmieni się dowolna komórka w arkuszu lub gdy arkusz jest aktywowany.

Procedury zdarzeń arkusza muszą być umieszczone w module arkusza:

Istnieje wiele zdarzeń związanych z arkuszami roboczymi. Aby zobaczyć pełną listę, przejdź do modułu arkusza roboczego, wybierz "Arkusz pracy" z pierwszego menu rozwijanego. Następnie wybierz procedurę zdarzenia z drugiego menu rozwijanego, aby wstawić ją do modułu.

Arkusz roboczy Aktywuj wydarzenie

Zdarzenia aktywacji arkusza są uruchamiane za każdym razem, gdy arkusz jest otwierany.

123 Prywatny arkusz pomocniczy_Aktywuj()Zakres ("A1"). WybierzNapis końcowy

Ten kod wybierze komórkę A1 (resetuje obszar widoku w lewym górnym rogu arkusza roboczego) za każdym razem, gdy arkusz jest otwierany.

Zmiana arkusza roboczego

Zdarzenia zmiany arkusza są uruchamiane po każdej zmianie wartości komórki w arkuszu. Przeczytaj nasz samouczek dotyczący zdarzeń zmiany arkusza roboczego, aby uzyskać więcej informacji.

Ściągawka z arkusza roboczego

Poniżej znajdziesz ściągawkę zawierającą typowe przykłady kodu do pracy z arkuszami w VBA

Arkusze VBA Ściągawka

Arkusze VBA Ściągawka
OpisPrzykład kodu
Odwoływanie się i aktywowanie arkuszy
Nazwa kartyArkusze("Wejście").Aktywuj
Nazwa kodowa VBAArkusz1.Aktywuj
Pozycja indeksuArkusze(1).Aktywuj
Wybierz arkusz
Wybierz arkuszArkusze("Wejście").Wybierz
Ustaw na zmiennąDim ws jako Arkusz
Ustaw ws = Aktywny arkusz
Nazwa / Zmień nazwęActiveSheet.Name = "Nowa nazwa"
Następny arkuszAktywny arkusz.Następny.Aktywuj
Zapętlaj wszystkie arkuszeDim ws jako Arkusz
Dla każdego ws w Arkuszach
Msgbox ws.name
Następny
Zapętlaj wybrane arkuszeDim ws As Worksheet
Dla każdego ws In ActiveWindow.SelectedSheets
MsgBox ws.Name
Następny
Pobierz aktywny arkuszMsgBox ActiveSheet.Name
Dodaj arkuszArkusze.Dodaj
Dodaj arkusz i nazwęSheets.Add.Name = "Nowy arkusz"
Dodaj arkusz z nazwą z komórkiArkusze.Dod.Nazwa = zakres("a3").wartość
Dodaj arkusz po drugimSheets.Add After:=Sheets("Input")
Dodaj arkusz po i nazwęSheets.Add(After:=Sheets("Input")).Name = "NewSheet"
Dodaj arkusz przed i nazwęSheets.Add(Before:=Sheets("Input")).Name = "NewSheet"
Dodaj arkusz na koniec skoroszytuArkusze.Dodaj po:=Arkusze (Arkusze.Liczba)
Dodaj arkusz do początku skoroszytuSheets.Add(Before:=Sheets(1)).Name = "Pierwszy arkusz"
Dodaj arkusz do zmiennejDim ws As Worksheet
Ustaw ws = Arkusze.Dodaj
Kopiuj arkusze robocze
Przenieś arkusz na koniec skoroszytuArkusze("Arkusz1").Przenieś po:=Arkusze(Arkusze.Liczba)
Do nowego skoroszytuArkusze("Arkusz1").Kopiuj
Wybrane arkusze do nowego skoroszytuActiveWindow.Wybrane arkusze.Kopiuj
Przed kolejnym arkuszemArkusze("Arkusz1").Kopiuj przed:=Arkusze("Arkusz2")
Przed pierwszym arkuszemArkusze("Arkusz1").Kopiuj przed:=Arkusze(1)
Po ostatnim arkuszuArkusze("Arkusz1").Kopiuj po:=Arkusze(Arkusze.Liczba)
Kopiuj i nazwijArkusze("Arkusz1").Kopiuj po:=Arkusze(Arkusze.Liczba)
ActiveSheet.Name = "Ostatni arkusz"
Kopiuj i nazwij z wartości komórkiArkusze("Arkusz1").Kopiuj po:=Arkusze(Arkusze.Liczba)
ActiveSheet.Name = Zakres("A1").Value
Do innego skoroszytuArkusze("Arkusz1").Kopiuj przed:=Skoroszyty("Przykład.xlsm").Arkusze(1)
Ukryj / odkryj arkusze
Ukryj arkuszArkusze("Arkusz1").visible = False
lub
Arkusze("Arkusz1").visible = xlSheetHidden
Odkryj arkuszArkusze("Arkusz1"). Widoczny = Prawda
lub
Arkusze("Arkusz1").Visible = xlSheetVisible
Bardzo ukryj arkuszArkusze („Arkusz1”). Widoczny = xlArkuszBardzoUkryty
Usuń lub wyczyść arkusze
Usuń arkuszArkusze("Arkusz1").Usuń
Usuń arkusz (obsługa błędów)Przy błędzie Wznów Dalej
Arkusze("Arkusz1").Usuń
W przypadku błędu Przejdź do 0
Usuń arkusz (bez monitu)Application.DisplayAlerts = False
Arkusze("Arkusz1").Usuń
Application.DisplayAlerts = Prawda
Wyczyść arkuszArkusze("Arkusz1").Komórki.Wyczyść
Wyczyść tylko zawartość arkuszaArkusze("Arkusz1").Cells.ClearContents
Wyczyść używany zakres arkuszyArkusze("Arkusz1").UsedRange.Clear
Chroń lub nie chroń arkuszy
Odblokuj (bez hasła)Arkusze("Arkusz1").Odblokuj
Odblokuj (hasło)Arkusze("Arkusz1").Odbezpiecz "Hasło"
Chroń (bez hasła)Arkusze("Arkusz1").Chroń
Chroń (hasło)Arkusze("Arkusz1").Chroń "Hasło"
Chroń, ale zezwalaj na dostęp VBAArkusze("Arkusz1").Protect UserInterfaceOnly:=True
Odblokuj wszystkie arkuszeDim ws As Worksheet
Dla każdego ws w arkuszach roboczych
ws.Odbezpiecz „hasło”
Następny
wave wave wave wave wave