Ejecutar macro de libro 1 en otro libro de excel

Como puedo ejecutar una macro que esta en el libro 1, pero que esta realice el procecidimiento en un libro distinto.

He visto muchas páginas con preguntas parecidas pero no igual al problema que quiero resolver. Por ejemplo he visto que utilizan el método call o run. Pero esto lo que hace es ejecutar la macro de otro libro. Lo que es distinto a lo que yo quiero que es ejecutar una macro en un libro externo o ejecutar una rutina en un libro externo mediante un userform ubicado en el libro de donde quiero ejecutar la macro.

1 Respuesta

Respuesta
1

[Hola

Pues, tal y como ya viste, la forma de activar una macro de otro libro es usando "Application.Run". Si deseas que esa macro actúe sobre el libro desde el que buscas activarla pues depende de dos cosas:

- Que dicha macro no haga referencia a objeto específicos sino que haga referencia a la hoja activa.

- Que, haga lo que haga dicha macro, los datos y/o disposición de ellos en ambas hojas/libros sea exactamente igual.

Si se cumplen esas dos premisas, pues como ya comenté "Application.Run" es la solución. Ah, no olvidar que necesariamente el archivo de macro debe de estar abierto.

Abraham Valencia

Quisiera saber si me podría ayudar con la siguiente cuestión:

En que cambiara el código de mi userform1 si deseo que las hojas llamadas ("FERRETERIA","MALLAS", "POSTES" Y "TANQUES") de mi libro de excel llamado "SEMITERMINADO", cambian de ubicación a un nuevo libro de excel llamado "FUENTE DE MATERIALES". He tratado de modificar el código para este userform1 ubicado en el libro SEMITERMINADO” pero me sale un error que dice fuera de intervalo.

Los dos libros de excel se ubicaran en un carpeta llamada "construdata" y esta carpeta estará ubicada en el escritorio.

Para ponerlo más en contexto el userform1 hace una búsqueda inteligente en las hojas ("FERRETERIA","MALLAS", "POSTES" Y "TANQUES") de acuerdo a lo que uno escribe el textbox1 o textbox 2. Pero estas hojas necesito que ahora estén, se muevan o se ubiquen en un libro externo y este libro externo para mayor comodidad no haya necesidad de abrirlo o que permanezca oculto cuando se ejecute la búsqueda inteligente.

La verdad no se casi nada de macros y no tengo a alguien que me ayude. He mirado tutoriales, referencias y tratar de aprender el funcionamiento de visual basic pero no he logrado el objetivo final. El código que intento modificar me lo ayudo a armar un experto de todoexpertos el cual le agradezco mucho su colaboración.

Sin embargo voy a dejarle un link de mi archivo y mi correo. MUCHAS GRACIAS por su tiempo Abraham Valencia, cualquier solución que encuentre es de mucha ayuda para mi.

Link: https://1drv.ms/u/s!AjkfMfY_dIaFgg80vxSAqVALbYy8

Correo : [email protected]

[Hola

Mira, lo que pasas es que no necesariamente encontrarás un manual o guía que te diga "como hacer funcionar una macro sobre un libro distinto" o similar, es cuestión de leer y sobre todo entender como funcionan los objetos en Excel y VBA.

Por ejemplo una de tus líneas es:

Cells(i, "B").Value = Sheets(hoja).Cells(fila, "B").Value 

Que es lo mismo que decir:

ActiveWorkBook.ActiveSheet.Cells(i, "B").Value = ActiveWorkBook.Sheets(hoja).Cells(fila, "B").Value 

Si yo quisiera enviar valores a otro libro tendría que hacerlo así:

Workbooks("otrolibro.xlsx").sheets("hojax").Cells(i, "B").Value = ActiveWorkBook.Sheets(hoja).Cells(fila, "B").Value  

Y como ya te dije, necesariamente tendrían que estar ambos archivos abiertos. Por supuesto que un podría tener su propiedad "Visible" en "False".

Entonces, tendrías que modificar todas tus macros, no solo copiar/pegar las hojas a otro archivo, tendrías que verificar todas las referencias tal como te he puesto de ejemplos. Lo otro es que mantengas todo en el mismo archivo pero cuando tus "Userform" estén activos, coloques la aplicación como no visible:

Application.Visible = False

Pero, insisto, es cuestión de seguir leyendo sobre VBA.

Abraham Valencia

Si tiene razón. Pero no se si me hice entender yo no quiero copiar o pegar información a otro libro. Lo que digo es que pasa si las hojas llamadas ("FERRETERIA","MALLAS", "POSTES" Y "TANQUES") desde un principio o antes de ejecutar el userform1 estén en un libro llamado "fuente de materiales" osea hacer referencia a esa información externa. Para ello he intentado modificar el codigo en hoja=workbook("fuente de materiales.xlsm").array("FERRETERIA","MALLAS", "POSTES" Y "TANQUES"). Pero me dice fuera de intervalo o error 9 algo así. He intentado hacer otras cosas pero nada.

[Hola

Claro que te entendí y lo de copiar datos era un ejemplo de como se hace referencia a otros libros. Los mismo es para cualquier objeto.

Sobre lo que intentaste, más que "intuir" en programación hay que leer, saber diferencias un objeto de una propiedad o una cadena de texto, etc., y por ejemplo lo que hace la variable "hoja" es almacenar una matriz (Array) de cadenas de texto, o sea los nombres de las hojas. No almacena objetos Workbook o Sheets.

Entonces, suponiendo que tu "Userform1" está en cualquier libro, que el libro "SEMITERMINADO"está abierto, un cambio así haría que el "USerform1" funcione:

  Set h1 = Workbooks("SEMITERMINADO.xlsm").Sheets(hojas(h))

Ve probando para que se entienda.

Abraham Valencia

Abraham, abraham si me funciono lo que me dijiste, pero el problema es cuando le doy aceptar al botón del userform1 ubicado en el libro "semiterminado". Me podrías ayudar. Mira por favor. Abajo esta el enlace. Es lo único que me falta corregir. Gracias por su tiempo.

https://1drv.ms/u/s!AjkfMfY_dIaFghA05fGGlezSUUoT 

Abraham, abraham ya pude resolver el problema. Hice la referencia como usted me explico y ya me funciona el botón aceptar. Gracias, muchísimas gracias

Aja, excelente, muy bien, nada como hacerlo uno (casi9 solo ¿cierto?

Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas