La aplicación Excel VBA se detiene espontáneamente con el mensaje "Se detuvo la ejecución del código"

151

Por lo que puedo ver en la web, esta es una queja bastante común, pero las respuestas parecen ser más raras. El problema es este:

Tenemos una serie de aplicaciones Excel VBA que funcionan perfectamente en varias máquinas de usuarios. Sin embargo, en una máquina se detienen en ciertas líneas de código. Siempre son las mismas líneas, pero esas líneas parecen no tener nada en común entre sí.

Si presiona F5 (ejecutar) después de la detención, la aplicación continúa, por lo que es casi como si se hubiera agregado un punto de interrupción. Intentamos seleccionar 'eliminar todos los descansos' del menú e incluso agregar un descanso y eliminarlo nuevamente.

Hemos tenido este problema con aplicaciones individuales antes y lo hemos 'arreglado' al cortar el código de los módulos, compilarlo y luego pegarlo de nuevo, etc.

El problema ahora parece estar relacionado con Excel en lugar de con un solo .xls, por lo que no estamos seguros de cómo administrar esto.

Cualquier ayuda sería agradecida :)

Gracias,

Philip Whittington

Phil Whittington
fuente
2
¿El usuario está presionando escape en medio de algún procesamiento? ¿O alguna otra aplicación que envíe la tecla de escape?
shahkalpesh
1
Después de seleccionar Eliminar todos los puntos de interrupción , ¿también compiló y guardó el proyecto VBA? He visto un problema relacionado dentro de Word VBA donde los puntos de interrupción eliminados anteriormente todavía causan una interrupción.
Dirk Vollmar
No se está procesando nada durante la ejecución, shahkalpesh. Divo: gracias, puede que no los haya probado precisamente en ese orden. Lo haré ahora ...
Phil Whittington
Además del comentario de divo, puede ser útil comentar las líneas relevantes y las líneas que detendrían la depuración, entonces pueden ser descomentadas y el código recompilado (nuevamente).
Fionnuala
Y olvidé mencionar: para activar realmente una reconstrucción, normalmente es necesario modificar una línea y luego mover el cursor a la siguiente línea para marcar el código fuente como modificado (por ejemplo, hacer un cambio, mover el cursor hacia abajo, mover cursor arriba y deshacer el cambio manualmente)
Dirk Vollmar

Respuestas:

404

He encontrado una segunda solución.

  1. Presione el botón "Depurar" en la ventana emergente.
  2. Presione Ctrl+ Pause|Breakdos veces.
  3. Presiona el botón de reproducción para continuar.
  4. Guarde el archivo después de completarlo.

Espero que esto ayude a alguien.

Stan
fuente
12
+1: Wow, esta publicación me salvó de un mundo de dolor. Una solución muy inesperada para un problema extraño. Después de presionar [Ctrl + Break] dos veces y continuar, guardé el archivo. Después de eso, el problema ya no apareció cuando cerré y volví a abrir el archivo.
dbenham 01 de
28
Si alguna vez una respuesta mereció un voto positivo, esta es la respuesta. Gran respuesta.
The_Barman
44
Esto me ayudó mucho. Esta respuesta mereció 1000 votos a favor. Estuve plagado de este problema durante los últimos 4-5 días. Esto funcionó perfectamente.
demouser123
25
¿Alguien sabe por qué esto funciona? ¿O de dónde viene? ¿Es esto mágico?
ZX9
44
Todavía me ayuda en 2017. ¡Gracias!
Losa
16

Este problema proviene de una peculiaridad extraña dentro de Office / Windows.

Después de desarrollar el mismo fragmento de código VBA y ejecutarlo cientos de veces (literalmente) en los últimos días, me encontré con este problema en este momento. Lo único que ha sido diferente es que justo antes de experimentar este problema desconcertante, accidentalmente finalicé la ejecución del código VBA con un método poco ortodoxo.

Limpié todos los archivos temporales, reinicié, etc. Cuando ejecuté el código nuevamente después de todo esto, aún recibí el problema, antes de ingresar al primer bucle. Tiene sentido que "presione el botón" Debug "en la ventana emergente, luego presione dos veces [Ctrl + Break] y después de esto puede continuar sin paradas" porque algo en la combinación de Office / Windows no ha liberado la ejecución. Está atascado.

La acción redundante Ctrl + Break probablemente resuelva la ejecución persistente.

usuario2052260
fuente
14

Una solución está aquí :

La solución para este problema es agregar la línea de código "Application.EnableCancelKey = xlDisabled" en la primera línea de su macro. Esto solucionará el problema y podrá ejecutar la macro con éxito sin obtener el mensaje de error "Código la ejecución ha sido interrumpida ".

Pero, después de insertar esta línea de código, ya no pude usar Ctrl + Break. Entonces funciona pero no mucho.

Stan
fuente
Gracias, Stan, ¡sin duda es una solución si estás bajo presión de tiempo y solo quieres que funcione! Muy útil.
Phil Whittington
1
Puede volver a habilitarlo en la misma ejecución configurándolo en xlInterrupt. (También se vuelve a habilitar automáticamente cuando finaliza la ejecución del código). Su otra respuesta funcionó para mí, pero en el peor de los casos, esto podría usarse como una solución temporal. Más información sobre Application.EnableCancelKey
Kodithic
2
La respuesta correcta, y la única respuesta correcta, está arriba. Insertar cualquier línea de código, incluyendo "Application.EnableCancelKey = xlDisabled" simplemente cambia el problema a otra línea. A menudo, el nuevo 'punto de interrupción' es exactamente la línea que insertó. La única razón por la que no rechazo su respuesta es porque he recurrido a usarla yo mismo, repetidamente, durante la última década.
Nigel Heffernan
6

Encontré que presionar ctrl + break mientras la macro no se estaba ejecutando solucionó el problema.

James
fuente
3

Intentaría las cosas correctivas habituales: - Ejecute el Limpiador de código VBA de Rob Bovey en su Código VBA - elimine todos los complementos en la PC del usuario, en particular los complementos COM y .NET - Elimine todos los archivos .EXD de los usuarios (incompatibilidades de actualización de MSoft) - Ejecute Excel Detectar y reparar en el sistema de los usuarios: compruebe el tamaño del archivo .xlb del usuario (debe ser 20-30K). Reinicie y elimine todos los archivos temporales de los usuarios.

Charles Williams
fuente
2

Gracias a todos por su aporte. Este problema se resolvió eligiendo REPARACIÓN en el Panel de control. Supongo que esto vuelve a registrar explícitamente algunos de los componentes COM nativos de Office y hace cosas que REINSTALL no. Espero que este último solo revise una lista de verificación y, a veces, acepte lo que está allí si ya está instalado, quizás. Luego tuve un problema por separado al registrar mi propio .NET dll para interoperabilidad COM en la máquina del usuario (a pesar de que esto también funciona en otras máquinas), aunque creo que este fue mi error en lugar de Microsoft. Gracias de nuevo, realmente lo aprecio.

Phil Whittington
fuente
2

Me he encontrado con este problema varias veces durante el desarrollo de una aplicación compleja de Excel VBA. A veces, Excel comenzó a romper el objeto VBA al azar. Y el único remedio era reiniciar la máquina. Después de reiniciar, Excel generalmente comenzó a actuar normalmente.

Pronto descubrí que la posible solución a este problema es presionar CTRL + Break una vez cuando la macro NO se está ejecutando. Quizás esto también te pueda ayudar.

bazinac
fuente
2

También tuve este problema al usar Excel 2007 con un libro de trabajo foobar.xlsm (macro habilitado) que obtendría el "Código de ejecución ha sido interrumpido" simplemente tratando de cerrar el libro de trabajo en la X roja en la esquina derecha sin macros ejecutándose en todos, o cualquier formulario "inicializar", libro o macros de hoja de trabajo. Las opciones que obtuve fueron "Finalizar" o "Continuar", la depuración siempre estaba atenuada. Lo hice como un póster anterior sugirió Panel de control-> Programas y características-> haga clic derecho en "Microsoft Office Proffesional 2007" (en mi caso) -> cambio-> reparación.

Esto resolvió el problema para mí. Podría agregar que esto sucedió poco después de una actualización de MS y también encontré un complemento en Excel llamado "Team Foundation" de Microsoft que ciertamente no instalé voluntariamente

Carlito
fuente
1

Me gustaría agregar más detalles a la respuesta de Stan # 2 por las siguientes razones:

  • Enfrenté este problema yo mismo más de una docena de veces y, dependiendo de las condiciones del proyecto, elegí entre la respuesta mágica vudú de Stan n. ° 1 o n. ° 2. Cuando seguí enfrentándolo nuevamente, empecé a preguntarme por qué sucede en primer lugar.

  • También me gustaría agregar una respuesta para usuarios de Mac.

  • Existen limitaciones con estas dos posibles respuestas:

    • si el código está protegido (y no sabes la contraseña) entonces responda # 1 no ayudará.
    • Si el código no está protegido, la respuesta n. ° 2 no le permitirá depurar el código.

  1. Puede ocurrir debido a cualquiera de las siguientes razones:

    • El sistema operativo no asigna recursos del sistema al proceso de Excel. ( Solución: solo hay que iniciar el sistema operativo: la tasa de éxito es muy baja, pero se sabe que funciona muchas veces)

    • El código P es el código intermedio que se usó en Visual Basic (antes de .NET) y, por lo tanto, todavía se usa en VBA. Habilitó un ejecutable más compacto a expensas de una ejecución más lenta. ¿Por qué estoy hablando de código p? Debido a que a veces se corrompe entre ejecuciones múltiples y archivos grandes o simplemente debido a la instalación del software (Excel) se corrompió en alguna parte. Cuando el código p se corrompe. la ejecución del código sigue siendo interrumpida.Solución: En estos casos, se supone que su código ha comenzado a corromperse y lo más probable es que en el futuro su libro de Excel también se corrompa dándole mensajes como "archivo de Excel corrupto y no se puede abrir". Por lo tanto, como una solución rápida, puede confiar en la respuesta n. ° 1 o la respuesta n. ° 2 según sus requisitos. Sin embargo, nunca ignore los signos de corrupción. Es mejor copiar los módulos de código en el bloc de notas, eliminar los módulos, guardar y cerrar el libro de trabajo, cerrar el Excel. Ahora, vuelva a abrir el libro y comience a crear nuevos módulos con el código copiado anteriormente en el bloc de notas.

  2. Usuarios de Mac, prueben cualquiera de las opciones a continuación y definitivamente funcionarán según la arquitectura de su sistema, es decir, el sistema operativo y la versión de Office

    • Ctrl + Pause
    • Ctrl + ScrLk
    • Esc+ Esc(Presione dos veces consecutivas)

Se lo pondrá en modo de interrupción utilizando las combinaciones de teclas anteriores, ya que la macro suspende la ejecución inmediatamente finalizando la tarea actual. Este es el reemplazo del Paso 2.

  1. Solución: para superar la limitación del uso de la respuesta n. ° 1 y la respuesta n. ° 2 , utilizo xlErrorHandlerjunto con la Resumedeclaración en el controlador de errores si el código de error es 18. Luego, la interrupción se envía al procedimiento en ejecución como un error, atrapable por un error controlador configurado con una instrucción On Error GoTo. El código de error capturable es 18. El procedimiento actual se interrumpe y el usuario puede depurar o finalizar el procedimiento. Microsoft advierte que no use esto si su controlador de errores tiene una declaración de reanudación; de lo contrario, su controlador de errores siempre vuelve a la misma declaración. Eso es exactamente lo que queremos en las interrupciones sin sentido no deseadas de la ejecución del código.

jainashish
fuente
0

Mi reputación actual aún no permite publicar esto como un comentario. Solución de Stans para ingresar al modo de depuración, presionar dos veces Ctrl + Break, seguir jugando, guardar resolvió mi problema, pero tengo dos giros inesperados:

  1. La estructura de mi proyecto está protegida con contraseña, por lo que para ingresar al modo de depuración primero tuve que ingresar al modo de desarrollador, hacer clic en la estructura del proyecto e ingresar la contraseña.

  2. Mi proyecto es un archivo de plantilla (.xmtl). Abrí el archivo haciendo doble clic que lo abre como .xml con un "1" al final del nombre del archivo anterior. Arreglé el error según las instrucciones de Stans y lo guardé como ese ... archivo 1.xml. Cuando volví a abrir la plantilla, esta vez como plantilla, y quería aplicar la misma corrección de errores a ese archivo, ¡el error desapareció! No cambié este archivo y todavía no tengo ningún error al ejecutar la Macro. Esto significa para mí que el error no está realmente en el archivo, sino en una configuración (oculta) en Excel.

blablubbb
fuente
-1

El problema ahora parece estar relacionado con el propio Excel

Vuelva a instalarlo y parchelo :) Aparte de eso, es difícil saberlo.

Andy
fuente
Intentamos una reinstalación, aunque el usuario 'olvidó' reiniciar después de que el tipo de soporte hizo sus cosas. Estoy tratando de evitar otra reinstalación de Office, pero esto puede ser inevitable ... Gracias
Phil Whittington