Comment déboguer une macro Excel VBA qui ne fonctionne pas. Il existe des outils incroyables dans Excel VBA qui vous permettent de voir la valeur actuelle stockée dans les variables lorsque vous parcourez le code une ligne à la fois. Si vous avez une macro qui ne fonctionne pas,
Regarder la vidéo
- Vous avez une macro Excel VBA qui ne fonctionne pas
- VBA a des outils de débogage incroyables
- Plutôt que d'exécuter votre code, vous pouvez parcourir le code en utilisant F8
- La ligne en jaune est la ligne sur le point d'être exécutée
- Survolez n'importe quelle variable pour voir la valeur de cette variable.
- Basculez vers Excel pour voir ce qui se passe
Transcription vidéo
Apprenez Excel à partir du podcast, épisode 2096: débogage de la macro VBA
Salut, bon retour sur le netcast, je suis Bill Jelen. La question d'aujourd'hui: quelqu'un avait un code que j'ai posté sur une vieille vidéo YouTube et ils ont posté un commentaire disant: «Ah, ça ne marche pas. Il n'enregistre pas la facture en double mais ne génère pas d'erreur. " Je ne sais pas ce qui ne va pas avec le code. Très bien, vous savez, regardez, il existe d'excellents outils disponibles lorsque la macro VBA ne fonctionne pas. Nous avons donc ici un bouton censé exécuter du code. Je vais attribuer la macro, elle s'appelle SaveInvoice. Je clique sur Modifier et nous sommes finis dans VBA. Et normalement, lorsque nous appuyons sur ce bouton, il va simplement exécuter ce code. BAM! Comme si tout s'est passé très vite mais vous ne pouvez pas regarder ce qui se passe.
Donc, sous les outils de débogage, l'une de mes choses préférées ici est Debug Step Into, dont vous verrez que la touche de raccourci est F8, et cela nous permet d'exécuter le code une ligne à la fois. Alors j'ai appuyé sur F8 là-bas et c'est - la ligne en jaune est la ligne qu'il est sur le point d'exécuter. Donc, si j'appuie sur F8, cela saute sur ces deux déclarations et nous sommes maintenant sur le point de faire une ActiveSheet.Copy. Donc, ce qui est vraiment beau ici, c'est, vous savez, surtout si vous avez un grand moniteur que la fenêtre du podcast est beaucoup trop petite, mais ce que vous pouvez faire, c'est que vous pouvez regarder la macro fonctionner. Alors maintenant, il est sur le point de faire ActiveSheet.Copy. En ce moment, je suis dans un classeur appelé Podcast 2096. Voici une feuille de calcul appelée Facture et lorsque j'appuie sur F8, vous verrez que je suis maintenant sur un tout nouveau classeur appelé Book2 et que nous n'avons que la facture, d'accord.
Et maintenant, nous sommes sur le point d'attribuer cette grande, longue chose à New FN. Appuyez sur F8. Très bien maintenant, il ne semblait pas que quelque chose se soit passé ici parce que rien ne s'était passé ici. Mais voici la belle chose, j'ai maintenant attribué quelque chose à cette variable appelée New FN et si je prends ma souris et survole New FN, une petite info-bulle apparaîtra qui me montre ce qui est stocké dans New FN. Donc, il enregistre le nom du fichier, il y a le dossier où il va aller. Il s'appelle Invoice1234 car il a pris la valeur de F4, puis ajouté le PDF.
Très bien maintenant, l'une des choses les plus frustrantes à propos d'Excel est que si votre mémoire commence à devenir faible, cette info-bulle ne veut pas apparaître. Vous allez planer là-bas et rien ne se passera. Parfois, vous devez cliquer pour l'inventer ici et parfois cela n'apparaîtra tout simplement pas. Quand il n'apparaîtra pas du tout, ce que nous pouvons faire est de faire Ctrl + G. Ctrl + G est la fenêtre immédiate et ensuite nous allons utiliser? qui est le raccourci pour Debug.Print, NewFN. Donc, en d'autres termes, dites-moi ce qui est dans New FN et cela vous montrera ce qui est dans New FN juste là.
Bon alors maintenant, nous sommes sur le point d'exécuter cette ligne de code qui créera un PDF. Très bien, je vais donc appuyer sur F8. D'accord, et à ce stade, nous devrions avoir un nouveau PDF avec 1234 et si je vais regarder dans le dossier, bien sûr Inv1234 du 11 mai à 6h25 vient d'être créé. Génial, non?
Très bien, maintenant nous arrivons au point où nous avons le problème. Très bien, nous appuyons donc sur F8 ici et cela apparaît comme copie en double. Très bien, cela a fonctionné. Et puis F8, et nous pouvons voir ce qu'il y a dans New FN. D'accord, il a donc DupInv1234.pdf et vous pouvez même revenir ici et cliquer simplement après Imprimer NewFN et vous verrez que nous avons changé le nom du fichier, d'accord. Donc, tout est cool. Et puis nous appuyons sur F8 pour lancer la création du PDF. Impressionnant! Tout a l'air bien, non?
Revenez donc à nos fichiers Podcast. D'accord, mais au lieu d'avoir quelque chose appelé DupInv1234, je ne sais tout simplement pas comment quelque chose appelé Book2. D'accord, il a été créé il y a une minute. Ce doit être le seul mais gee! Cela semble être le mauvais nom. Très bien, nous revenons donc à VBA et je sais que je viens d'attribuer la bonne valeur à New FN comme ça, d'accord. Et voyons ce que nous enregistrons sous. Nous l'enregistrons en tant que NewFN1 qui est vide; et comme il est vide, cela signifie qu'il prend le nom de fichier qui dans ce cas est Book2 puisque j'en ai fait une copie. Et l'a changé - Oh regarde! Donc ici, j'attribuais le nom à NewFN, puis j'enregistrais ce NewFN1, et maintenant parce que je débogue et que je survole - Le survol est la meilleure chose qui soit. J'espère pouvoir comprendre ce qui se passe.Alors je reviens et change le NewFN1. Maintenant, voici la chose géniale. D'accord, donc déjà passé cette ligne dans Macro mais je peux la faire glisser vers le haut et dire, d'accord, exécutons à nouveau F8. Et maintenant, créons le PDF. D'accord, et là, il apparaît avec le bon nom et tout est cool.
D'accord, maintenant que je sais que j'ai terminé, tout va bien. Tout fonctionnera à partir d'ici. Je clique simplement sur Exécuter et il fonctionnera jusqu'à la fin du code. D'accord, parfois vous aurez une longue macro avec, vous savez, des centaines de lignes de code qui fonctionnent et ensuite une partie particulière qui ne fonctionne pas, d'accord? Donc, quelques autres outils viennent d'être mentionnés ici. Si vous avez besoin de sauter tout un tas de code et de tout exécuter jusqu'à ce point, eh bien, une façon de le faire est de cliquer ici et de créer un point d'arrêt. Très bien, alors maintenant, quand je lance ceci, cela va tout faire descendre jusqu'à ce point. Je peux simplement cliquer sur Exécuter et cela s'arrêtera, ou si vous ne voulez même pas définir un point d'arrêt, nous allons simplement cliquer ici et dire Debug, Run To Cursor. Run To Cursor.Maintenant, je sais que cela posera un problème ici car le code pour changer ce numéro de facture, je ne l'ai pas encore connecté. Je vais donc simplement mettre un nouveau numéro de facture et je suis donc sur cette ligne maintenant. Déboguer, exécuter au curseur qui est Ctrl + F8. D'accord, alors maintenant, tout s'est déroulé jusqu'à ce point et ce que nous devrions avoir, c'est que nous devrions être en mesure de voir qu'il vient de créer Inv1235, d'accord. Et maintenant, il s'agit de - nous sommes sur cette ligne de code. Je peux simplement appuyer sur F8 pour exécuter une ligne ou simplement exécuter le reste du chemin. Et il y a notre DupInv1235, d'accord? Ainsi, les outils de débogage ici dans VBA sont géniaux. Exécutons un code ligne par ligne, organisons votre écran de manière à ce que nous puissions voir à la fois le code en cours d'exécution et les résultats du code sur la gauche. Et vous savez, j'espère que vous pouvez comprendre ce qui ne va pas avec le code.
Bon, alors récapitulatif de l'épisode: ayez une macro Excel VBA qui ne fonctionne pas. Il a des outils de débogage incroyables. Plutôt que d'exécuter votre code, vous pouvez parcourir le code en utilisant F8. La ligne en jaune est la ligne qui va être exécutée. Vous pouvez passer la souris sur la variable pour voir la valeur de cette variable, basculer vers Excel pour voir ce qui se passe.
Eh bien, je tiens à vous remercier d'être passé. Nous vous reverrons la prochaine fois pour un autre netcast de.
Télécharger un fichier
Téléchargez l'exemple de fichier ici: Podcast2096.xlsm