Actualizar hoja sin desbloquearla Excel

Tengo un problema con la hoja protegida que tengo. Como he descrito en el titulo quiero actualizar una tabla sin desprotegerla, he escrito esto en VBA con la información que he visto en esta página pero no he podido solucionar nada. Aquí va el código:

Sub Botón6_Haga_clic_en()
' ACTUALIZAR DATOS
    Hoja2. Unprotect "CONTRASEÑA"
    Worksheets("Hoja2"). RefreshAll
    Hoja2. Protect "CONTRASEÑA"
   

End Sub

gracias de antemano =)

ANA

2 respuestas

Respuesta
1

No se que hace esa macro porque ami no me refresco nada xD ja ja ni con la hoja bloqueada ni con la hoja desbloqueada no se que es que refresca pero bue.. según vi por internet es así

ActiveWorkbook. RefreshAll

Prueba haber si te funciona y me dices de paso para que sirve je je

También tienes a este compa que explica como actualizar tablas dinámicas, no se si es eso lo que buscar pero te dejo el link por las dudas =)

Actualizar tablas dinamicas

Se borro el link =/ va denuevo...

Actualizar tablas dinamicas

hola, he intentado utilizar eso  y también he intentado siguiendo eso cambiar mi código pero no me funciona. Igual es porque no me explicado del todo:

las tablas que tengo son 5 todas están bloqueadas y además tres ocultas. Quiero actualizar como mínimo las dos que no está ocultas pero una de ellas coge los datos de una base de datos Access (no se si eso cambia algo) y la otra es la tabla dinámica de la otra.

Cuando utilizo "refreshall" como 3 están ocultas no actualiza ninguna y como no se como actualizar una tabla que no sea con activesheet pues....

gracias por responder,

ANA

Hola, me preguntaste a ver que hacía el refresh all: Actualiza todos los rangos de datos externos y los informes de tabla dinámica del libro especificado.

Y si que funciona ya que tengo una tabla conectada con una base de datos de Access. Ahora tengo así el código pero sigo teniendo problemas:

Sub actualizar()

ThisWorkbook.Unprotect "CONTRASEÑA"

Hoja1.Visible = xlSheetVisible
Hoja4.Visible = xlSheetVisible
Hoja3.Visible = xlSheetVisible
Hoja1.Unprotect "CONTRASEÑA"
Hoja2.Unprotect "CONTRASEÑA"
Hoja3.Unprotect "CONTRASEÑA"
Hoja4.Unprotect "CONTRASEÑA"
Hoja5.Unprotect "CONTRASEÑA"

ThisWorkbook.RefreshAll

'ActiveSheet.PivotTables("Tabla dinámica1").PivotCache.Refresh
'ActiveSheet.PivotTables("Tabla dinámica3").PivotCache.Refresh
'ActiveSheet.PivotTables("Tabla dinámica4").PivotCache.Refresh
'ActiveSheet.PivotTables("Tabla dinámica5").PivotCache.Refresh
'ActiveWorkbook.Save


'Hoja1.Visible = xlSheetVeryHidden
'Hoja4.Visible = xlSheetVeryHidden
'Hoja3.Visible = xlSheetVeryHidden
'
'ThisWorkbook.Protect "CONTRASEÑA"
'Hoja1.Protect "CONTRASEÑA"
'Hoja2.Protect "CONTRASEÑA"
'Hoja3.Protect "CONTRASEÑA"
'Hoja4.Protect "CONTRASEÑA"
'Hoja5.Protect "CONTRASEÑA"

End Sub

Lo que me pasa es que el refreshAll necesita bastante tiempo para actualizarse y antes de terminar de actualizarse ya pasa a las siguientes línean y como empieza a proteger las hojas pues no acaba actualizando nada.

No se como hacer para que espere hasta que actualice todo y luego siga con el código.

Un saludo,

ANA

Con esta línea

Application. Wait (Now + TimeValue("00:00:05"))

Le dices a excel que espere "x" tiempo para continuar con la macro..

Si la actualización demora que se yo, 1 minuto entonces debajo del refresh escribe esto

Application. Wait (Now + TimeValue("00:01:00"))

para que comience a actualizar, espere un minuto y luego prosiga con el resto de la macro

Antes del "ActiveWorkbook.Save" tendria que ir...

Application. Wait (Now + TimeValue("00:01:00"))
ActiveWorkbook. Save

así le das tiempo a terminar, luego guarda y sigue con el resto de la macro

Hola, cuando estuve mirando en internet también me apareció eso y intenté hacerlo pero no me funcionaba porque creo que para todo el Access incluso el refreshAll por lo que he estado mirando más y al final me he quedado con esto, que funciona perfectamente:

ThisWorkbook.RefreshAll

Application.CalculateUntilAsyncQueriesDone

¡Gracias por la ayuda!

ANA

Respuesta
1

LO que si se es que al inicio de tumacro a ejecutar, coloca esta linea

ActiveSheet. Unprotect "tuclave"

Al final de tu macro coloca

LO que si se es que al inicio de tumacro a ejecutar, coloca esta línea

ActiveSheet. Unprotect "tuclave"

Al final de tu macro coloca

ActiveSheet. Protect "tuclave"

Al ejecutar la macro, primero desprotege la hoja y al termino de la macro la vuelve a proteger

ActiveSheet es la hoja activa al momento de la ejecución de tu macro


                    

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas