Actualizar una consulta generada en Excel por Power Query (Obtener y transformar datos) es sencillo, sea cual sea el método que queramos utilizar: interfaz de usuario o VBA.
Si recopilamos los métodos más habituales son:
- Actualizar mediante interfaz de usuario, manualmente:
- Desde el botón desplegable "Actualizar todo" de la ficha Datos
- Opción Actualizar todo (se actualizan todas las consultas y tablas dinámicas del libro)
- Opción Actualizar (se actualiza solo la tabla activa)
- Desde la lista de consultas (Ficha Datos/Consultas y conexiones/Botón derecho sobre la consulta/Actualizar)
- Actualizar automáticamente la consulta configurando la actualización automática desde sus propiedades (Ficha Datos/Consultas y conexiones/Botón derecho sobre la consulta/Propiedades/Actualizar al abrir el archivo o Actualizar cada....x minutos)
- Actualizar mediante una macro con código VBA:
- Para una consulta sería:
- ActiveWorkbook.Connections("Consulta - nombreConsulta").Refresh
- Para todas las consultas sería:
- ActiveWorkbook.RefreshAll
Como comentario para usuarios avanzados, tenemos que decir que en este último caso, a veces, ocurre un problema de sincronización entre el tiempo de actualización de la consulta y el tiempo de ejecución del código VBA.
Problema
Esto es, si una consulta se ejecuta mediante código VBA e inmediatamente después del código VBA de actualización de la consulta hay otro código VBA, este último código NO SE EJECUTA DESPUÉS DE FINALIZADA LA ACTUALIZACIÓN de la consulta, sino que se ejecuta inmediatamente después de INICIADA la actualización de la consulta. En otras palabras:
Cuando se ejecuta la consulta, esta comienza a ejecutarse y tarda un cierto tiempo, pero el código siguiente se ejecuta inmediatamente después y podría ocurrir que la consulta terminara después de que el código siguiente termine. Un ejemplo sería la macro:
Sub miMacro()
ActiveWorkbook.Connections("Consulta - REV").Refresh
ActiveSheet.ListObjects("tbl_REV").Range.AutoFilter Field:=5, Criteria1:="="
End Sub
- La primera línea de código inicia la actualización de la consulta REV
- La segunda línea de código aplica un filtro a la tabla donde se carga la consulta REV
- La consulta termina de actualizarse y se carga sobre la tabla REV, eliminando el filtro aplicado en la línea anterior
Con todo lo anterior, se evidencia el problema: la segunda línea de código queda inutilizada.
Solución
Es simple. Configurar la consulta de forma distinta a como está configurada por defecto: (Ficha Datos/Consultas y conexiones/Botón derecho sobre la consulta/Propiedades/Desactivar la opción Habilitar actualización en segundo plano)
Hola, tengo problemas en excel 2016, pese a que desactivé la actualización en segundo plano, el código sigue ejecutándose aún cuando no terminó la consulta. Probé de otras varias maneras incluyendo esto y tampoco:
ResponderEliminarDim cn As WorkbookConnection
For Each cn In ThisWorkbook.Connections
cn.Ranges(1).ListObject.QueryTable.Refresh BackgroundQuery:=False
next
pero ninguna me funcionó.
No se que te puede ocurrir. En principio, a mi me funciona sin problemas.
ResponderEliminarSaludos
Este comentario ha sido eliminado por el autor.
ResponderEliminarMuchas gracias, funcionó perfecto
ResponderEliminarHola, después de buscar por mil páginas, tu me has dado la solución a mi problema... muchas gracias
ResponderEliminarGracias, gracias, gracias!! Me estaba volviendo loco poniendo pausas en la ejecución y no había manera. He buscado y buscado, y afortunadamente hay quien se molesta en ayudar a los demás. Qué menos que agradecerlo!. Solución sencilla, pero si no te lo dicen, imposible imaginarlo. Lo dicho, un millón de gracias!
ResponderEliminarFunciono perfectamente!
ResponderEliminarMuchas gracias!!! no sabía y era lo que estaba buscando!!!!
ResponderEliminareliminaron el comentario ocupo ayuda gracias
ResponderEliminarSoy Tom Kingsley, ha pasado un tiempo desde que
ResponderEliminarescrito para agradecer al Dr. OHIKHOBO que me ayudó en mi
vida. Me infecté con HERPES SIMPLEX VIRUS en 2016, fui a muchos
hospitales para una cura, pero no había solución, así que estaba pensando cómo puedo
buscar una solución para que mi cuerpo pueda estar bien. Un dia mi tia rosa
Presénteme al Doctor OHIKHOBO después de haber visto tantos testimonios en línea.
sobre su medicación a base de hierbas para curar HERPES y me dio su
correo electrónico: drohikhoboherbalcenter@gmail.com, así que le envié un correo electrónico. Me dijo todo el
cosas que necesitaba hacer y también me dio instrucciones a seguir, que
seguido correctamente. Antes de que supiera lo que estaba pasando después de una semana,
HERPES que estaba en mi cuerpo desapareció. así que si estás teniendo
herpes o cualquier tipo de enfermedad que se enumera a continuación
*DIABETES
*CÁNCER
*CARRERA
*ESTERILIDAD
*ENFERMEDAD DEL CORAZÓN
*VIH
* LLEGAS FRÍAS
*VERRUGAS GENITALES
Y si también quieres cura, también puedes enviarle un correo electrónico a: drohikhoboherbalcenter@gmail.com oa través de su WhatsApp + 1-740-231-2427
Hola. Como se puede actualizar la consulta basada en varias hojas de un mismo archivo , pero que están protegidas. Me informa que primero tendría que desprotegerlas, pero querría automatizarlo con un botón. Gracias
ResponderEliminarEstoy muy interesado en estudiar este sitio https://cursos-gratis.com.es/ pero no sé que curso tomar ¿Me pueden ayudar?
ResponderEliminarMuy buenos datos los que mencionan.
ResponderEliminarSaludos. Gracias por compartir. En mi caso puedo ejecutar y actualizar todas las consultas y tablas dinámicas sin problema con ThiWorkbook.RefreshAll previamente deshabilitando la opción que usted presenta y adiconal agregando un código para que la macro no continue con application.calculateuntilasyncqueriesdone. Mi problema es que no he logrado detectar en la macro que si existe un error en la consulta y la misma no se actualiza (por ejemplo, se eliminó el archivo de origen) la macro se ejecuta normalmente pero por supuesto, no se actualizan los datos por falta de la consulta, y se mantienen los datos de tablas dinamicas y graficos que existían al momento previo. ¿Cómo cree usted que se puede detectar en la macro este error en la consulta? Gracias de antemano si está en su posibilidad sugerir alguna solución.
ResponderEliminar