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.
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
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.
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.
No sé en qué hoja poner el código, ya que son 4 lasque se deben actualizar, antes de lanzarlo.
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.
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
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