TOP

VBA-Lekcja 2. Debuger (Debugger)

YouLibreCalc for Excel logo

Narzędzie w środowisku VBA służące do debugowania kodu programu. Możliwość pracy z debugerem jest niezbędna dla każdego, kto pisze na VBA. Jest potrzebny, aby sprawdzić jak działa Twój kod oraz znaleźć i naprawić w nim błędy.


Otwórz Visual Basic Editor (Alt+F11). Utwórz w nim moduł i napisz następujący kod:

 Sub LearningDebug()
    Dim A As Long, B As Long, C As Long, D As Long

    D = 0
    A = 10
    Debug.Print "A = " + Trim(Str(A))
    B = 15
    Debug.Print "B = " + Trim(Str(B))
    C = A + B
    Debug.Print "C = " + Trim(Str(C))
    C = Round(C / 5)
    Debug.Print "Divide С by 5: C = " + Trim(Str(C))  'C dzieli się przez 5: C =
    C = Round(C / D) 'wystąpi tutaj błąd, ponieważ nie da się podzielić przez zero (i D = 0)
End Sub

Naciśnij Ctrl+G, a na dole pojawi się okno Immediate. W tym oknie podczas działania makra możesz zmienić wartości zmiennych, wykonać inny kod na VBA, który nie był wcześniej zapisany w module.

Jeśli umieścisz kursor wewnątrz kodu modułu i naciśniesz F5, zostanie on wykonany całkowicie. Jeśli naciśniesz klawisz F8, zostanie wykonany tylko jeden wiersz kodu. Kolejne naciśnięcie klawisza F8 spowoduje wykonanie następnej linii kodu i tak dalej. możesz przejść przez cały kod. Punkt przerwania można utworzyć za pomocą przycisku F9. Jeśli następnie uruchomisz kod za pomocą klawisza F5, kod zostanie uruchomiony do określonej linii, a następnie wstrzymany. Można ją następnie kontynuować korzystając z opisanych wcześniej przycisków F5 lub F8.

Jeśli przyjrzysz się uważnie kodowi, zobaczysz, że zmiennym A, B, C, D przypisano liczby. Linie Debug.Print „text” wypisują określony przez nas tekst w poprzednio otwartym oknie Immediate, aby zobaczyć, co dzieje się ze zmienną. Str(A) konwertuje liczbę na wartość tekstową. A Trim() usuwa spacje po prawej i lewej stronie. Operator Round(C) zaokrągla wartość zgodnie z zasadami arytmetyki do liczby całkowitej (dlatego wynik obliczeń przypisujemy do zmiennej całkowitej Long, co oznacza, że musi być liczbą całkowitą). Na końcu kodu specjalnie stworzyliśmy fałszywą sytuację, aby poćwiczyć korzystanie z debugera.

Stań wewnątrz kodu i naciśnij cztery razy klawisz F8. Linia, która zostanie wykonana jako następna, zostanie oznaczona na żółto. Najedź kursorem na różne zmienne. Jednocześnie pojawi się wyskakujące okienko, w którym zobaczysz ich wartość. Zmienne, którym nie przypisano jeszcze wartości, są równe zero. Naciśnij ponownie klawisz F8. W oknie Immediate pojawi się linia: A = 10 Teraz możemy od razu zmienić wartość zmiennej A w oknie Immediate (np. zmienić ją na 8). W tym celu w nowej linii okna Immediate wpisz: A = 8 i naciśnij Enter. Teraz najedź kursorem na zmienną A i zobacz, że jej wartość wynosi 8. Aby zobaczyć wartość bez najechania kursorem, możesz sprawić, by pojawiła się w oknie Immediate. Robi się to w ten sposób, wpisz w pustym wierszu okna Immediate: ?A i naciśnij Enter. Podpisać? w oknie Immediate oznacza to samo co Debug.Print w kodzie. Tak się po prostu łatwiej i krócej pisze. Natychmiast zobaczysz numer - wynik Twojego żądania.

Umieść kursor na ostatniej linii kodu (C = Round (C / D)) i naciśnij F9. Pojawi się punkt przerwania. Możesz go usunąć tym samym przyciskiem, ale jeszcze go nie usuniemy. Naciśnij F5, program wykona wszystkie linie i zatrzyma się na ostatniej. W oknie Immediate pojawią się komunikaty o przypisaniu wartości do zmiennych. Dotarliśmy do ostatniej linijki kodu. Powinien zgłosić błąd, ponieważ zawiera dzielenie przez zero. Naciśnij F8 i przekonaj się sam. W wyświetlonym oknie kliknij Debug. Jeśli naciśniesz End, wykonywanie programu zostanie zatrzymane i chcemy go zakończyć.

Sytuację można skorygować zmieniając wartość zmiennej D. Teraz jest ona równa zero. W oknie Immediate wpisz w pustym wierszu tekst: D = 2 i naciśnij Enter. Teraz w ostatniej linii kodu dzielimy nie przez zero, ale przez 2, unikając w ten sposób błędu. Naciśnij klawisz F5, a program zakończy pracę bez błędów.

Spróbuj zmienić kod i poćwicz korzystanie z debugera. Uwierz mi, to znacznie ułatwi Ci życie.