Możesz chcieć uruchomić swój fragment makra / VBA po wybraniu określonego skoroszytu, wybraniu arkusza w skoroszycie, komórka zmienia swoją wartość, po dwukrotnym kliknięciu, po dodaniu arkusza itp. We wszystkich tych przypadkach używamy Obsługa zdarzeń skoroszytu. Event Handler pomaga nam uruchamiać kod VBA za każdym razem, gdy wystąpi określone zdarzenie.
W tym artykule dowiemy się pokrótce o każdym programie obsługi zdarzeń w skoroszycie.
Co to jest obsługa zdarzeń skoroszytu?
Procedura obsługi zdarzeń skoroszytu to podprogram lokalny skoroszytu. Ten kod działa tylko na składnikach skoroszytu. To jest sam skoroszyt, to arkusze i zakresy.
Gdzie napisać kod obsługi zdarzeń skoroszytu?
Zdarzenia skoroszytu są zapisywane tylko w obiekcie skoroszytu. Jeśli napiszesz zdarzenie skoroszytu w jakimś normalnym module, nie będzie błędu, ale po prostu nie będą działać.
Aby pisać w obiekcie skoroszytu. Kliknij go dwukrotnie lub kliknij prawym przyciskiem myszy i kliknij kod widoku. Zostanie wyświetlony obszar do wpisywania kodu.
Jak napisać kod dla konkretnego zdarzenia w skoroszycie?
Teraz, gdy jesteś w trybie edycji, w menu rozwijanym w lewym górnym rogu zobaczysz ogólne. Kliknij listę rozwijaną i wybierz skoroszyt. W menu rozwijanym w prawym górnym rogu pojawią się wszystkie wydarzenia. Wybierz to, czego potrzebujesz, a kod szkieletowy tego wydarzenia zostanie dla Ciebie napisany.
Każde zdarzenie ma ustaloną nazwę procedury. Są to zastrzeżone nazwy podprogramów, które zaczynają się od workbook_. Nie możesz ich używać do innych podprogramów
(możesz, ale będą to normalne podprogramy).
Ważny: Każdy podprogram z tej listy będzie działał w określonym zdarzeniu.
Jeden typ procedury zdarzenia skoroszytu można zapisać tylko raz w jednym skoroszycie. Jeśli napiszesz dwie takie same procedury obsługi zdarzeń w jednym skoroszycie, spowoduje to błąd i żadna z nich nie zostanie wykonana. Oczywiście błędem będą niejednoznaczne podprogramy.
Dowiedzmy się pokrótce o każdym z wydarzeń.
1. ten Workbook_SheetChange (ByVal Sh jako obiekt, ByVal Target jako zakres) Wydarzenie
To zdarzenie jest wyzwalane, gdy wprowadzimy jakąkolwiek zmianę w arkuszach zawierających (z wyłączeniem formatowania). Jeśli chcesz coś zrobić, jeśli jakakolwiek zmiana zostanie dokonana w dowolnym arkuszu, kod będzie następujący:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'zrób coś Msgbox "zrobiłeś coś" End Sub
„Sh” jest zawsze aktywnym arkuszem. „Cel” to zawsze aktywna komórka.
Inny przykład: Możesz chcieć umieścić datę i godzinę w Cel, prl B1, jeśli zmieni się A1. W takim przypadku używamy zdarzenia workbook_sheetchange. Kod wyglądałby tak:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1").Value2 = Format(Now(), "hh:mm:ss") End If Napis końcowy
To będzie celować tylko w komórkę A1 na każdym arkuszu, ponieważ nie określiliśmy obiektu "sh".
2. ten Skoroszyt_Aktywuj() Wydarzenie
To zdarzenie jest wyzwalane, gdy aktywuje się kod zdarzenia zawierający skoroszyt. Kod szkieletowy tego wydarzenia to:
Private Sub Workbook_Activate() End Sub
Prostym przykładem jest pokazanie nazwy skoroszytu po jej wybraniu.
Private Sub Workbook_Activate() MsgBox "Jesteś w skoroszycie" & Activeworkbook.Name End Sub
Jak tylko przejdziesz do skoroszytu zawierającego ten kod, zdarzenie zostanie uruchomione i zostanie wyświetlony komunikat „Jesteś w nazwie skoroszytu” (w moim przypadku arkusz 2).
3. ten Skoroszyt_Otwórz() Wydarzenie
To jedno z najczęściej zadawanych pytań, jak uruchomić makro zaraz po otwarciu skoroszytu. To jest odpowiedź. To zdarzenie skoroszytu jest uruchamiane zaraz po otwarciu skoroszytu. W przeciwieństwie do Workbook_Activate() ten kod jest uruchamiany tylko raz, a nie za każdym razem, gdy jest aktywowany.
Private Sub Workbook_Open() 'twój kod ' Zakończ Sub
Poniższe przykładowe zdarzenie Workbook_Open po prostu wyświetli wiadomość powitalną, gdy otworzysz kod zawierający skoroszyt.
Private Sub Workbook_Open() MsgBox "Witamy w pliku głównym" End Sub
4. ten Skoroszyt_Dezaktywuj() Wydarzenie
To zdarzenie jest wyzwalane podczas opuszczania kodu zawierającego skoroszyt. Innymi słowy, jeśli chcesz coś zrobić, na przykład ukrywanie arkuszy lub cokolwiek po przełączeniu skoroszytu, użyj tego zdarzenia VBA. Składnia to:
Private Sub Workbook_Deactivate() 'twój kod ' Zakończ Sub
Poniższe przykładowe zdarzenie Workbook_Deativate po prostu wyświetli komunikat, że opuściłeś arkusz główny, gdy opuścisz ten arkusz.
Private Sub Workbook_Deactivate() MsgBox "Opuściłeś arkusz główny" End Sub
5. ten Skoroszyt_Przed zamknięciem() Wydarzenie
To zdarzenie jest wyzwalane po potwierdzeniu usunięcia arkusza zawierającego zdarzenie VBA. Składnia jest prosta:
Private Sub Workbook_BeforeClose(Anuluj jako Boolean) Koniec Sub
Anuluj można ustawić na true, jeśli chcesz, aby skoroszyt był otwarty.
Poniższy kod zapyta Cię, czy chcesz zapisać zawartość skoroszytu do zamknięcia.
Private Sub Workbook_BeforeClose(Anuluj jako Boolean) ans = MsgBox("Czy chcesz zapisać zawartość tego skoroszytu?", vbYesNo) If ans = True Then thisworkbook.save End If End Sub
6. ten Workbook_BeforeSave(ByVal SaveAsUI jako Boolean, Anuluj jako Boolean) Wydarzenie
To zdarzenie jest wyzwalane przed zapisaniem skoroszytu. Składnia jest prosta:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
SaveAsUI jest ustawiona na True, jeśli nastąpiła zmiana w skoroszycie (nie w VBA).
Anuluj można ustawić na true, jeśli chcesz zachować skoroszyt niezapisany.
Poniższy kod zapyta, czy chcesz zapisać zawartość skoroszytu, który chcesz zapisać.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Czy na pewno chcesz zapisać zawartość tego skoroszytu?", vbYesNo) If ans = False Then Cancel = True End If End Sub
7. ten Workbook_BeforeSave(ByVal SaveAsUI jako Boolean, Anuluj jako Boolean) Wydarzenie
To zdarzenie jest wyzwalane przed zapisaniem skoroszytu. Składnia jest prosta:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
SaveAsUI jest ustawiona na True, jeśli nastąpiła zmiana w skoroszycie (nie w VBA).
Anuluj można ustawić na true, jeśli chcesz zachować skoroszyt niezapisany.
Poniższy kod zapyta, czy chcesz zapisać zawartość skoroszytu, który chcesz zapisać.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Czy na pewno chcesz zapisać zawartość tego skoroszytu?", vbYesNo) If ans = False Then Cancel = True End If End Sub
8. ten Workbook_NewSheet(ByVal Sh jako obiekt) Wydarzenie
To zdarzenie jest uruchamiane po dodaniu nowego arkusza do skoroszytu. Składnia jest prosta:
Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub
Sh jest obiektem arkusza. Typ jest w rzeczywistości obiektem podstawowym, więc jeśli dodamy arkusz wykresu, arkusz makr lub arkusz okna dialogowego, zdarzenie nadal będzie działać.
Poniższy kod doda i pokaże nazwę nowo dodanego arkusza.
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "Dodałeś nowy arkusz. " & Sh.Name End Sub
Istnieje wiele innych zdarzeń obiektu skoroszytu. Nie możemy omówić ich wszystkich tutaj. Jeśli chcesz wiedzieć o jakimś konkretnym wydarzeniu, zapytaj w sekcji komentarzy poniżej. Mam nadzieję, że w tym artykule udało mi się wyjaśnić podstawy zdarzeń ze skoroszytu. Daj mi znać, jeśli ci to pomogło w sekcji komentarzy poniżej.
Powiązane artykuły:
Używanie zdarzenia zmiany arkusza do uruchamiania makra po wprowadzeniu jakiejkolwiek zmiany | Aby uruchomić makro za każdym razem, gdy arkusz się zaktualizuje, używamy Zdarzeń arkusza roboczego VBA.
Uruchom makro, jeśli w arkuszu w określonym zakresie wprowadzono jakiekolwiek zmiany | Aby uruchomić kod makra, gdy zmieni się wartość w określonym zakresie, użyj tego kodu VBA. Wykrywa każdą zmianę dokonaną w określonym zakresie i uruchamia zdarzenie.
Najprostszy kod VBA do podświetlania bieżącego wiersza i kolumny za pomocą | Użyj tego małego fragmentu kodu VBA, aby podświetlić bieżący wiersz i kolumnę arkusza.
Popularne artykuły:
50 skrótów Excela, które zwiększą Twoją produktywność | Przyspiesz swoje zadanie. Te 50 skrótów przyspieszy pracę w programie Excel.
Funkcja WYSZUKAJ.PIONOWO w programie Excel | Jest to jedna z najczęściej używanych i popularnych funkcji programu Excel, która służy do wyszukiwania wartości z różnych zakresów i arkuszy.
LICZ.JEŻELI w Excelu 2016 | Policz wartości z warunkami za pomocą tej niesamowitej funkcji. Nie musisz filtrować danych, aby policzyć konkretną wartość. Funkcja Countif jest niezbędna do przygotowania deski rozdzielczej.
Jak korzystać z funkcji SUMIF w programie Excel? | To kolejna ważna funkcja deski rozdzielczej. Pomaga to zsumować wartości w określonych warunkach.