6
votes

Interrompre / abandonner une boucle VBA

Dans VBA sur Excel, j'ai une boucle sur plusieurs milliers de cellules, qui prend quelques minutes.

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?

Construire un bouton et superposer avec une macro n'est pas un problème, seul le code lui-même.


3 commentaires

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


5 Réponses :


4
votes

Application.Enablecanceley 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.


0 commentaires

13
votes

Lorsque Excel est occupé à exécuter votre macro, il ne répond pas à un bouton.
Vous avez trois options ici:

  1. Utilisez Ctrl + Break Touches (comme apposé à un bouton)
  2. Faites votre macro beaucoup plus rapidement (peut-être définir application.Screenupdature à false aidera)
  3. Faites votre macro beaucoup plus lentement en insérant un DOEVENTS 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 (évidemment, votre boucle interne doit vérifier cette variable sur chaque itération et quitter si c'est vrai ). < / li>

0 commentaires

3
votes

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

Vous pouvez utiliser err.Number pour capturer le numéro d'erreur

spécifiquement, er.number = 18 fait référence aux pauses utilisateur xxx


0 commentaires

0
votes

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.

  • ctrl + pause / pause
  • ctrl + scrlk
  • ESC + ESC (Appuyez deux fois sur Consecutive)

    Parfois, le bon jeu de clés ( pause , pause ou scrllk) ne sont pas disponibles sur le clavier (surtout se produit avec les utilisateurs de l'ordinateur portable ) et appuyer sur ESC 2, 3 ou plusieurs fois ne fait pas arrêter la macro.

    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.

    étape # 01 : Si votre clavier n'a pas de clé spécifique, veuillez ne pas vous inquiéter et ouvrir le "clavier à l'écran" des utilitaires de Windows en appuyant sur gagnant + < KBD> u .

    étape 02 : 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

    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 ou f8 Continuer le débogage.


0 commentaires

1
votes
  • Ajoutez un appel aux doigts à l'intérieur de la boucle.

  • Ajoutez une variable de drapeau de niveau de module booléen public

  • ajoutez un bouton à l'interface utilisateur

  • dans le gestionnaire d'événements pour le bouton définir le drapeau true

  • dans la boucle Vérifiez la variable, s'il est vrai abandonner la boucle.

    J'ai utilisé cela dans un utilisateur Excel mais pas avec des boutons sur une feuille de calcul.


0 commentaires