Saltar al contenido

Copiar un código de un libro y pegarlo en la hoja 3 de otro mediante vba


Jesúsgl

Recommended Posts

publicado

Hola a todos. Tengo un problema con una aplicación en Excel que estoy realizando para mi trabajo. La cuestión es que, en el libro que he creado, he puesto bastante código VBA para automatizar acciones distintas. Entre otras cosas, he colocada código en distintos eventos de una hoja del libro (la hoja 3): en los eventos Whorksheet_change, whorksheet_selectionchange y whorksheet_beforerightclick. Esto funciona todo perfectamente. La cuestión es que se trata de un control horario, por lo que cada compañero que lo utilice, debería  poder guardar los horarios de sus fichajes, por lo que, ponerlo como libro compartido no me parece una buena opción (ya que se guardaría todo, los fichajes de todos ¿no? (si no es así, por favor os agradecería me lo hicierais saber) En principio, la idea era que cada uno tuviese su propia copia en su ordenador y listo, cada cual guarda su libro y arreglado... Pero, si hubiese que modificar el código, o bien lo modifico en el original y que lo vuelvan a copiar (con lo cual perderían los datos guardados) o lo modifico en todos y cada uno de los libros, lo cual es inviable. Se me ocurrió entonces crear dos libros, uno conteniendo todos los códigos y el otro, que sería el que cada uno copiase en su ordenador, "llamaría a estos códigos" mediante:

Workbooks.Open ThisWorkbook.Path & "\Códigolibro.xlsm"  'para localizar el libro independientemente de la unidad en que se encuentre
Application.Run "'códigolibro.xlsm'!abrir"  ' para ejecutar la macro "abrir" de "códigolibro"

Esto funciona bien, pero no puedo hacerlo funcionar en los eventos de las hojas que mencionaba en un principio. Como quiera que se trata de códigos bastante largos en algunos casos, querría tenerlos también en un solo libro. La cuestión es: ¿Sería posible copiar el código de la hoja 3 del libro "códigolibro" y pegarlo en la hoja 3 del libro "Control horario" mediante una macro o un código colocado en el evento auto_open o en el evento activate de la hoja 3 del libro de destino? Y, de ser así, ¿cómo podría hacerlo? Adjunto un ejemplo del código de la hoja 3 que os comentaba...

Gracias a todos por vuestra ayuda

ejemplo.docx

publicado

Necesitas detectar eventos a nivel aplicación, te dejo un archivo con un módulo de clase que permite detectar la mayoría de eventos de una hoja/libro en cualquier libro abierto.

Para probar, abre el adjunto y abre un par de archivos mas, verás que al cambiar de hoja sale un mensaje, es solo un ejemplo del evento Activate. Revisa el módulo de clase AppEvents, selecciona el objeto ExApp en el cuadro de nombres y te aparecerán todos los eventos disponibles a nivel aplicación en el cuadro de eventos.

En el adjunto encontrarás código en ThisWorkbook, en el módulo Macros y en el módulo de clase AppEvents.

 

Eventos a nivel aplicación.xlsm

publicado

Ante todo, gracias por tu pronta respuesta. Pero no entiendo cómo aplicarlo para que me ejecute el código que he puesto como ejemplo y que estaría en otro libro. Lo que intento es que la hoja 3 (o cualquier otra) ejecute el código como si lo tuviese escrito. 

Perdona pero soy muy nuevo en esto del Excel y voy haciendo cositas gracias a la amabilidad de personas como tú que dedican su tiempo a ayudar a los que andamos perdidos...

Gracias una vez más por tu atención

publicado

De hecho estoy mirando si puedo solucionarlo, pero en todos los casos, en la macro "iniciarApp" me lanza el error "Error de compilación: El uso de la palabra clave New no es válido" y me marca el error en la línea remarcada en negrita:

Sub IniciarApp()
Set appEvnts = New AppEvents
Set appEvnts.ExApp = Application
Call auto_open
End Sub
 

Por favor ¿me puedes aclarar este tema?

Muchas gracias por tu ayuda.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.