Gracias de antemano.
Para que la macro se ejecute automaticamente al abrir el archivo lo tienes
que poner en el evento Workbook_Open en la clase "ThisWorkbook" o puedes
llamar el procedumiento auto_open en un modulo comun.
Saludos,
Gustavo
http://masexcel.blogspot.com
===========================================
¡Importante!: Colabora con el grupo.Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias.
===========================================
"miguel angel" escribió:
> 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.
> .
>
> Tengo una macro grabada en un libro1.xls, que quiero que se me ejecute automaticamente 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.
convendria conocer algunos detalles adicionales (de preferencia, +/- exactamente) p.e.
vas a establecer en tu proyecto de access referencias a la libreria de objetos de excel ?
(de esta forma puedes usar constantes de excel "por nombre", de lo contrario debe ser por numero, o sea...)
como piensas instanciar excel desde access ?
- usar algun excel ya abierto con un getobjet(... ?
- abrir un excel exclusivo para tu aplicacion con un createobject(... ?
para que version/es de excel esperas dar soporte ?
- dependiendo de esto, pudiera (NO) ser suficiente usar procedimientos/eventos de apertura
despues de terminados los procesos (en excel)...
- quieres dejar excel a disposicion del usuario ?, o prefieres un mayor control desde access ?
saludos,
hector.
Buenos d�as (por aqu�) Hector:
Te cuento. No voy a llamar a objetos de excel desde access; para mi
proyecto s�lo necesito que Excel me haga el "trabajo sucio", como se
suele decir. Para eso ya he grabado una macro, con todo lo que tiene que
hacer con un fichero determinado.
Determinados ficheros de los que me genera el Host de mi empresa me dan
problemas desde Access (cosa que no entiendo, pero es as�). Aunque los
veo perfectamente con un editor de texto, algunos no puedo importarlos
correctamente. S� que los inform�ticos de host emplean a veces distintos
tipos de 'empaquetado', no s� si ir�n por ah� los tiros.
El caso es que Excel los abre bien, y mi intenci�n para el usuario final
es que excel se encargue de abrir dichos ficheros, que convierta al tipo
de dato correcto lo que necesito y luego lo guarde de una forma
concreta, para luego desde access hacer la importaci�n sin problemas.
No quiero programar, ya que los usuarios finales no saben vba.
Desde Access abrir� el libro usando la instrucci�n correspondiente de la
macro "Ejecutar aplicaci�n" donde en la l�nea de comando pongo el nombre
de la aplicaci�n a ejecutar (en este caso excel) con el libro que tiene
que abrir (ese libro siempre se llama igual, y lo �nico que tiene es una
macro que me abre y me trata un fichero de texto, para luego guardar
dicho fichero de texto con otro nombre y ya en formato excel).
Luego, lo �nico que tengo que hacer para finalizar es que la macro que
tengo en access me importe el fichero excel, con lo que todo est� resuelto.
No s� si con todo este rollo te lo he dejado claro.
Por lo dem�s que me preguntas, aunque la versi�n de excel que tenemos es
la 2007, trabajamos con ella siempre en formato de compatibilidad con
las anteriores. Por el contrario el access que tendr� la aplicaci�n
principal trabaja de forma predefinida como si fuera la versi�n 2000.
Tanto los 2 excel (el que tendr� la macro que me haga el tratamiento del
fichero, como el resultante de dicho tratamiento) quedar�n en una ruta
determinada, pero no ser� necesario, por el usuario, tratarlos, ya que
el que tiene la macro s�lo ser� necesario tocarlo cuando haya que
modificar la macro y el otro s�lo servir� de soporte a la importaci�n en
access.
Un saludo.
dices que no quieres programar... pero hablas de una macro "Ejecutar aplicacion" (???)
podrias transcribir el codigo de esa macro ?
saludos,
hector.
Desde access, con la macros, uno de los comandos del desplegable de
acciones con el que puedo jugar, se llama "EjecutarAplicacion", que es
el que uso para lanzar excel y abrir el fichero donde he grabado la
macro que me trata el fichero de texto. Todo funciona bien, lo que no
quiero es que el usuario final, una vez que haya abierto excel, tenga
que ejecutar �l manualmente la macro que abre, ajusta y convierte el
fichero de texto (podr�a hacerlo con la opci�n ejecutar macro o con la
combinaci�n de teclas abreviadas que le he puesto).
Mi intenci�n es que, cuando se abra la hoja de c�lculo excel, se ejecute
autom�ticamente la macro que he grabado en ella (la que trata el fichero
de texto).
Un saludo H�ctor.
> El codigo de la macro en excel lo genero con la propia grabadora, para ahorrar tiempo...
no... no me refiero a la macro de excel, si no a esta otra que comentas:
> Desde access, con la macros, uno de los comandos del desplegable... con el que puedo jugar, se llama "EjecutarAplicacion"
> que es el que uso para lanzar excel y abrir el fichero donde he grabado la macro que me trata el fichero de texto...
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.
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.
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 __
> 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
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.
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 __
> 1.- Es muy extra�o que una de las acciones existentes para hacer una nueva macro de Access no veas dicha acci�n...
>
> 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... lo he resuelto metiendo un cuadro de mensaje al cual el usuario tiene que Aceptar...