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

151

D'après ce que je peux voir sur le web, c'est une plainte assez courante, mais les réponses semblent plus rares. Le problème est le suivant:

Nous avons un certain nombre d'applications Excel VBA qui fonctionnent parfaitement sur un certain nombre de machines d'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 de commun entre elles.

Si vous appuyez sur F5 (exécution) 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 une pause et de la supprimer à nouveau.

Nous avons déjà eu ce problème avec des applications uniques et nous l'avons `` corrigé '' en supprimant le code des modules, en le compilant puis en le recollant, etc.

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

Toute aide serait reçue avec gratitude :)

Merci,

Philip Whittington

Phil Whittington
la source
2
L'utilisateur appuie-t-il sur échapper au milieu d'un traitement? Ou toute autre application qui envoie la clé d'échappement?
shahkalpesh
1
Après avoir sélectionné Supprimer tous les points d'arrêt , avez-vous également recompilé et enregistré le projet VBA? J'ai vu un problème lié dans Word VBA où les points d'arrêt précédemment supprimés provoquent toujours une rupture.
Dirk Vollmar
Rien n'est traité pendant l'exécution, shahkalpesh. Divo - merci, je ne les ai peut-être pas essayés précisément dans cet ordre. Je vais le faire maintenant ...
Phil Whittington
En plus du commentaire de divo, il peut être utile de commenter les lignes pertinentes et toutes les lignes qui arrêteraient le débogage, elles peuvent ensuite être décommentées et le code recompilé (à nouveau).
Fionnuala
Et j'ai oublié de mentionner: pour déclencher réellement une reconstruction, il est normalement nécessaire de modifier une ligne, puis de déplacer le curseur sur la ligne suivante pour marquer le code source comme modifié (par exemple faire une modification, déplacer le curseur vers le bas, déplacer curseur vers le haut et annuler le changement manuellement)
Dirk Vollmar

Réponses:

405

J'ai trouvé une 2ème solution.

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

J'espère que cela aide quelqu'un.

Stan
la source
12
+1: Wow, ce post m'a sauvé d'un monde de douleur. Une solution très inattendue pour un problème bizarre. Après avoir appuyé deux fois sur [Ctrl + Pause] et continué, j'ai enregistré le fichier. Après cela, le problème n'est plus apparu lorsque j'ai fermé et rouvert le fichier.
dbenham
28
Si jamais une réponse méritait un vote favorable, c'est celle-là. Très bonne réponse.
The_Barman
4
Cela m'a beaucoup aidé. Cette réponse méritait 1000 votes positifs. J'ai été en proie à ce problème pendant les 4-5 derniers jours. Cela a parfaitement fonctionné.
demouser123
25
Est-ce que quelqu'un sait pourquoi cela fonctionne? Ou d'où ça vient? Est-ce magique?
ZX9
4
M'aide encore en 2017. Merci!
Slab
16

Ce problème vient d'une étrange bizarrerie dans 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 déroutant, 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 exécuté à nouveau 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 "appuyez sur le bouton" Déboguer "dans la fenêtre contextuelle, puis appuyez deux fois sur [Ctrl + Pause] et après cela peut continuer sans s'arrêter" parce que quelque chose dans la combinaison Office / Windows n'a pas libéré l'exécution. Il est coincé.

L'action redondante Ctrl + Break résout probablement l'exécution persistante.

user2052260
la source
14

Une solution est ici :

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

Mais, après avoir inséré cette ligne de code, je ne pouvais plus utiliser Ctrl + Break. Cela fonctionne donc mais pas beaucoup.

Stan
la source
Merci, Stan - c'est certainement une solution si vous êtes pressé par le temps et que vous voulez juste qu'il fonctionne! Très utile.
Phil Whittington
1
Vous pouvez le réactiver dans la même exécution en le définissant sur xlInterrupt. (Il se réactive également automatiquement lorsque l'exécution du code se termine.) Votre autre réponse a fonctionné pour moi, mais dans le pire des cas, cela pourrait être utilisé comme un correctif temporaire. Plus d'informations sur Application.EnableCancelKey
Kodithic
2
La bonne réponse - et la seule bonne réponse - est ci-dessus. L'insertion d' une ligne de code, y compris «Application.EnableCancelKey = xlDisabled», déplace simplement le problème sur une autre ligne. Souvent, le nouveau «point d'arrêt» correspond exactement à la ligne que vous avez insérée. La seule raison pour laquelle je ne vote pas contre votre réponse est que j'ai eu recours à moi-même, à plusieurs reprises, au cours de la dernière décennie.
Nigel Heffernan
6

J'ai trouvé que le fait d'appuyer sur ctrl + break alors que la macro ne fonctionnait pas a résolu le problème.

James
la source
3

J'essaierais les choses correctives habituelles: - Exécutez le nettoyeur de code VBA de Rob Bovey sur votre code VBA - supprimez tous les compléments sur le PC des utilisateurs, en particulier les compléments COM et .NET - Supprimez tous les fichiers .EXD des utilisateurs (incompatibilités MSoft Update) - Exécutez Excel Détecter et réparer sur le système des utilisateurs - vérifier la taille du fichier .xlb de l'utilisateur (devrait être 20-30K) - Redémarrez puis supprimez tous les fichiers temporaires de l'utilisateur

Charles Williams
la source
2

Merci à tous pour leur contribution. Ce problème a été résolu en choisissant REPARER 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 m'attends à ce que ce dernier passe simplement par une liste de contrôle et accepte parfois ce qu'il y a 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 l'interopérabilité COM 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.

Phil Whittington
la source
2

J'ai rencontré ce problème à quelques reprises lors du développement d'une application Excel VBA complexe. Parfois, Excel a commencé à casser l'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 a généralement commencé à agir normalement.

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

bazinac
la source
2

J'ai eu ce problème en utilisant également Excel 2007 avec un classeur foobar.xlsm (macro activé) qui obtiendrait le "L'exécution du code a été interrompue" en essayant simplement de fermer le classeur sur le X rouge dans le coin droit sans macros fonctionnant à toutes les macros de formulaire, de classeur ou de feuille de calcul "initialiser". Les options que j'ai eues étaient "Fin" ou "Continuer", le débogage était toujours grisé. J'ai fait comme une affiche précédente suggérée Panneau de configuration-> Programmes et fonctionnalités-> clic droit "Microsoft Office Proffesional 2007" (dans mon cas) -> changement-> 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 addin dans Excel appelé "Team Foundation" de Microsoft que je n'ai certainement pas installé volontairement

Carlito
la source
1

Je voudrais ajouter plus de détails à la réponse n ° 2 de Stan pour les raisons ci-dessous:

  • J'ai moi-même été confronté à ce problème plus d'une douzaine de fois et en fonction des conditions du projet, j'ai choisi entre la réponse magique vaudou de Stan # 1 ou # 2. Quand j'ai continué à y faire face, je deviens plus curieux de savoir pourquoi cela se produit en premier lieu.

  • Je voudrais également ajouter une réponse pour les utilisateurs de Mac.

  • 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), la réponse n ° 1 ne vous aidera pas.
    • si le code n'est pas protégé, la réponse n ° 2 ne vous permettra pas de déboguer le code.

  1. Cela peut se produire pour 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 est connu pour fonctionner plusieurs fois)

    • P-code est le code intermédiaire qui était utilisé dans Visual Basic (avant .NET) et est donc toujours utilisé dans le VBA. Il a permis 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 des fichiers volumineux ou simplement en raison de l'installation du logiciel (Excel) est corrompu quelque part. Quand le p-code corrompt. l'exécution du code est interrompue.Solution: Dans ces cas, il est supposé que votre code a commencé à se corrompre et il y a de fortes chances que votre classeur Excel soit également corrompu en vous donnant des messages tels que "fichier Excel corrompu et ne peut pas être ouvert". Par conséquent, comme 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 supprimer les modules, d'enregistrer 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 Mac, essayez l'une des options ci-dessous et d'entre elles fonctionnera certainement en fonction de l'architecture de votre système, c'est-à-dire de la version du système d'exploitation et d'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 en terminant la tâche en cours. Ceci remplace l'étape 2.

  1. Solution: pour surmonter la limitation de l'utilisation de la réponse n ° 1 et de la réponse n ° 2 , j'utilise xlErrorHandleravec l' Resumeinstruction dans le gestionnaire d'erreur si le code d'erreur est 18. Ensuite, l'interruption est envoyée à la procédure en cours comme une erreur, interceptable par une erreur gestionnaire 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 terminer la procédure. Microsoft avertit que ne l'utilisez pas si votre gestionnaire d'erreurs a une instruction de reprise, sinon votre gestionnaire d'erreurs retourne toujours à la même instruction. C'est exactement ce que nous voulons dans les interruptions inutiles et inutiles de l'exécution du code.

jainashish
la source
0

Ma réputation actuelle ne permet pas encore de poster ceci en commentaire. La solution Stans pour entrer en mode débogage, appuyez deux fois sur Ctrl + Pause, jouez, enregistrez a résolu mon problème, mais j'ai deux rebondissements inattendus:

  1. Ma structure de projet est protégée par mot de passe, donc pour entrer dans le mode de 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 l'ai enregistré sous le nom de fichier ... 1.xml Quand j'ai ensuite rouvert le modèle, cette fois en tant que modèle, et que je voulais appliquer le même correctif de bogue à ce fichier, le bogue avait disparu! Je n'ai pas changé ce fichier et toujours pas de bogue lors de l'exécution de la macro. Cela signifie pour moi que le bogue n'est pas réellement dans le fichier, mais dans un paramètre (caché) dans Excel.

blablubbb
la source
-1

Le problème semble maintenant concerner Excel lui-même

Réinstallez-le et corrigez-le :) Autre que c'est difficile à dire.

Andy
la source
Nous avons essayé une réinstallation, bien que l'utilisateur ait «oublié» de redémarrer après que le technicien du support ait fait son travail. J'essaie d'éviter une autre réinstallation d'Office, mais cela peut être inévitable ... Merci
Phil Whittington