web-dev-qa-db-fra.com

La rupture de contrôle ne fonctionne pas en 2010 (2013) Excel VBA

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!

17
Tommy Z

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.

32
John

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 :))

5
cxw

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.

4
chris neilsen

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. 

1
user7076157

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.

0
washicd

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

0
Alex