Kurs VBA – cz. 3 – Nagrywanie makr

Pierwsze spotkanie z makrami często zaczyna się od nagrywania. Możemy w ten sposób poprzez wykonywanie zwykłych czynności przy pomocy klawiatury i myszy wygenerować kod VBA. Automat napisze odpowiednie instrukcje odpowiadające temu co robiliśmy.

Nagramy zaraz dwa makra, które robią to samo, ale w wersji z odwołaniami względnymi i bezwzględnymi. Zobaczymy czym się różnią.

Nagrywanie makra, odwołania bezwzględne

Jeżeli na wstążce nie widzisz karty Developer, w krótkiej pomocy znajdziesz instrukcje jak ją odkryć. Postępuj według poniższych kroków.

  1. Otwórz nowy plik,
  2. Wybierz pierwszy arkusz, jeżeli nie jest wybrany,
  3. Zaznacz komórkę A1.
  4. Na karcie Developer w grupie Kod upewnij się, że pole Użyj odwołań względnych nie jest podświetlone.
    Użyj odwołań względnych jest odznaczone
  5. W tym samym miejscu naciśnij Zarejestruj makro.
  6. W nowym oknie wpisz dane jak poniżej i kliknij OK. Zwróć szczególną uwagę na nazwę w polu Nazwa makra.
  7. Poniższe działania zostaną już zapamiętane w naszym makrze. Ikona Zarejestruj makro zmienia się na Zatrzymaj rejestrowanie.
  8. W komórce A1 wpisz „Styczeń”.
  9. W komórkę A2 wpisz „Luty”.
  10. Postępuj podobnie z kilkoma następnymi komórkami.
  11. Naciśnij Zatrzymaj rejestrowanie
Makro jest już gotowe do uruchomienia. Został wygenerowany pewien kod VBA, ale nie będziemy go teraz oglądać.
  1. Przejdź na inny arkusz i wybierz dowolną komórkę.
  2. Otwórz listę makr sposobem z poprzedniej części kursu, czyli naciśnij alt + F8, na liście będzie pozycja z nazwą z punktu 6.
  3. Uruchom makro.
W komórce A1 i poniżej pojawią się nazwy miesięcy. Powtórz to na innych arkuszach. Zauważ, że wypełnione są te same komórki, niezależnie która jest zaznaczona podczas wywoływania makra. Użyliśmy więc odwołań bezwzględnych

Makro z odwołaniami względnymi

Zaznaczmy teraz na karcie Deweloper, grupie Kod pozycję Użyj odwołań względnych.
Użyj odwołań względnych jest zaznaczone

Usuń wcześniej wpisane nazwy miesięcy. Powtórzmy teraz kroki 1-11 aby stworzyć makro i kroki 1-3 aby je uruchomić. Makro opisz jak poniżej.

Jeżeli zrobiłeś wszystko uważnie, miesiące będą się teraz wpisywać począwszy od zaznaczonej komórki w dół, czyli istotne się staje, która komórka jest zaznaczona podczas uruchamiania makra.

Zapisz stworzony plik, ponieważ będziemy go używać w kolejnej lekcji. Pamiętaj o rozszerzeniu xlsm lub xls. Pliki z rozszerzeniem xlsx nie zapamiętują makr. W następnej części kursu obejrzymy kod VBA, który wygenerowaliśmy powyżej.

Podsumowanie

Nazwa makra (domyślnie Macro1) musi zaczynać się od litery i nie może zawierać znaków specjalnych, jak „!” i „?”, oraz spacji. Spacje możemy zastąpić znakiem „_”, lub każde nowe słowo zaczynać wielką literą (np.: Uzupelnianie_miesiecy lub UzupelnianieMiesiecy). Nie można stworzyć dwóch makr z tą samą nazwą.

Nagrywarka zmienia w kod każde kliknięcie myszki w arkuszu i użycie klawiatury. Warto więc przed uruchomieniem nagrywania poćwiczyć czynności, które chcemy wykonać. Warto też pomyśleć o docelowym formatowaniu. Ostatecznie zastanówmy się, która komórka ma być zaznaczona po wykonaniu makra.

Nagrywarka makr jest używana także przez zaawansowanych programistów VBA. Każdy może zapomnieć jaka instrukcja zmienia tło komórki na zielony. Można w takiej sytuacji użyć nagrywarki, która wygeneruje kod:

 

Poniższy kod możemy przekleić do naszego bardziej skomplikowanego makra, w którym np. zmieniamy tło na zielone we wszystkich komórkach edytowanych przez użytkownika.

 

Subskrybuj RSS, lub polub blog na Facebooku aby otrzymywać najnowsze informacje o rozwoju kursu.

Comments 5

  1. Wykonałem ćwiczenie zgodnie z instrukcją, ale makro bezwzględne nie działa poprawnie. W nowym arkuszu makro nie zaczyna wpisywania danych w komórce A1 tylko w komórce, która została zaznaczona przed uruchomieniem makra. Pozostałe dane, począwszy od komórki A2, uzupełniane są poprawnie. Proszę o pomoc.

  2. Powyżej w instrukcję wkradła się literówka. W punkcie czwartym makra z odwołania bezwględnymi była napisane: Użyj odwołań bezwzględnych, powinno być jak teraz: Użyj odwołań względnych.
    Proszę wkleić stworzone makro, spróbujemy zdiagnozować problem.

    1. Witam. Mam również ten sam problem, co Pan Karol. Poniżej wklejam wygenerowane makro.

      Sub miesiace_bezwgledne()
      '
      ' miesiace_bezwgledne Makro
      ' Wypisywanie miesięcy (odwolaia bezwględne).
      '

      '
      ActiveCell.FormulaR1C1 = "styczeń"
      Range("A2").Select
      ActiveCell.FormulaR1C1 = "luty"
      Range("A3").Select
      ActiveCell.FormulaR1C1 = "marzec"
      Range("A4").Select
      ActiveCell.FormulaR1C1 = "kwiecień"
      Range("A5").Select
      ActiveCell.FormulaR1C1 = "maj"
      Range("A6").Select
      ActiveCell.FormulaR1C1 = "czerwiec"
      Range("A7").Select
      ActiveCell.FormulaR1C1 = "lipiec"
      Range("A8").Select
      ActiveCell.FormulaR1C1 = "sierpień"
      Range("A9").Select
      ActiveCell.FormulaR1C1 = "wrzesień"
      Range("A10").Select
      ActiveCell.FormulaR1C1 = "październik"
      Range("A11").Select
      ActiveCell.FormulaR1C1 = "listopad"
      Range("A12").Select
      ActiveCell.FormulaR1C1 = "grudzień"
      Range("A13").Select
      End Sub

  3. Panie Radku, bardzo prosta sprawa. Domyślnie w arkuszu ustawione jest pole A1 do wpisywania danych. Więc jeśli ktoś zaczął pisać bez uprzedniego potwierdzenia lewym przyciskiem myszy komórki A1, tym samym nie wygenerował formuły, o której Pan piszę, że zabrakło.

    Pozdrawiam.

Dodaj komentarz

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