Visual Basic para Aplicaciones - Abrir y ejecutar macros automaticamente

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 59
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Manuel (26 intervenciones) el 12/08/2020 16:48:18
Buenas Tardes, como podría crear un libro (LIBRO1)cuya única finalidad es hacer que se ejecuten automáticamente las macros de otro libro (LIBRO2) y una vez esta ejecutándose el LIBRO2 cerrar el LIBRO1 y seguir con el LIBRO2 abierto.
No se si esto se puede hacer o no, el libro 1 lo he creado y me abre y ejecuta las macros del libro 2, pero en cuanto cierro el libro 1 ya no se ejecutan las macros del libro2.
A ver si alguien puede arrojar luz e iluminarme sobre esto, también puede ser que no sea posible esto.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Antoni Masana (498 intervenciones) el 13/08/2020 08:42:43
Puedes:

Abrir el LIBRO1 de forma manual o automática.
Ejecutar una macro de forma manual o automática.
Que a su vez esta abra el LIBRO2.
Que ejecute una o varias macros del LIBRO2.
Cuando finalice de ejecutarse todas las macros cerrar el LIBRO1 y dejar abierto el LIBRO2.

A partir de aquí puedes volver a ejecutar cualquier macro del LIBRO2 de forma manual.

Ejemplo:

Llamas Libro_1_Macro1 llama a Libro2_Macro1 y esta a su vez llama a Libro2_Macro2 cuando finaliza vuelve a Libro2_Macro1 y cuando esta finaliza vuelve a Libro1_Macro1 .

1
Libro1_Macro1 -> Libro2_Macro1 -> Libro2_Macro2 - Libro2_Macro1 -> Libro1_Macro1

Si rompes la cadena cerrando el LIBRO1 ante de que finalicen las macros estas se cierran.
Además cualquier cosa que intentas hacer después de un END o CERRAR un libro no se ejecuta.
Digamos que sería como ejecutar un programa, apagar el ordenador y esperar que el programas se siga ejecutando.

Si explicas más detalladamente que quieres hacer quizás se pueda encontrar una solución.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 59
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Manuel (26 intervenciones) el 13/08/2020 20:53:44
El programa es el de fichajes
Lo que quiero hacer es lo siguiente:
tengo 3 libros:
Libro1 (donde se recogen los fichajes de los trabajadores y que esta en una carpeta compartida para subir los fichajes al libro3) , libro2 (solo sirve para ejecutar automaticamente el libro1) y libro3 (que esta en otro equipo conectado en red y abre el libro1 para recoger los fichajes y gestionarlos).

El libro1 no lo puedo ejecutar automaticamente ya que esta compartido y cuando libro3 lo abre yo solo quiero subir los datos, no que se ejecute.

El libro2 sirve para ejecutar automaticamente el libro 1, lo que quiero hacer es que el libro2 ejecute el libro 1, despues se cierre el libro 2 y pueda seguir trabajando solo con el libro1.
No se si se puede hacer esto, lo pregunto para ver si se puede hacer y como se puede.

Esto lo quiero hacer porque me pasan dos cosas:
- En el libro1, en el segundo fichaje despues de abrirlo, el programa se queda como parado y no recoge el fichaje, tengo que salir del
formulario y volver a entrar y ya funciona correctamente (esto no pasa si ejecuto manualmente el libro y no lo ejecuta automaticamente el
libro2.
-Cuando esta abierto mucho tiempo sin entrar datos, al textbox donde entran los fichajes le tengo que pinchar con el boton izquierdo del
raton para que se active. (Esto ocurre siempre, tanto si ejecuto el libro1 por medio del libro2, como si ejecuto el libro1 manualmente).


Lo he intentado pero ocurre lo siguiente:
Abro el libro2, entonces me ejecuta automaticamente el libro1, despues lo primero que hace cuando ejecuta el libro1 es cerrar el libro2, pero me cierra tambien el libro1.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 59
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Manuel (26 intervenciones) el 13/08/2020 20:56:08
Tambien habia pensado otra cosa, hay algun procedimiento para abrir un libro autoejecutable y que no se ejecuten las macros, solo que abra el libro?
Asi no haría falta tener el libro2 que solo sirve para ejecutar el libro1.
El libro1 lo abriria automaticamente en el equipo donde esta y cuando lo abriera desde el otro equipo con el libro3 no lo ejecutaria y podria recoger los fichajes que se han hecho en el dia en el libro1 con las macros del libro3 desde el otro equipo.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Antoni Masana (498 intervenciones) el 13/08/2020 23:49:20
Veamos que tenemos y que necesitamos.

Tenemos 2 libros:

LIBRO 1 : Recolector de fichajes para su gestión.
LIBRO 3 : Donde se registran los fichajes.

NOTA sobre el Libro 3: cada vez que se registra un fichaje se debe salvar el fichero, los datos introducidos están en memoria y no se bajan a disco hasta que se salva (GUARDAR) manualmente o por macro.

Solo necesitas una macro en el libro 1 que abra el libro 3, copie los datos y lo cierre.
En principio abres el libro 3 solo de lectura y solo tienes que leer, no creo que afecte que este corriendo una macro en ese libro.
Otro opción es realizar una copia del libro 3 antes de abrirlo y borre la copia al terminar.

¿Cuando y como ejecutar la macro?

Siempre esta la opción manual.
La segunda opción depende de si lanzar la macro se hace con el libro 1 abierto o cerrado.

CERRADO

Que seria lo más habitual. Usar el Programador de Tareas que a primera hora de la mañana o de la tarde, siempre que el ordenador este encendido o hibernando y el libro 1 cerrado, abra el Excel, abra el libro 1, ejecute la macro, guarde el libro y lo cierre.
Tiene truco.

ABRIERTO:

Se puede hacer de varias formas, una de ellas es con una macro que se ejecute a una hora determinada realice la copia.
Tiene truco.

La primera opción la tengo para actualizar cada día varios libros de información.
En mi caso actualizo la friolera de 15 libros y utilizo uno que es el que se encarga de actualizar los demás de verificar si alguien lo tiene abierto y enviar un correo de aviso porque en ese caso no se puede actualizar.
En el caso de que se pudiese quedar abierto habría que ver si esta compartido, es decir se puede abrir desde otro ordenador o solo desde uno, porque pasan cosas diferentes si intento abrir un fichero abierto en el mismo PC o en otro PC.

Saludos
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 59
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Manuel (26 intervenciones) el 14/08/2020 10:12:48
Perdona, creo que no me expliqué bien.

El problema con lo que me propones es que el ordenador que tengo abajo en la nave (LIBRO 1) es el que pasa los datos al ordenador de la oficina (LIBRO 3) y yo lo que necesito es que los datos que ha recogido el LIBRO 1 (ordenador de la nave) , sean recogidos a través del LIBRO 3 (ordenador de la oficina)
La jornada no termina siempre a la misma hora, entonces el programarlo a un tiempo determinado no me sirve ya que si lo programo a una hora y ese dia a esa hora no estamos trabajando o ese dia no hemos trabajado no me los recogerá.

Lo que yo hago cada dia es que cuando terminan la jornada todos los trabajadores y han realizado todos los fichajes los recojo desde el ordenador de la oficina y procedo a verificarlos y añadir si falta algún fichaje, por eso el libro compartido es el que tengo en el ordenador de la nave (LIBRO 1), que es donde se insertan los fichajes, el problema es que tengo otro libro para abrir automaticamente el LIBRO 1 (LIBRO 2), porque si abro automáticamente el LIBRO 1 directamente, al abrirlo desde el ordenador de la oficina con el LIBRO 3 se ejecutan las macros y yo solo quiero que se abra para pasar los datos al LIBRO 3, sin ejecutarse.

Lo que quiero saber es si se puede hacer algo para que el LIBRO 1 se abra automáticamente en el ordenador donde reside, que es el de la nave y cuando lo abra desde el LIBRO 3 (ordenador oficina) no se ejecuten automáticamente las macros y asi me evito el LIBRO 2 que solo sirve para ejecutar automáticamente las macros del LIBRO 1, ya que esto creo que esta causando algún problema al tener los dos libros abiertos (LIBRO 1 y LIBRO 2).

O alguna macro en el LIBRO 2 que me permitiera ejecutar automáticamente el LIBRO 1 y después se cerrara solo el LIBRO 2 y seguir trabajando con el LIBRO 1.
Cada vez que se reliza un fichaje se salva el libro, para que no se pierdan fichajes por ejemplo si se va la luz.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Antoni Masana (498 intervenciones) el 14/08/2020 16:27:07
Reconozco que me he hecho un lío con los nombres de los libros, sigo sin saber cuál es el LIBRO1 y el LIBRO3.

Según lo entiendo tienes dos libros:
- NAVE (industrial, no espacial), que es el que recoge los fichajes, es decir cuando la gente ficha se guarda en este libro.
- OFICINA que es en el que trabajas, es decir revisas los fichajes y actualizas si falta alguno.

Desde el libro OFICINA debes traer los fichajes del libro NAVE para posteriormente revisarlos.

Para esto debes ejecutar una macro desde el libro OFICINA que lea el libro NAVE y copie los datos ¿Hasta aquí voy bien?

Vemos como sigue:

En primer lugar, olvidemos lo que propongo y saltemos al siguiente párrafo.

La jornada no termina siempre a la misma hora, entonces el programarlo a un tiempo determinado no me sirve ya que si lo programo a una hora y ese día a esa hora no estamos trabajando o ese día no hemos trabajado no me los recogerá.

Es evidente que si un día no habéis trabajado no recogerá los datos, si no hay no se puede recoger.
Una buena hora es de 2 a 5 de la madrugada para recoger los datos, pero siempre los tendrás para revisar al día siguiente.
¿A qué hora terminan de fichar el día que terminan más tarde? a las 18, las 19, las 20, las 21, etc.
¿A qué hora se finaliza la jornada en la oficina? Si la oficina cierra a las 20h. y ese día a las 21h. están fichando no lo puedes hacer ni a mano.

Aquí me pierdo.

Lo que yo hago cada día es que cuando terminan la jornada todos los trabajadores y han realizado todos los fichajes los recojo desde el ordenador de la oficina y procedo a verificarlos y añadir si falta algún fichaje, por eso el libro compartido es el que tengo en el ordenador de la nave (LIBRO 1), que es donde se insertan los fichajes, el problema es que tengo otro libro para abrir automáticamente el LIBRO 1 (LIBRO 2), porque si abro automáticamente el LIBRO 1 directamente, al abrirlo desde el ordenador de la oficina con el LIBRO 3 se ejecutan las macros y yo solo quiero que se abra para pasar los datos al LIBRO 3, sin ejecutarse.

Dices que recoges los fichajes desde el libro OFICINA ¿Cómo? Y aquí es donde me pierdo, dices tengo otro libro para abrir automáticamente el LIBRO 1 Que entiendo que es el de la NAVE. ¿Qué quiere decir abrir automáticamente? y continua porque si abro automáticamente el LIBRO 1 directamente, al abrirlo desde el ordenador de la oficina con el LIBRO 3 se ejecutan las macros Y aquí me hago un lío.

Veamos si lo entiendo:

- el LIBRO 1, el que está en la nave tiene una macro que se ejecuta al abrirlo. ¿Correcto?
- el LIBRO 3, el que está en la oficina, tiene que abrir el LIBRO 1, leer los datos y cerrarlo sin que se ejecute la macro.

¿Qué hace el LIBRO 2?
¿Como recoges actualmente los fichajes con todo este follón?


Este problema lo he tenido y lo arregle de una forma, pero en tu caso se puede usar la misma u otras muchas.

Te cuento, tengo un libro con una macro que hace cosas, el que no viene a cuento, y quería que al abrir el libro se ejecute la macro, bueno eso es fácil usando el: Workbook_Open o el Auto_Open.

El problema es que la macro tenía que comportarse de forma diferente si una persona humana abría el libro o lo hacia el Programador de Tareas, también sirve para ejecutar o no una macro.

Mi solución: como el Programador de tareas ejecutaba un BAT porque además del Excel hace más cosas antes de abrir el Excel crea un fichero en un sitio determinado, en mi caso en el directorio raíz, abre el Excel y lo primero que hace la macro es mirar si existe dicho fichero y a partir de aquí decide como debe comportarse, cuando finaliza el Excel (la macro sabe que debe cerrar el Excel porque existe la marcha de que se está ejecutando desde el Programador de Tarea, se borra el fichero marca.

En tu caso se puede hacer de varias formas:

- Creando un fichero desde la macro del libro de la oficina
- Que al abrir el libro de la NAVE y ejecutar la primera macro verifique una de estas opciones:
- Existe fichero de MARCA
- En que ordenador esta (Variables de entorno)
- Si se esta ejecutando el libro OFICINA.

Y seguro que hay alguna más que ahora no se me ocurren.

Espero no haberme enrollado mucho. Y ser claro en mis explicaciones
Si no te aclaras puedes enviarme los ficheros y te explico cómo aplicarlo.


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 59
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Manuel (26 intervenciones) el 14/08/2020 19:40:04
A ver si ahora me explico corectamente:

-Tengo dos libros en el ordenador de la nave, que es donde fichan los trabajadores:
-.NAVE: en el que se recogen los fichajes de los trabajadores, tiene las hojas de FICHAJES (donde se graban los fichajes) y
EMPLEADOS (donde se guardan los datos de los empleados). Con sus respectivos formularios y macros.
-.EJECUTABLE: Solo tiene un modulo con Auto_Open para abrir el LIBRO NAVE.

-En el ordenador de la oficina tengo el libro CONTROL que mediante una macro recoge los datos de la hoja FICHAJES del
libro NAVE , los graba en la hoja 2020_FICHAJES del libro CONTROL y a continuacion borra la hoja FICHAJES del libro
NAVE.

En el ordenador de la nave he tenido que crear el libro EJECUTABLE para que ejecute con Auto_Open el libro NAVE, porque si le pongo el Auto_Open al libro NAVE se ejecutan siempre las macros al abrir el libro, da igual que lo abra desde el ordenador de la nave como desde la oficina, y yo cuando abro el libro NAVE desde el libro CONTROL de la oficina no quiero que se ejecuten automaticamente las macros, y cuando abro el libro NAVE desde el ordenador de la nave si quiero que se ejecuten las macros automaticamente, de hay el libro EJECUTABLE que es un ejecutador del libro NAVE cuando abro el libro NAVE en el ordenador de la nave y cuando abro el libro NAVE desde el libro CONTROL de la oficina no se ejecutan las macros ya que el Auto_Open lo tiene el libro EJECUTABLE.

Esto funciona pero da el siguiente problema:

-. Al ejecutar el libro NAVE desde desde el libro EJECUTABLE, en el segundo fichaje el foco no vuelve al textbox donde se
recogen los fichajes y el programa se queda bloqueado y ya no recoge marcajes, tengo que salir de ese formulario y volver a entrar y ya
funciona bien con los siguientes fichajes, yo creo que es porque se quedan abiertos los dos libros NAVE y EJECUTABLE, ya
que si ejecuto manualmente el libro NAVE, solo hay un libro abierto y esto no ocurre.

Por lo cual quisiera saber si se puede abrir y ejecutar el libro NAVE por medio del libro EJECUTABLE y cerrar el libro EJECUTABLE y que no se cierre el libro NAVE para seguir trabajando con el y asi solo tener el libro que me interesa abierto y no tener los dos.
Otra posibilidad seria ponerle el Auto_Open al libro NAVE, no utilizar el libro EJECUTABLE y si hubiera algun codigo que pudiera abrir el libro NAVE desde el libro CONTROL de la oficina saltandose el Auto_Open y que no ejecutara automaticamente las macrosdel libro NAVE.

El programador de tareas no me sirve ya que yo me voy siempre el ultimo, en la oficina estoy solo yo, por lo que cuando se van todos, subo los fichajes del libro NAVE al libro CONTROL de la oficina, apago todos los equipos y me voy (los equipos no se quedan encendidos ni en hibernacion, se quedan apagados).

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Antoni Masana (498 intervenciones) el 14/08/2020 20:05:34
Te voy a enviar unos ejemplos.

Tardo un rato en hacerlos, si no lo hago ahora sera mañana por la mañana.

Saludos.
\\//
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Antoni Masana (498 intervenciones) el 14/08/2020 21:09:18
El fichero adjunto al descomprimirlo debe crear en el raíz un directorio que se llama PRUEBA.

Dentro del directorio hay cuatro fichero Excel.

EJECUTABLE-1.xlsm y EJECUTABLE-2.xlsm son los ficheros de marcajes. si prueba a abrirlos, se abre el formulario.
CONTROL-1.xlsm y CONTROL-2.xlsm son los ficheros que abren el fichero Ejecutable y copia datos.

Si abres el fichero control-2.xlsm y a continuación a abres Ejecutable-2.xlsm veras que no se abre el formulario.

Ahora cierra los ejecutables abre un control y ejecuta la macro, cierraló, abre el otro control y ejecuta la macro.
Son dos formas diferente de hacerlo.
Aún hay más formas de hacerlo, pero en tu caso me gusta más la segunda.

Ya me contaras.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 59
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Manuel (26 intervenciones) el 15/08/2020 09:13:04
gracias, ya lo pruebo y te digo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 59
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Abrir y ejecutar macros automaticamente

Publicado por Manuel (26 intervenciones) el 17/08/2020 12:27:28
Gracias Antoni tampoco me funciona bien, lo voy a dejar asi y si me da alguun error lo solucionare, y al año que viene en tener mas tiempo, intentare hacerlo con visualfoxpro que es un lenguaje mas robusto y no tengo que utilizar Excel para las bases de datos.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar