rejestracja zmiany koloru komórki

Zdarzenie, które reaguje na zmianę koloru komórki

Czym jest zdarzenie w VBA?

Zdarzenie (lub Event) w VBA to makro, które uruchamia kod w momencie zarejestrowania w Excelu jakiegoś działania. Może nim być np. otwarcie pliku, aktywacja arkusza, czy zmiana zaznaczenia. Zdarzenia dzielą się na takie, które dotyczą arkusza, lub skoroszytu.

Worksheet_Change to zdarzenie, które aktywuje się wtedy, gdy ktoś dokona zmiany wartości w dowolnej komórce. Aby dodać takie zdarzenie wystarczy że na liście projektów kliknę dwukrotnie w wybrany arkusz (ten, dla którego zdarzenie chcę ustawić). Następnie z listy rozwijanej po lewej stronie okna głównego wybieram Worksheet. Tutaj domyślnym zdarzeniem jest Selection_Change. Z listy po prawej stronie okna wybieram Change i pojawia się nowe zdarzenie.

zdarzenie worksheet_change

Pytanie brzmi: czy event wychwyci każdą zmianę? Niestety nie, ponieważ rejestruje wyłącznie zmianę wartości w komórce, ale zmianę koloru komórki już nie. Dlatego też wykorzystując inne zdarzenia i zmienne publiczne stworzę mechanizm, który będzie rejestrować zmiany koloru komórki.

Zdarzenie Workbook_Open – otwarcie skoroszytu

Zacznę od zdarzenia dla skoroszytu Workbook_Open, którego nazwa mówi sama za siebie. Kiedy ktoś otworzy plik chcę, aby dwie zdefiniowane przeze mnie zmienne globalne kolor i adres pobrały odpowiednie wartości z aktywnej komórki. Kolor przyjmie wartość koloru tła komórki, a adres przyjmie adres komórki, której wartość koloru została pobrana do zmiennej kolor.

Aby dodać zdarzenie do skoroszytu klikam dwukrotnie w pozycję Ten_skoroszyt na liście projektów. Dalej postępuję podobnie jak w przypadku arkusza. Domyślnym zdarzeniem dla skoroszytu jest Open.

Niestety wartość zmiennych nie może być wymieniana pomiędzy skoroszytem i arkuszem. To powoduje, że nie mogę tu wprowadzić zmiennych globalnych. Dlatego też w zdarzeniu Workbook_Open wprowadzę kod uruchamiający procedurę, która pobierze wartości do zmiennych.

zdarzenie workbook_open i wywolanie procedury

Klikam PPM na projekt z listy projektów i z menu kontekstowego wybieram polecenie Insert/Module. Do stworzonej procedury wprowadzam zmienne globalne, oraz polecenie pobrania wartości do zmiennych.

deklaracja i pobranie wartosci do zmiennych

Zdarzenie Worksheet_Activate – aktywacja arkusza

Użytkownik, który otworzy plik może aktywować inne arkusze np. w celu ich przeglądnięcia. Dlatego kolejnym moim krokiem będzie pobranie wartości do zmiennych w momencie aktywacji docelowego arkusza. W tym celu użyję zdarzenia Worksheet_Activate.

Wracam do zdarzeń arkusza i z rozwijanej listy po prawej stronie wybieram Activate, a w zdarzeniu wprowadzam takie same polecenia jak w procedurze.

zdarzenie worksheet_activate

Zdarzenie Selection_Change – zmiana zaznaczenia

To już ostatnia część, w której po wychwyceniu zmiany zaznaczenia wykorzystuję instrukcję warunkową IF. Sprawdzam, czy aktualny kolor komórki o adresie zapisanym w zmiennej adres jest taki sam, jak wartość koloru zapisana w zmiennej kolor.

Kolejnym krokiem jest oczywiście przypisanie nowych wartości do zmiennych.

zdarzenie selection_change

W ten sposób stworzyłem zdarzenie, które wychwytuje zmiany koloru tła komórki, ale to tylko propozycja bo równie dobrze można wyłapywać np. zmiany w kolorze czcionki.

Jeśli chcesz zobaczyć w jaki sposób tworzę to makro na filmie to sprawdź na YT:

Spodobał Ci się artykuł ? Udostępnij go znajomym.

Share on facebook
Share on linkedin
Share on twitter

Leave a Comment

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