web-dev-qa-db-fra.com

Excel VBA App s'arrête spontanément avec le message "L'exécution du code a été arrêtée"

D'après ce que je peux voir sur le Web, il s'agit d'une plainte assez commune, mais les réponses semblent être plus rares. Le problème est le suivant:

Nous avons un certain nombre d'applications Excel VBA qui fonctionnent parfaitement sur les machines de plusieurs utilisateurs. Cependant, sur une machine, ils s’arrêtent sur certaines lignes de code. Ce sont toujours les mêmes lignes, mais ces lignes semblent n'avoir rien en commun les unes avec les autres.

Si vous appuyez sur F5 (Exécuter) après l'arrêt, l'application continue, c'est presque comme si un point d'arrêt avait été ajouté. Nous avons essayé de sélectionner "supprimer toutes les pauses" dans le menu et même d'ajouter et de supprimer une pause.

Nous avions déjà eu ce problème avec des applications simples auparavant et nous l'avons «modifié» en supprimant du code dans les modules, en le compilant puis en le collant, etc.

Le problème semble maintenant concerner Excel lui-même plutôt qu'un simple .xls, nous ne savons donc pas trop comment gérer cela.

Toute aide serait reçue avec gratitude :)

Merci,

Philip Whittington

124
Phil Whittington

J'ai trouvé une 2ème solution.

  1. Appuyez sur le bouton "Debug" dans la fenêtre contextuelle.
  2. Presse Ctrl+Pause|Break deux fois.
  3. Appuyez sur le bouton de lecture pour continuer.
  4. Enregistrez le fichier une fois terminé.

J'espère que ça aide quelqu'un.

376
Stan

Ce problème provient d'une bizarrerie étrange au sein d'Office/Windows.

Après avoir développé le même morceau de code VBA et l'avoir exécuté des centaines de fois (littéralement) au cours des deux derniers jours, j'ai rencontré ce problème tout à l'heure. La seule chose qui a été différente est que juste avant de rencontrer ce problème compliqué, j'ai accidentellement mis fin à l'exécution du code VBA avec une méthode peu orthodoxe.

J'ai nettoyé tous les fichiers temporaires, redémarré, etc ... Quand j'ai relancé le code après tout cela, j'ai toujours eu le problème - avant d'entrer dans la première boucle. Il est logique que "appuie sur le bouton" Débogage "dans la fenêtre contextuelle, puis appuyez deux fois sur [Ctrl + Break] pour continuer ensuite sans arrêts" car quelque chose dans la combinaison Office/Windows n’a pas publié l’exécution. Il est coincé.

L'action redondante Ctrl + Pause résout probablement l'exécution en cours.

15
user2052260

Une solution est ici :

La solution à ce problème consiste à ajouter la ligne de code «Application.EnableCancelKey = xlDisabled» dans la première ligne de votre fichier macro .. Cela résoudra le problème et vous pourrez exécuter la macro sans succès le message d'erreur «L'exécution du code a été interrompue».

Mais, après avoir inséré cette ligne de code, je ne pouvais plus utiliser Ctrl + Break. Donc ça marche mais pas beaucoup.

13
Stan

J'ai trouvé frapper ctrl + break alors que la macro ne fonctionnait pas corrigeait le problème. 

5
James

J'essaierais les solutions habituelles: - Lancez le nettoyeur de code VBA de Rob Bovey sur votre code VBA - supprimez tous les addins du PC des utilisateurs, en particulier les additifs COM et .NET - Supprimez tous les utilisateurs .EXD fichiers (incompatibilités de MSoft Update) - Lancez Excel Detect & Repair sur le système de l'utilisateur - vérifiez la taille du fichier .xlb de l'utilisateur (doit être comprise entre 20 et 30K) - Redémarrez puis supprimez tous les utilisateurs des dossiers

3
Charles Williams

Merci à tous pour leur contribution. Ce problème a été résolu en choisissant REPAIR dans le Panneau de configuration. Je suppose que cela réenregistre explicitement certains des composants COM natifs d’Office et fait des choses que REINSTALL ne fait pas. Je suppose que ce dernier passe simplement par une liste de contrôle et accepte parfois ce qui est là s'il est déjà installé, peut-être. J'ai ensuite eu un problème distinct avec l'enregistrement de ma propre DLL .NET pour COM interop sur la machine de l'utilisateur (bien que cela fonctionne également sur d'autres machines) bien que je pense que c'était mon erreur plutôt que Microsoft. Merci encore, je l'apprécie vraiment.

2
Phil Whittington

J'ai eu ce problème en utilisant également Excel 2007 avec un classeur foobar.xlsm (macro activé) qui obtiendrait le "Exécution du code a été interrompu" en essayant simplement de fermer le classeur sur le X rouge dans le coin droit sans aucune macro à exécuter toutes les macros de formulaire, de classeur ou de feuille de calcul "initialiser". Les options que j'ai obtenues étaient "Fin" ou "Continuer", Debug était toujours grisé. Je l'ai fait comme une affiche précédente suggéré Panneau de configuration-> Programmes et fonctionnalités-> clic droit "Microsoft Office Profesional 2007" (dans mon cas) -> modifier-> réparation.

Cela a résolu le problème pour moi ... Je pourrais ajouter que cela s’est produit peu de temps après une mise à jour MS et j’ai également trouvé un complément Excel appelé "Team Foundation" de Microsoft que je n’ai certainement pas installé volontairement.

2
Carlito

J'ai rencontré ce problème à plusieurs reprises au cours du développement d'une application complexe VBA Excel. Parfois, Excel a commencé à casser un objet VBA de manière assez aléatoire. Et le seul remède était de redémarrer la machine. Après le redémarrage, Excel commençait généralement à agir normalement.

Bientôt, j'ai découvert que la solution possible à ce problème consiste à appuyer sur CTRL + Interruption une fois lorsque la macro N'EST PAS en cours d'exécution. Peut-être que cela peut vous aider aussi.

2
bazinac

Je voudrais ajouter plus de détails à Stan'sréponse n ° 2 pour les raisons suivantes:

  • J'ai moi-même fait face à ce problème plus d'une douzaine de fois et, en fonction des conditions du projet, j'ai choisi entre stan's voodoo magic answer # 1 ou # 2. Quand je continuais à faire face à nouveau, je devenais plus attentif à la raison pour laquelle cela se produit en premier lieu.

  • Je voudrais ajouter la réponse pour les utilisateurs de Mac aussi.

  • Il y a des limites à ces deux réponses possibles:

    • si le code est protégé (et que vous ne connaissez pas le mot de passe), alors réponse # 1 ne vous aidera pas.
    • si le code n'est pas protégé alors réponse # 2 ne vous laissera pas déboguer le code.

  1. Cela peut être dû à l'une des raisons ci-dessous:

    • Le système d'exploitation n'alloue pas de ressources système au processus Excel. ( Solution: Il suffit de démarrer le système d'exploitation - le taux de réussite est très faible, mais il a su fonctionner plusieurs fois.)

    • P-code est le code intermédiaire utilisé dans Visual Basic (avant .NET). Il est donc toujours utilisé dans VBA. Cela permettait un exécutable plus compact au détriment d'une exécution plus lente. Pourquoi je parle de p-code? Parce qu'il est parfois corrompu entre plusieurs exécutions et de gros fichiers ou simplement en raison de l'installation du logiciel (Excel) est corrompu quelque part. Quand le p-code corrompt. l'exécution du code continue de s'interrompre. Solution : Dans ces cas, on suppose que votre code a commencé à être corrompu et il est probable que votre classeur Excel soit également corrompu, ce qui vous donne des messages tels que "Le fichier Excel est corrompu et ne peut pas être ouvert". Par conséquent, en tant que solution rapide, vous pouvez compter sur la réponse n ° 1 ou la réponse n ° 2 selon vos besoins. Cependant, n'ignorez jamais les signes de corruption. Il est préférable de copier vos modules de code dans le bloc-notes, de les supprimer, de sauvegarder et de fermer le classeur, de fermer Excel. Maintenant, rouvrez le classeur et commencez à créer de nouveaux modules avec le code copié précédemment dans le bloc-notes.

  2. Utilisateurs de Mac, essayez l’une des options ci-dessous et ils fonctionneront certainement en fonction de l’architecture de votre système, c’est-à-dire la version OS et Office.

    • Ctrl + Pause
    • Ctrl + ScrLk
    • Esc + Esc (Appuyez deux fois de suite)

Vous serez mis en mode pause en utilisant les combinaisons de touches ci-dessus, car la macro suspend l'exécution immédiatement après la tâche en cours. Ceci est le remplacement de l'étape 2.

  1. Solution: Pour surmonter la limitation liée à l'utilisation de réponse n ° 1 et réponse n ° 2 , j'utilise xlErrorHandler avec l'instruction Resume dans le gestionnaire d'erreurs si le code d'erreur est 18. Ensuite, l'interruption est envoyée à la procédure en cours sous la forme d'une erreur, interceptable par un gestionnaire d'erreurs configuré avec une instruction On Error GoTo. Le code d'erreur récupérable est 18. La procédure en cours est interrompue et l'utilisateur peut déboguer ou mettre fin à la procédure. Microsoft avertit de ne pas utiliser cette option si votre gestionnaire d'erreurs a une instruction resume sinon votre gestionnaire d'erreurs renvoie toujours à la même instruction. C’est exactement ce que nous voulons dans les interruptions inutiles d’exécution du code.

1
jainashish

Ma réputation actuelle ne permet pas encore de publier ceci sous forme de commentaire . La solution de Stans pour passer en mode débogage, appuyez deux fois sur Ctrl + Break, jouez, la sauvegarde a résolu mon problème, mais j'ai deux modifications imprévues:

  1. La structure de mon projet est protégée par un mot de passe. Pour entrer en mode débogage, je devais d'abord entrer en mode développeur, cliquer sur la structure du projet et entrer le mot de passe.

  2. Mon projet est un fichier modèle (.xmtl). J'ai ouvert le fichier via un double clic qui l'ouvre au format .xml avec un "1" à la fin du nom de fichier précédent. J'ai corrigé le bogue selon les instructions de Stans et je l'ai sauvegardé sous ce fichier ... 1.xml. Lorsque j'ai ensuite ouvert à nouveau le modèle, cette fois en tant que modèle, et que je voulais appliquer le même correctif à ce fichier, le bogue avait disparu! Je n'ai pas changé ce fichier et toujours aucun bogue lors de l'exécution de la macro. Cela signifie pour moi que le bogue ne se trouve pas dans le fichier, mais dans un paramètre (masqué) dans Excel.

0
blablubbb