Dans VBA sur Excel, j'ai une boucle sur plusieurs milliers de cellules, qui prend quelques minutes. p>
est-il possible d'abandonner une boucle à long terme (si oui, comment) / puis-je construire un bouton ou quelque chose comme ça pour interrompre cette boucle manuellement? P>
Construire un bouton et superposer avec une macro n'est pas un problème, seul le code lui-même. P>
5 Réponses :
Application.Enablecanceley code >
pourrait être la chose, vous recherchez.
Consultez le code d'exemple sur l'URL lié, en passant le contrôle de la commande au gestionnaire d'erreur lorsque l'utilisateur appuie échappe. P>
Lorsque Excel est occupé à exécuter votre macro, il ne répond pas à un bouton.
Vous avez trois options ici: p>
Ctrl + Break CODE> Touches (comme apposé à un bouton) LI>
- Faites votre macro beaucoup plus rapidement (peut-être définir
application.Screenupdature code> à
false code> aidera) li>
- Faites votre macro
beaucoup plus lentement en insérant un
DOEVENTS CODE> dans la boucle interne. Ce
manière, Excel reviendra à des boutons dans
pendant ce temps. La macro Ce bouton déclencherait simplement une variable globale à true code> (évidemment, votre boucle interne doit vérifier cette variable sur chaque itération et quitter si c'est vrai code>). < / li>
ol>
En plus des autres réponses,
permet de dire que vous souhaitez casser le code et exécuter certaines actions dans votre code, vous pouvez le faire en capturant l'interruption et la manipulation de celui-ci p>
Vous pouvez utiliser err.Number pour capturer le numéro d'erreur p>
spécifiquement, er.number = 18 fait référence aux pauses utilisateur p>
Non, un bouton n'arrête pas la macro en marche. C'est une chose de développement et le contrôle ne devrait pas être à la main de l'utilisateur par défaut. Vous pouvez essayer la combinaison ci-dessous de clés pour arrêter la macro. P>
Parfois, le bon jeu de clés ( pause kbd>, pause kbd> ou scrllk) kbd> ne sont pas disponibles sur le clavier (surtout se produit avec les utilisateurs de l'ordinateur portable ) et appuyer sur ESC KBD> 2, 3 ou plusieurs fois ne fait pas arrêter la macro. p>
Je suis resté coincé et j'ai finalement trouvé la solution dans la fonction d'accessibilité de Windows après quoi j'ai essayé toutes les options recherchées et plus 3 d'entre elles ont fonctionné pour moi dans 3 scénarios différents. P>
étape 02 strong>: Maintenant, essayez toute une option ci-dessus et d'entre eux fonctionnera certainement en fonction de votre architecture système I.E. OS et de la version Office p>
Vous serez mis en mode de pause à l'aide des combinaisons de touches ci-dessus, car la macro suspend l'exécution terminant immédiatement la tâche actuelle. Pour par exemple., S'il s'agit de données de la bande, elle s'arrêtera immédiatement avant d'exécuter une commande suivante, mais après avoir tiré les données, après lequel on peut appuyer sur F5 kbd> ou f8 kbd > Continuer le débogage. P>
Ajoutez un appel aux doigts à l'intérieur de la boucle. P> li>
Ajoutez une variable de drapeau de niveau de module booléen public p> li>
ajoutez un bouton à l'interface utilisateur p> li>
dans le gestionnaire d'événements pour le bouton définir le drapeau true p> li>
dans la boucle Vérifiez la variable, s'il est vrai abandonner la boucle. P>
J'ai utilisé cela dans un utilisateur Excel mais pas avec des boutons sur une feuille de calcul. P> li> ul>
Duplicaté possible: Stackoverflow.com/Questtions/3018286/...
Doit-il boucler chaque cellule manuellement? Peut-être que vous pourriez retravailler le processus pour la rendre plus rapide, c'est-à-dire à l'aide de la fonction de remplissage d'Excel. Lorsque j'entends "boucle sur plusieurs milliers de cellules", je vois une occasion d'optimiser.
@PowerUser: SRY, ce n'est pas possible dans ce contexte, car je dois vérifier les cellules manuellement à la place ;-)