Szukaj…


Składnia

  • Debug.Print (ciąg)
  • Stop () / Stop

Debuguj. Drukuj

Aby wydrukować listę opisów kodów błędów w oknie natychmiastowym, przekaż ją do funkcji Debug.Print :

Private Sub ListErrCodes()
    Debug.Print "List Error Code Descriptions"
    For i = 0 To 65535
        e = Error(i)
        If e <> "Application-defined or object-defined error" Then Debug.Print i & ": " & e
    Next i
End Sub

Możesz wyświetlić okno natychmiastowe poprzez:

  • Wybór V iew | I Średnie okno z paska menu
  • Za pomocą skrótu klawiaturowego Ctrl-G

Zatrzymać

Polecenie Stop wstrzyma wykonanie po wywołaniu. Stamtąd proces można wznowić lub wykonać krok po kroku.

Sub Test()
    Dim TestVar as String
    TestVar = "Hello World"
    Stop                    'Sub will be executed to this point and then wait for the user
    MsgBox TestVar
End Sub

Natychmiastowe okno

Jeśli chcesz przetestować wiersz kodu makra bez konieczności uruchamiania całego podrzędnego, możesz wpisać polecenia bezpośrednio w oknie natychmiastowym i nacisnąć ENTER aby uruchomić wiersz.

Aby przetestować wynik linii, możesz poprzedzić go znakiem zapytania ? aby wydrukować bezpośrednio w oknie natychmiastowym. Alternatywnie można również użyć polecenia print aby wydrukować wydruk.

W Edytorze Visual Basic naciśnij CTRL + G aby otworzyć okno natychmiastowe. Aby zmienić nazwę aktualnie wybranego arkusza na „ExampleSheet”, wpisz następujące polecenie w oknie natychmiastowym i naciśnij ENTER

   ActiveSheet.Name = "ExampleSheet"

Aby wydrukować nazwę aktualnie wybranego arkusza bezpośrednio w oknie natychmiastowym

? ActiveSheet.Name
ExampleSheet

Ta metoda może być bardzo przydatna do testowania funkcjonalności wbudowanych lub zdefiniowanych przez użytkownika funkcji przed ich implementacją w kodzie. Poniższy przykład pokazuje, w jaki sposób można użyć okna natychmiastowego do przetestowania wyniku funkcji lub serii funkcji w celu potwierdzenia oczekiwanego.

'In this example, the Immediate Window was used to confirm that a series of Left and Right 
'string methods would return the desired string

'expected output: "value"
print Left(Right("1111value1111",9),5) ' <---- written code here, ENTER pressed
value                                  ' <---- output

Okno natychmiastowe można również wykorzystać do ustawienia lub zresetowania aplikacji, skoroszytu lub innych potrzebnych właściwości. Może to być przydatne, jeśli masz Application.EnableEvents = False w podprogramie, który nieoczekiwanie generuje błąd, powodując jego zamknięcie bez resetowania wartości do True (co może powodować frustrujące i nieoczekiwane działanie. W takim przypadku polecenia można wpisywać bezpośrednio do okna natychmiastowego i uruchom:

? Application.EnableEvents       ' <---- Testing the current state of "EnableEvents"
False                            ' <---- Output
Application.EnableEvents = True  ' <---- Resetting the property value to True
? Application.EnableEvents       ' <---- Testing the current state of "EnableEvents"
True                             ' <---- Output

W przypadku bardziej zaawansowanych technik debugowania dwukropek : może być używany jako separator linii. Można tego użyć do wyrażeń wieloliniowych, takich jak zapętlanie w poniższym przykładzie.

x = Split("a,b,c",","): For i = LBound(x,1) to UBound(x,1): Debug.Print x(i): Next i '<----Input this and press enter
a '<----Output
b '<----Output
c '<----Output

Użyj Timera, aby znaleźć wąskie gardła w wydajności

Pierwszym krokiem w optymalizacji szybkości jest znalezienie najwolniejszych sekcji kodu. Funkcja Timer VBA zwraca liczbę sekund, które upłynęły od północy z dokładnością do 1/256 sekundy (3,90625 milisekund) na komputerach z systemem Windows. Funkcje VBA Now i Time są dokładne z dokładnością do sekundy.

Dim start As Double       ' Timer returns Single, but converting to Double to avoid 
start = Timer             ' scientific notation like 3.90625E-03 in the Immediate window
' ... part of the code
Debug.Print Timer - start; "seconds in part 1" 

start = Timer
' ... another part of the code
Debug.Print Timer - start; "seconds in part 2"

Dodanie punktu przerwania do kodu

Możesz łatwo dodać punkt przerwania do swojego kodu, klikając szarą kolumnę po lewej stronie wiersza kodu VBA, w którym chcesz zatrzymać wykonywanie. Czerwona kolumna pojawia się w kolumnie, a kod punktu przerwania jest również podświetlony na czerwono.

Możesz dodać wiele punktów przerwania w całym kodzie, a wznowienie wykonania można osiągnąć, naciskając ikonę „Odtwórz” na pasku menu. Nie cały kod może być punktem przerwania jako linie definicji zmiennej, nie można wybrać pierwszego lub ostatniego wiersza procedury i linii komentarza jako punktu przerwania.

wprowadź opis zdjęcia tutaj

Okno Lokalne debuggery

Okno Locals zapewnia łatwy dostęp do bieżącej wartości zmiennych i obiektów w zakresie uruchomionej funkcji lub podprogramu. Jest to niezbędne narzędzie do debugowania kodu i wprowadzania zmian w celu znalezienia problemów. Umożliwia także eksplorację właściwości, o których istnieniu mogłeś nie wiedzieć.

Weź następujący przykład

Option Explicit
Sub LocalsWindowExample()
    Dim findMeInLocals As Integer
    Dim findMEInLocals2 As Range
    
    findMeInLocals = 1
    Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range("A1")
End Sub

W Edytorze VBA kliknij Widok -> Okno mieszkańców

Gdzie menu mieszkańców znajduje się w oknie

Następnie, przechodząc przez kod za pomocą F8 po kliknięciu wewnątrz podprogramu, zatrzymaliśmy się przed przejściem do przypisywania findMeinLocals. Poniżej możesz zobaczyć, że wartość wynosi 0 --- i to by było, gdybyś nigdy nie przypisał jej wartości. Obiektem zasięgu jest „Nic”.

Na tym etapie zmienne są niczym ...

Wyświetlanie zmiennych jest niczym.

Jeśli zatrzymamy się tuż przed zakończeniem podprogramu, zobaczymy końcowe wartości zmiennych.

Ustaw punkt debugowania ... jeśli chcesz

Widzimy findMeInLocals o wartości 1 i typie Integer oraz FindMeInLocals2 o typie Range / Range. Klikając znak +, możemy rozwinąć obiekt i zobaczyć jego właściwości, takie jak liczba lub kolumna.

wprowadź opis zdjęcia tutaj



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow