Nagraliśmy już pierwsze makro i zobaczyliśmy jego kod. Teraz chcemy zobaczyć różnicę w zarejestrowanym kodzie, gdy będziemy zatwierdzać funkcję DZIŚ tylko Enterem. Dodatkowo poznamy różnicę w zapisie rejestrowanego makra, gdy są wyłączone odwołania względny i gdy są włączone.
Wciąż nagrywamy proste makra, bo dalej skupiamy się na funkcjonalnościach J Wciąż wstawiamy funkcję DZIŚ tylko zatwierdzamy ją Enterem (Załóżmy, że wstawimy ją do komórki A4 i mamy wyłączone odwołanie względne). Powiedzmy, że będzie się nazywać Dzisiaj2 i ponownie zapisujemy ją do skoroszytu makr osobisty. Dołożymy nawet ponownie skrót klawiszowy Ctrl + Shift + D, ale tylko po to, żeby zobaczyć komunikat Excela o tym, że taki skrót został już przypisany do innego makra.
Musimy usunąć skrót (skasować literę D) i nagrać opisane wcześniej proste makro.
Jeśli nagrywałeś makro zaraz po poprzednim, to powinno się zapisać do tego samego modułu co poprzednio (Module1), pod wcześniejszym makrem, ale jeśli w między czasie zdążyłeś zamknąć i otworzyć Excela to rejestrator zapisze makro w nowym module.
W kodzie znów jest dużo niepotrzebnego nam komentarzu, więc możemy go usunąć.
Zmienił się też wykonywany kod:
Sub Dzisiaj2()
ActiveCell.FormulaR1C1 = "=TODAY()"
Range("A5").Select
End Sub
Ponownie powtórzę to, że jeśli znasz angielski będzie Ci łatwiej go zrozumieć. Teraz zamiast słowa Selection jest ActiveCell, czyli funkcja TODAY, będzie wstawiana tylko do pojedynczej aktywnej komórki, nawet jeśli zaznaczysz większy zakres danych (możesz sobie to później przetestować).
Pojawiła się też dodatkowa linijka:
Range("A5").Select
Łatwo się domyśleć, że chodzi tu o zaznaczenie (Select) komórki A5. Jest wykorzystana funkcja Range, która służy w VBA do zaznaczania pojedynczych komórek, a także zakresów. Ważne jest to, że ponieważ mieliśmy wyłączone odwołania względne, ta linijka zapisała się dokładnie tak, czyli nie ważne, która komórka będzie aktywna, po wpisaniu w nią funkcji DZIŚ, Excel przejdzie zawsze do komórki A5.
Ponieważ nie dołożyliśmy skrótu klawiszowego do naszego makra musimy poznać inny sposób na jego uruchomienie. Kolejną możliwością jest użycie polecenia Wyświetl makra (skrót klawiszowy do niego do Alt + F8).
Po jego kliknięciu otworzy się okno, gdzie zobaczysz wszystkie makra z otwartych plików.
Jak do tej pory nagraliśmy tylko dwa makra i oba je widać w tym oknie. Ponieważ nie są to makra z aktywnego pliku, więc dodatkowo przed swoją nazwą mają również nazwę pliku, w którym się znajdują i wykrzyknik.
Są tu dostępne przyciski:
- Uruchom, to z niego za chwilę skorzystamy,
- Wkrocz, do uruchamiania makra krok po kroku, o tym w kolejnym wideo,
- Edycja, przeskoczysz dzięki niemu od razu do kodu danego makra,
- Usuń usuwania kod makra z modułu.
- Opcje, pozwala zmieniać podstawowe opcje makra, m.in. skrót klawiszowy do niego przypisany – o tym za chwilę
Teraz możesz przetestować to makro naciskając przycisk Uruchom, gdy masz zaznaczoną pojedynczą komórkę i kilka komórek.
Wniosek jaki powinieneś wyciągnąć z tego makra jest taki, że ma znaczenie jak zatwierdzasz wpisane wartości i funkcje, bo rejestrator będzie zapisywał inny kod.
Teraz potrzebujemy nagrać jeszcze jedno makro, analogiczne jak to przed chwilą (w komórce A6), tylko z włączonymi odwołaniami względnymi — wystarczy, że raz klikniesz w to polecenie na karcie Deweloper.
Tym razem makro nazwiemy Dzisiaj3 i zapiszemy je w aktualnym pliku. Pamiętaj o wyłączeniu makra. Zanim przejdziemy do kodu VBA zerkniemy co wyświetla polecenie Wyświetl Makra (Alt + F8)
Tym razem jedno makro jest bez nazwy pliku, bo znajduje się w aktywnym pliku. Dodatkowo na obrazie powyżej jest rozwinięta lista możliwości skąd mają być wyświetlane makra.
Teraz dla makra Dzisiaj (pierwszego, które nagraliśmy) kliknij przycisk Opcje. Najpierw musisz kliknąć na nazwę makra, a dopiero potem na przycisk Opcje. Otworzy się okno, w którym możesz zmienić skrót klawiszowy do makra i ewentualnie jego Opis, ale to też możesz zrobić jako komentarz w kodzie. Nie jest już nam potrzebny skrót do pierwszego makra, więc usuńmy stąd literę, a następnie sprawdź, że uruchamianie makra Dzisiaj3 skutkuje wpisaniem funkcji DZIŚ w aktywną komórkę i przejście do komórki poniżej. Zobaczmy teraz kod makra. Jeśli będzie Ci trudno odnaleźć moduł w aktywnym pliku, możesz skorzystać z przycisku Edycja w oknie Makr (Alt + F8).
Sub Dzisiaj2()
ActiveCell.FormulaR1C1 = "=TODAY()"
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Pomijając komentarz pierwsza linijka kodu jest taka sama jak w drugim makrze za to zmieniła się druga linijka – to ona odpowiada za przesunięcie zaznaczonej komórki, po wpisaniu funkcji TODAY. Najlepiej czytać ją krok po kroku, czyli przez poszczególne kroki.
Na początek jest aktywna komórka (ActiveCell). Następnie jest funkcja Offset, która zapewnia przesunięcie o ilość wpisanych wierszy (1) I kolumn (0). Kolejny punkt może być mylący, bo poznałeś już funkcję Range i służyła ona do zaznaczenia konkretnej komórki, ale w tej sytuacji nie chodzi o zaznaczenie komórki A1, tylko obszaru równego rozmiarowi komórce A1. Czyli jeśli byłby to większy obszar, to więcej komórek zostałoby zaznaczonych (Select).
Poznamy tutaj jeszcze jeden sposób na uruchomienie makra. Jeśli kursor znajduje się w kodzie makra, to możesz nacisnąć klawisz F5 lub przycisk play (patrz rysunek poniżej), żeby uruchomić makro.
Na koniec pomówimy jeszcze chwilę o strukturze obiektowej w kodzie VBA. W VBA jest wiele obiektów. Przykładowym obiektem może być arkusz i komórka w arkuszu. Każdy taki obiekt, często ma też obiekty pod sobą, np. komórka arkusza jest podobiektem obiektu arkusz J
Jeśli w edytorze VBA zaczniesz pisać np.: funkcję Range("A1"). (ważna jest ta kropka na końcu) to edytor VBA powinien Ci zacząć podpowiadać dalszy kod.
Przy niektórych pozycjach zobaczysz niejako zielone ruchome pudełko (metody obiektu), a przy niektórych palec wskazujący na tekst (właściwości obiektu). Metody są bardziej związane z wykonywaniem czynności, a wartości przeważnie odczytujesz albo zmieniasz. Może trochę Ci pomoże zrozumieć to obrazek na arkuszu Budzik
Dla budzika godzina to wartość, a Nastaw budzi i Nakręć to metody. Spokojnie tu dopiero zaznaczamy temat i na początku wystarczy, że będziesz wiedział, że istnieje taki podział. Że obiekty, często mogę mieć w sobie mniejsze obiekty i że przeważnie edytor VBA będzie Ci podpowiadał co może zrobić z danym obiektem (metody) lub jakie wartości możesz odczytać, jeśli po nim napiszesz kropkę.
Pozdrawiam
Adam Kopeć
Miłośnik Excela