Secuencia macro

8 envíos / 0 nuevos
Último envío
Joan M.
Imagen de Joan M.
Offline
última acción: Hace 4 años 7 meses
alta: 12/08/2019 - 11:53
Puntos: 55
Secuencia macro

Buenas tardes,

tengo un libro con unas cuantas hojas que se actualizan automáticamente al abrirlo, a través de conexiones con otros libros de datos.

He preparado una macro, en el Workbook_Open, que me añade la foto de cada empleado en una hoja resumen, en una especie de ranking.

El problema es que esta macro se ejecuta ANTES de la actualización de los datos y no encuentro manera de que se "espere".

Alguna idea?

Muchas gracias de antemano.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Prueba a poner el código en

Prueba a poner el código en otro lugar. En vez del evento Workbook_Open, vete al módulo de la hoja donde tienes los datos y pon el código en el evento Worksheet_Change

De esta manera, se lanzará siempre que cambien los datos.

 

Un saludo

Joan M.
Imagen de Joan M.
Offline
última acción: Hace 4 años 7 meses
alta: 12/08/2019 - 11:53
Puntos: 55
secuencia macro

Muy buenas Cron,

antes que nada, muchas gracias por tu comentario. El problema que tengo es que los cambios no se realizan en la hoja donde tengo la macro, sino en otras que se alimentan a través de conexiones con bases de datos, cuando se abre el libro. Debería poder esperar a ques estas "cargas" finalizaran para ejecutar el código.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Claro, así lo entendí.Cuando

Claro, así lo entendí.

Cuando se terminan de actualizar los datos, se cambia lo que haya que cargar en las hojas con datos.

 

Si siempre hay actualizaciones en alguna hoja, utiliza el evento change de esa hoja para lanzar tu macro, que debería estar en algún módulo.

Joan M.
Imagen de Joan M.
Offline
última acción: Hace 4 años 7 meses
alta: 12/08/2019 - 11:53
Puntos: 55
No sé en qué hoja poner el

No sé en qué hoja poner el código, ya que son 4 lasque se deben actualizar, antes de lanzarlo.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
El código ponlo en un módulo

El código ponlo en un módulo independiente, porque trabajará con varias hojas.

Pero el inicio ponlo en cualquier hoja que tenga datos que se actualicen. Cuántas más probabilidades haya de que algún dato de esa hoja de actualice, mucho mejor.

Ten en cuenta que Excel primero hace la consulta, y luego modifica todas las hojas a la vez.

Joan M.
Imagen de Joan M.
Offline
última acción: Hace 4 años 7 meses
alta: 12/08/2019 - 11:53
Puntos: 55
Vale, primer paso conseguido

Vale, primer paso conseguido.

He puesto el código en el evento Change de una de las páginas que cargan datos, con lo que hemos conseguido que se espere a las descargas.

Ahora lo que sucede es que no se posiciona en la hoja que debe ("ranking gestors") antes de la ejecución, y no sé porqué :

Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("ranking gestors").Select
On Error Resume Next
Dim img As Shape
For Each img In ActiveSheet.Shapes
 img.Delete
Next
Call URLPictureInsert
End Sub

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Pruebas a utilizar Activate

Pruebas a utilizar Activate en vez de Select.

Yo suelo definir un objeto worksheet, le asigno la hoja que necesito, y luego utilizo ese objeto en vez de activesheet.

Dim hoja as worksheet

Set hoja = thisworkbook.sheets("hojaquequiero")

hoja.cells(5,5) = "celda E5"

 

 

Un saludo