Ejecución automática de una macro en un libro excel

31/10/2009 - 21:56 por miguel angel | Informe spam
Estimados amigos:
Tengo una macro grabada en un libro1.xls, que quiero que se me ejecute
automáticamente al abrir el libro.
La verdad es que el libro lo voy a abrir desde una llamada de Access,
pero quiero que lo que va a hacer excel sea transparente para el
usuario, por eso quiero que al abrirse el libro se ejecute la macro.

Gracias de antemano.

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
01/11/2009 - 22:41 | Informe spam
hola, (miguel angel ?) !

Mostrar la cita
no... no me refiero a la macro de excel, si no a esta otra que comentas:

Mostrar la cita
ya que en "mi" access (cualquier version) NO aparece ninguna macro "EjecutarAplicacion", por lo que (supongo...)
se trata de una macro personalizada de la que es necesario conocer el codigo

podrias transcribir el codigo de la macro de access: => "EjecutarAplicacion" (?)

saludos,
hector.
#7 Knight99
01/11/2009 - 23:45 | Informe spam
Héctor Miguel escribió:
Mostrar la cita
En la macros de Access, una de las acciones se llama EjecutarAplicacion.
Yo la he usado varias veces.
Como desconozco si puedo pegar aquí imágenes, he convertido en módulo la
macro que tengo hecha. La he llamado macro1, y sólo me hace 3 acciones:
1.- Establecer advertencias a NO (porque luego le voy a decir que me
ejecute varias consultas y no quiero estar dándole siempre al Aceptar.
2.- Ejecutar Excel, abriéndo directamente el libro en el que he hecho
una macro para tratar un fichero de texto de una forma determinada, y
que enredando y orientado por lo que me dijo Gustavo, efectivamente he
podido hacer un "libro tonto" que me hace lo que quería: nada más
abrirse se ejecuta la macro que me abre y gestiona el fichero de texto y
que lo guarda con el nombre LIQUIDACIONES.XLS.
3.- Por último importo el libro liquidaciones.xls a Access, para hacer
el informe que necesitaba.

El código de la macro de access, una vez guardada como módulo es el
siguiente:

Function Macro1()
On Error GoTo Macro1_Err

DoCmd.SetWarnings False
Call Shell("EXCEL C:\LIQUIDACIONES\ARREGLA.XLS", 1)
DoCmd.TransferSpreadsheet acImport, 8, "CCFF1312",
"C:\LIQUIDACIONES\LIQUIDACION.XLS", True, ""


Macro1_Exit:
Exit Function

Macro1_Err:
MsgBox Error$
Resume Macro1_Exit

End Function



La acción EjecutarAplicacion (en el diseño de la macro de access) sólo
tiene un parámetro, llamado Línea de Comando, y donde escribo lo siguiente:
EXCEL (dejo un espacio) c:\libroquequieroabrir.xls Lógicamente abro el
libro excel donde he grabado la otra macro, la que me abre el fichero de
texto.
Esta acción debe salirte, porque la he usado en varias versiones.
¿Tienes activado que te muestre todas las acciones?

Un saludo.
#8 Héctor Miguel
02/11/2009 - 02:04 | Informe spam
hola, (miguel angel ?) !

1) "la macro" (EjecutarAplicacion) no la encuentro (en ninguna de las versiones)
probablemente la vengas "heredando" de versiones anteriores (?)

2) acerca de access (de plano) me declaro un neofito total y...
no se si una instruccion Shell se quede esperando a que termine el proceso llamado (excel en este caso)
o ejecuta de inmediato la siguiente instruccion (la importacion de los datos generados por excel ?)

3) prueba eliminando primero cualquier libro existente de los que importas (c:\liquidaciones\liquidacion.xls)
y despues compruebas si la informacion importada es actualizada (asumiendo que sea diferente de la anterior ?)

saludos,
hector.

__ OP __
Mostrar la cita
#9 Knight99
02/11/2009 - 18:35 | Informe spam
Héctor Miguel escribió:
Mostrar la cita
1.- Es muy extraño que una de las acciones existentes para hacer una
nueva macro de Access no veas dicha acción. Siempre he hecho
instalaciones limpias y siempre ha estado ahí, como mínimo desde la
versión 2002, que es donde he puesto esta mañana la bbdd, junto a otras
instrucciones del tipo EjecutarCodigo, EjecutarComando, EjecutarSQL,
etc... La única diferencia con la última versión que yo tengo en casa
(que es donde lo hice) es que en el puesto de trabajo donde lo he puesto
al llamar a Excel he tenido que poner la ruta completa del ejecutable de
excel, pero por lo demás... No es que sea una macro en sí, es una de las
muchas acciones que puedo elegir al hacer una macro nueva.

2.- Como bien imaginas la llamada a shell no se para, y me seguía
ejecutando las demás instrucciones de forma inmediata. He pensado poner
un Timer, pero la premura de tiempo para lo que tenía que hacer no me ha
dejado, así que lo he resuelto metiendo un cuadro de mensaje al cual el
usuario tiene que Aceptar. El usuario no se da casi ni cuenta porque
cuando llamo al Excel, como le pone esta tarea en primer plano, hasta
que luego no cierra el excel (sustituyendo el archivo generado en
ejecuciones anteriores) por el nuevo que acaba de generar... Cuando el
usuario vuelve a Access, tiene el mensaje esperándole para que dé
Aceptar. No me di cuenta antes de este hecho porque la primera vez que
ejecuté la macro, al existir ya el fichero llamado liquidacion.xls no se
producía ningún error. Lo ví cuando comprobé que los datos no estaban
actualizados.

3.- No es necesario eliminar dicho libro ya que la nueva generación le
va a dar el mismo nombre, avisándo al usuario de que si lo quiere sustituir.

Muchas gracias por el interés. Si veo que me atasco en la implementación
de un timer (de unos 4 ó 5 segundos +/-) os volveré a dar la lata.

Un saludo.
#10 Héctor Miguel
02/11/2009 - 21:41 | Informe spam
hola, (miguel angel ?) !

1) como te comentaba, soy un completo desconocedor de access :-((

2 y 3) la idea de borrar primero cualquier archivo previo existente podria tener las siguientes ventajas:
a) la macro de excel no se detiene a preguntar al usuario si se sobre-escribe un archivo existente
b) a la macro en access puedes ponerla en un (semi)"endless-loop" hasta que se termine la generacion del archivo en excel
c) con esta tecnica no es necesario investigar/suponer/... cuanto tiempo se necesita para continuar las acciones en access

o... la otra opcion/alternativa es monitorear la accion del Shell hasta que la aplicacion llamada sea terminada (API's de windows)

si cualquier duda... comentas ?
saludos,
hector.

__ OP __
Mostrar la cita
Ads by Google
Search Busqueda sugerida