Ricerca…


Sintassi

  • Debug.Print (stringa)
  • Basta basta

Debug.Print

Per stampare un elenco delle descrizioni dei codici di errore nella finestra immediata, passarlo alla funzione 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

Puoi mostrare la finestra immediata di:

  • Selezionare V isualizza | I mmediate Window dalla barra dei menu
  • Usando la scorciatoia da tastiera Ctrl-G

Stop

Il comando Stop interrompe l'esecuzione quando viene chiamato. Da lì, il processo può essere ripreso o essere eseguito passo dopo passo.

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

Finestra immediata

Se desideri testare una riga di codice macro senza dover eseguire un intero sottotitolo, puoi digitare i comandi direttamente nella finestra immediata e premere ENTER per eseguire la riga.

Per testare l'output di una linea, puoi precederla con un punto interrogativo ? per stampare direttamente nella finestra immediata. In alternativa, è anche possibile utilizzare il comando di print per print l'output.

Mentre nel Visual Basic Editor, premere CTRL + G per aprire la Finestra Immediata. Per rinominare il foglio attualmente selezionato in "Foglio di esempio", digita quanto segue nella Finestra immediata e premi ENTER

   ActiveSheet.Name = "ExampleSheet"

Per stampare il nome del foglio attualmente selezionato direttamente nella Finestra immediata

? ActiveSheet.Name
ExampleSheet

Questo metodo può essere molto utile per testare la funzionalità di funzioni incorporate o definite dall'utente prima di implementarle nel codice. L'esempio seguente mostra come la finestra immediata può essere utilizzata per testare l'output di una funzione o una serie di funzioni per confermare un risultato previsto.

'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

La finestra immediata può anche essere utilizzata per impostare o ripristinare l'applicazione, la cartella di lavoro o altre proprietà necessarie. Questo può essere utile se Application.EnableEvents = False in una subroutine genera un errore inaspettatamente, causando la chiusura senza reimpostare il valore su True (che può causare funzionalità frustranti e impreviste. In questo caso, i comandi possono essere digitati direttamente nella finestra immediata ed eseguire:

? 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

Per tecniche di debug più avanzate, i due punti : possono essere utilizzati come separatori di riga. Questo può essere usato per espressioni multi-linea come il loop nell'esempio sotto.

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

Utilizzare il timer per individuare i colli di bottiglia nelle prestazioni

Il primo passo per ottimizzare la velocità è trovare le sezioni di codice più lente. La funzione VBA Timer restituisce il numero di secondi trascorsi da mezzanotte con una precisione di 1/25 di secondo (3.90625 millisecondi) su PC basati su Windows. Le funzioni VBA Now e Time sono accurate solo per un secondo.

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"

Aggiunta di un punto di interruzione al codice

Puoi aggiungere facilmente un punto di interruzione al tuo codice facendo clic sulla colonna grigia a sinistra della linea del tuo codice VBA in cui desideri interrompere l'esecuzione. Un punto rosso appare nella colonna e il codice di punto di interruzione è anche evidenziato in rosso.

Puoi aggiungere più punti di interruzione nel codice e riprendere l'esecuzione premendo l'icona "Riproduci" nella barra dei menu. Non tutto il codice può essere un punto di interruzione come linee di definizione delle variabili, la prima o l'ultima riga di una procedura e le righe di commento non possono essere selezionate come punto di interruzione.

inserisci la descrizione dell'immagine qui

Finestra dei debugger locali

La finestra Locals fornisce un facile accesso al valore corrente di variabili e oggetti nell'ambito della funzione o subroutine in esecuzione. È uno strumento essenziale per eseguire il debug del codice e modificare le modifiche per trovare i problemi. Permette anche di esplorare proprietà che potresti non sapere esistessero.

Prendi il seguente esempio,

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

Nell'editor VBA, fare clic su Visualizza -> Finestra locale

Dove il menù dei locali è sulla finestra

Quindi, passando attraverso il codice usando F8 dopo aver fatto clic all'interno della subroutine, ci siamo fermati prima di arrivare all'assegnazione di findMeinLocals. Qui sotto puoi vedere che il valore è 0 --- e questo è quello che verrebbe usato se non gli avessi mai assegnato un valore. L'oggetto range è 'Nothing'.

In questo momento le variabili non sono nulla ...

Mostrare le variabili non sono nulla.

Se ci fermiamo appena prima della fine della subroutine, possiamo vedere i valori finali delle variabili.

Imposta un punto di debug ... se vuoi

Possiamo vedere findMeInLocals con un valore di 1 e tipo di numero intero e FindMeInLocals2 con un tipo di intervallo / intervallo. Se clicchiamo sul segno +, possiamo espandere l'oggetto e vedere le sue proprietà, come il conteggio o la colonna.

inserisci la descrizione dell'immagine qui



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow