Macro actualizar todo el libro

Tengo un libro con una base de datos actualizable y de esta se generan diferentes tablas dinámicas.

Generé una macro con ActiveWorkbook. RefreshAll y al presionar el botón insertado (control de formulario) para actualizar, solo se actualiza la base de datos, pero no las tablas dinámicas. Al presionar nuevamente el botón si se actualiza todo, es decir, debo presionar 2 veces dicho botón para tener la actualización completa del libro.

¿Existe alguna macro que actualice todo el libro al presionar 1 sola vez el botón?

1 respuesta

Respuesta
3

Y si lo pones 2 veces, prueba lo siguiente:

Sub Macro1()
  ActiveWorkbook. RefreshAll
  DoEvents
  ActiveWorkbook. RefreshAll
  DoEvents
End Sub

Hola Dante, es un gusto saludarte. Lamentablemente solo sigue actualizando el libro completo al presionar 2 veces el botón.

Tengo la siguiente instrucción pero debe ser incorporada a la macro cada vez que se genere una nueva tabla dinámica, y la idea es que todo se actualice de una sola vez.

ActiveWorkbook.Sheets("Nombre_Hoja").PivotTables("Tabla dinámica1").PivotCache.Refresh

Prueba lo siguiente:

Sub Macro1()
  Dim sh As Worksheet, tbl As PivotTable
  ActiveWorkbook.RefreshAll
  DoEvents
  For Each sh In Sheets
    For Each tbl In sh.PivotTables
      tbl.PivotCache.Refresh
      DoEvents
    Next
  Next
End Sub

Lamentablemente no funciona, quizás puedo usar: ActiveWorkbook.Sheets("Nombre_Hoja").PivotTables("Tabla dinámica1").PivotCache.Refresh

e ir actualizando la macro en la medida que se agreguen tablas dinámicas.

Revisa en el menú Fórmulas / Opciones para el cálculo, que esté activa la opción Automático.

La opción Automático está activada, aún así la macro se debe ejecutar 2 veces para que funcione.

Lo que pasa es que la actualización de la base todavía no termina y entonces se actualizan las tablas, pero con la información anterior.

Prueba con esta opción:

Application. CalculateUntilAsyncQueriesDone

Sub Macro1()
  Dim sh As Worksheet, tbl As PivotTable
  ActiveWorkbook. RefreshAll
  Application. CalculateUntilAsyncQueriesDone
  DoEvents
  For Each sh In Sheets
    For Each tbl In sh.PivotTables
      Tbl. PivotCache. Refresh
      DoEvents
    Next
  Next
End Sub

Dante muchas gracias por tu paciencia.

Me da el siguiente error:

¿En cuál línea tienes el error?

No deben existir espacios entre el punto y la palabra. CalculateUntilAsyncQueriesDone

(El editor del foro actualiza la puntuación, grrrrrr)

Revisa nuevamente

Sub Macro1()
  Dim sh As Worksheet, tbl As PivotTable
  ActiveWorkbook.RefreshAll
  Application.CalculateUntilAsyncQueriesDone
  DoEvents
  For Each sh In Sheets
    For Each tbl In sh.PivotTables
      tbl.PivotCache.Refresh
      DoEvents
    Next
  Next
End Sub

Revisa que tengas estas referencias (el 12 es la versión, tal vez tienes una versión superior)


También prueba lo siguiente, el "05" es para que espere un intervalo de 5 segundos, puedes aumentar o disminuir, según sea necesario.

Sub Macro1()
  Dim sh As Worksheet, tbl As PivotTable
  ActiveWorkbook. RefreshAll
  Application. CalculateUntilAsyncQueriesDone
  DoEvents
  Application. Wait Now + TimeValue("00:00:05")
  DoEvents
  For Each sh In Sheets
    For Each tbl In sh.PivotTables
      Tbl. PivotCache. Refresh
      DoEvents
    Next
  Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas