¿Cerrar y reiniciar Excel en un punto arbitrario al ejecutar una macro?


0

Supongamos que hay una macro example_code en un archivo excel 2016: example_excel.xlsm que tiene mucho código pero no crea archivos externos (todos los cálculos se realizan en example_excel.xlsm.

Tenía curiosidad por saber si hay una manera de:

  1. Romper / pausar el código de ejecución en un momento arbitrario.
  2. Agregue manualmente la siguiente línea en el código que: Ejecuta / llama a una función / sub que:
  3. Guarda el completo example_excel.xlsm estado (incluidas la hoja y la celda que están activadas y seleccionadas, así como las variables / entorno de ejecución de código),
  4. Ciérralo en cualquier punto arbitrario del código, y
  5. Vuelva a abrir el Excel
  6. Continuar ejecutando código example_code desde donde lo dejaste,
  7. Después de eliminar la línea insertada que guarda el estado de Excel,
  8. ya sea al instante
  9. o después de hacer clic en 1 botón / ejecutando 1 macro?

Ya que tengo un código complejo que se ejecuta en instancias de 2 horas mientras se ejecuta Configuraciones programadas múltiples del "solucionador" y mientras soluciono problemas en un estado específico del solucionador, estoy esperando una hora antes de que se produzca / se active ese estado.

Ahora, la solución más fácil sería buscar todos los parámetros, estados de hoja y celda que están presentes en ese estado, almacenarlos en una hoja separada y luego reinicializarlos. Pero eso no permite flexibilidad en la resolución de problemas si se necesita evaluar otro estado, ni es conveniente cuando se usa el objeto .ie que tiene un bucle infinito dentro de él, por ejemplo. el padre tiene un hijo que tiene un artículo que es el padre del niño otra vez (pensé que esto existía, aunque no estoy seguro).

La respuesta difícil es; reescriba / refactorice su código para que sea menos complejo y más perspicaz. Que definitivamente tengo que hacer, sin embargo, incluso cuando se hace eso, una herramienta generalizada para guardar los estados mientras se ejecuta es al menos para mí, deseable.

Intentos hasta ahora: [en edición-será elaborado.] Mi principal dificultad inicial es que no sé cómo ejecutar todos los parámetros / variables si se desconoce la lista de parámetros.

Hasta ahora, dado que el problema original consistía en varias ejecuciones de 2 horas, he escrito un código que copia automáticamente todas las hojas y todos los módulos y formularios desde el Excel actual a un Excel diferente. Eso permite guardar todo excepto las variables dentro del código, ni la activación de la hoja y la celda.

Dado que ese código no se aplica específicamente a un tiempo arbitrario durante un código en ejecución, ni copia las variables utilizadas por excel, considero que el código está fuera de tema, a menos que se solicite lo contrario.

Siento que estoy buscando un enfoque de solución muy limitado, por lo que las sugerencias para buscar opciones diferentes / más amplias para resolver el problema son bienvenidas


No, no hay una forma integrada para eso. VBA no puede almacenar ninguna información entre ejecuciones. Sus únicas opciones son escribir su macro de manera que escriba toda la información relevante en una hoja y la vuelva a leer cuando necesite reanudar la ejecución.
Máté Juhász

Gracias @ MátéJuhász, supongo que no conozco lo suficiente sobre la etiqueta de programación adecuada para comprender por qué esta opción no sería muy efectiva en Excel, pero quizás haya una razón diferente. Tal vez se sugieran algunos entornos de trabajo creativo.
a.t.

"Quizás se sugieran algunos entornos de trabajo creativo", ¿qué espera exactamente? VBA es básicamente un lenguaje de scripting, incluido en Excel para automatizar tareas, y no pretende ser nada más. Tiene su limitación en cuanto al rendimiento y la funcionalidad, por supuesto que puede trabajar alrededor de ellos, pero eso le lleva a escribir muchos códigos.
Máté Juhász

Lo que espero, es que no soy el único que ha tratado de abordar este problema en lugar de solucionarlo. Espero que exista la posibilidad de que alguien lo resolviera para un escenario menos difícil (por ejemplo, uno sin el solucionador podría escribir un código que almacene el estado de manera automática). Información, existe la posibilidad de que esa perspectiva diferente me permita resolver mi problema. Publicaré mi solución al problema más difícil / diferente si encuentro una. Espero que pueda / pueda beneficiar a alguien más después de mí.
a.t.

Todavía no he hecho nada como esto, espero que alguien más lo comparta. De todos modos, deberá seguir este enfoque: escriba en la hoja de cálculo TODAS las variables regularmente o cada vez que cambie, luego, al reanudar, léalas nuevamente y continúe en macro. Estoy seguro de que complicará mucho el código.
Máté Juhász
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.