VBA ejecute el módulo 1, espere hasta que termine, luego ejecute el módulo 2, espere hasta que termine, luego ejecute el módulo 3, espere hasta que termine y luego ejecute el módulo 4.

VBA ejecute el módulo 1, espere hasta que termine, luego ejecute el módulo 2, espere hasta que termine, luego ejecute el módulo 3, espere hasta que termine y luego ejecute el módulo 4.

excel 2019 ventanas

Tengo un libro de trabajo de 4 páginas y cada página tiene un módulo VBA que realiza varias tareas sobre los datos de la hoja de trabajo anterior, por lo que deben ejecutarse uno tras otro, pero SÓLO cuando el anterior haya terminado y en este momento se estén ejecutando manualmente.

Me gustaría tener un único módulo/macro, por razones argumentales, llamado "RunAll", que cuando se hace clic o se invoca realiza la misma tarea.

Módulo 1. Importa y limpia datos de un archivo de texto delimitado en la hoja 1; los datos constan de entre 2000 y 110 000 líneas.

Módulo2. Mira la Hoja 1, selecciona ciertos datos y los formatea en la Hoja 2.

Módulo3. Mira la Hoja 2, selecciona ciertos datos y los formatea en la Hoja 3.

Módulo4. Mira la Hoja 3, selecciona ciertos datos y los formatea en la Hoja 4.

Cada módulo está codificado de tal manera que sabe qué hoja mirar y dónde insertar sus datos.

Esta es una versión muy simplificada para que no se le presente una publicación larga para leer, pero cuando se ejecuta manualmente una tras otra, todas funcionan perfectamente.

Pero si simplemente pruebo un maco que dice:

Call module1
Call module2
Call module3
Call module4

Los datos en algunas hojas se confunden y sospecho que, como algunos módulos tardan más en ejecutarse que otros (módulo1 y módulo2), los otros módulos se ejecutan antes de que todos los datos se importen y formatee correctamente antes de que se hayan completado los anteriores. sus tareas.

Entonces lo que estoy tratando de hacer es...

Call Module1 (and only when it has finished then)

Call Module2 (and only when it has finished then)

Call Module3  (and only when it has finished then)

Call Module4

He realizado numerosas búsquedas en línea para posibles respuestas antes de publicar aquí, pero nada parece satisfacer mis necesidades y una buena parte de lo que encontré se me pasa por la cabeza.

Respuesta1

VBA es de un solo subproceso. Entonces las diferentes llamadas no se ejecutan simultáneamente.

@Mathieu da en el clavo. Si llama a la macro "módulo 1" manualmente con la hoja 1 seleccionada, pero ¿qué sucede cuando la ejecuta manualmente con, digamos, la hoja 2 o 3 seleccionada? Lo principal es codificar las referencias a la hoja n.º.

información relacionada