J'écris du code et (parfois difficile à croire pour beaucoup), de temps en temps, je rate, créant une boucle infinie. Avec mon nouvel Excel, le Ctrl + Break ne fonctionne plus. La touche Echap non plus, etc. J'ai regardé sur le Web et il semble que Microsoft ait un bogue et ne se soucie pas de le résoudre.
Est-ce que quelqu'un connaît un moyen de réintroduire la fonction Ctrl + Break dans VBA afin que si cela se produit dans le futur, je ne perde pas la fermeture de travail/force Je vous remercie!
Alt + Esc. Maintenez les touches enfoncées jusqu'à ce que ça casse.
À partir de Windows 7, cela fera défiler toutes les fenêtres ouvertes. Ne faites pas attention, continuez à le presser.
Sur Office 2013 au moins, Ctrl + Scroll Lock le fait. Je n'ai pas eu besoin de modifier les paramètres ou d'activer quoi que ce soit.
(Fiche flagrante: mon blog lien vers la source originale de cette information :))
Une façon d’atténuer ce comportement très agaçant consiste à inclure
DoEvents
Dans la boucle. Il n'est pas nécessaire de l'exécuter à chaque itération, tant qu'il est appelé périodiquement, Ctrl Break fonctionnera toujours.
Remarque: je le supprime généralement une fois le code débogué, afin d'éviter tout impact sur les performances.
Si cela peut aider quelqu'un, appuyer sur Ctrl + break lorsque la macro ne fonctionne pas ne fonctionne que si vous le faites en dehors du développeur.
Pour ceux qui ont essayé sans succès les solutions proposées précédemment, essayez ceci. Cela a fonctionné pour moi (windows8, Excel 2016)
Dans la fenêtre du code VBA, cliquez avec le bouton gauche de la souris et maintenez-la enfoncée (comme si vous alliez faire glisser cette fenêtre) tout en maintenant les touches Alt + ECH enfoncées. Il a cassé l'exécution et m'a demandé si je voulais continuer ou déboguer ... J'ai bien sûr choisi le débogage.
Une alternative sera d'introduire une erreur intentionnellement dans la boucle. Dis par exemple votre boucle ne doit pas être exécutée plus de 1000 fois:
Function XYZ()
do while(..)
errcnt = errcnt + 1
if errcnt > 1000 then
cells.find(what:="Chunk Norris").activate
exit function
endif
loop
end function
cela produira une erreur et "cassera" le code