Recherche…


Syntaxe

  • Debug.Print (chaîne)
  • Stop STOP

Debug.Print

Pour imprimer une liste des descriptions de code d'erreur dans la fenêtre immédiate, transmettez-la à la fonction 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

Vous pouvez afficher la fenêtre immédiate par:

  • Sélection de V iew | Je mmediate fenêtre dans la barre de menu
  • Utiliser le raccourci clavier Ctrl-G

Arrêtez

La commande Stop met en pause l'exécution lorsqu'elle est appelée. De là, le processus peut être repris ou exécuté pas à pas.

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

Fenêtre Immédiate

Si vous souhaitez tester une ligne de code macro sans avoir à exécuter un sous-ensemble, vous pouvez taper des commandes directement dans la fenêtre Immédiat et ENTER sur ENTER pour exécuter la ligne.

Pour tester la sortie d'une ligne, vous pouvez la faire précéder d'un point d'interrogation ? pour imprimer directement dans la fenêtre immédiate. Vous pouvez également utiliser la commande print pour print la sortie.

Dans Visual Basic Editor, appuyez sur CTRL + G pour ouvrir la fenêtre immédiate. Pour renommer votre feuille actuellement sélectionnée en "ExampleSheet", tapez ce qui suit dans la fenêtre Immédiat et ENTER sur ENTER

   ActiveSheet.Name = "ExampleSheet"

Pour imprimer le nom de la feuille actuellement sélectionnée directement dans la fenêtre immédiate

? ActiveSheet.Name
ExampleSheet

Cette méthode peut être très utile pour tester les fonctionnalités des fonctions intégrées ou définies par l'utilisateur avant de les implémenter dans du code. L'exemple ci-dessous montre comment utiliser la fenêtre Immédiat pour tester la sortie d'une fonction ou d'une série de fonctions afin de confirmer un résultat attendu.

'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 fenêtre Immédiat peut également être utilisée pour définir ou réinitialiser une application, un classeur ou d'autres propriétés nécessaires. Cela peut être utile si vous avez Application.EnableEvents = False dans un sous-programme qui génère une erreur de manière inattendue, ce qui provoque sa fermeture sans réinitialiser la valeur sur True (ce qui peut provoquer des fonctionnalités frustrantes et inattendues. Dans ce cas, les commandes peuvent être saisies directement). dans la fenêtre immédiate et exécutez:

? 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

Pour les techniques de débogage plus avancées, les deux points : peuvent être utilisés comme séparateur de ligne. Cela peut être utilisé pour des expressions multi-lignes telles que la mise en boucle dans l'exemple ci-dessous.

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

Utiliser la minuterie pour trouver des goulots d'étranglement dans les performances

La première étape pour optimiser la vitesse consiste à trouver les sections de code les plus lentes. La fonction Timer VBA renvoie le nombre de secondes écoulées depuis minuit avec une précision de 1 / 256ème de seconde (3,90625 millisecondes) sur les PC Windows. Les fonctions VBA Now et Time ne sont précises qu’à une seconde.

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"

Ajouter un point d'arrêt à votre code

Vous pouvez facilement ajouter un point d'arrêt à votre code en cliquant sur la colonne grise située à gauche de la ligne de votre code VBA où vous souhaitez arrêter l'exécution. Un point rouge apparaît dans la colonne et le code du point d'arrêt est également surligné en rouge.

Vous pouvez ajouter plusieurs points d'arrêt dans votre code et reprendre l'exécution en appuyant sur l'icône "play" dans la barre de menus. Tout le code ne peut pas être un point d'arrêt en tant que lignes de définition de variable, la première ou la dernière ligne d'une procédure et les lignes de commentaires ne peuvent pas être sélectionnées en tant que point d'arrêt.

entrer la description de l'image ici

Fenêtre locale de débogueur

La fenêtre Locaux permet d'accéder facilement à la valeur actuelle des variables et des objets dans la portée de la fonction ou du sous-programme que vous exécutez. C'est un outil essentiel pour déboguer votre code et passer en revue les modifications afin de trouver des problèmes. Cela vous permet également d'explorer les propriétés que vous ne connaissiez peut-être pas.

Prenons l'exemple suivant:

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

Dans l'éditeur VBA, cliquez sur Afficher -> Fenêtre locale

Où le menu local est à la fenêtre

Ensuite, en parcourant le code en utilisant F8 après avoir cliqué dans le sous-programme, nous nous sommes arrêtés avant d’avoir assigné findMeinLocals. Vous pouvez voir ci-dessous que la valeur est 0 --- et c'est ce qui serait utilisé si vous ne lui avez jamais attribué de valeur. L'objet Range est "Nothing".

A cette étape, les variables ne sont rien ...

Afficher les variables ne sont rien.

Si nous nous arrêtons juste avant la fin du sous-programme, nous pouvons voir les valeurs finales des variables.

Définir un point de débogage ... si vous voulez

Nous pouvons voir findMeInLocals avec la valeur 1 et le type Integer, et FindMeInLocals2 avec un type Range / Range. Si nous cliquons sur le signe +, nous pouvons développer l'objet et voir ses propriétés, telles que le nombre ou la colonne.

entrer la description de l'image ici



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow