Página 1 de 1

(RESUELTO) Codigo macro para actualizar una tabla dinámica

Publicado: Mié Oct 23, 2024 11:27 pm
por sincedo
Hola a todos/as:
Tengo instalado LibreOffice cal versión 24.8.2.1
La hoja 1 contiene varios datos. Luego inserte una tabla dinámica y le dí el nombre TDx.
Ahora me gustaría que la tabla dinámica se actualizara automáticamente, al introducir más datos en la hoja 1.
Creo que esto solo es posible mediante macros.
Por favor: Alguien me puede decir el código de la macro que actualice los datos de la tabla dinamica automáticamente, y si es posible como debo hacer para insertar estos códigos. Y si tiene que ser en la hora 1 ( datos ) o en la hora de la tabla dinámica.
Creo que no va ser fácil, al no tener ningún conocimiento sobre macros, pero seguiré intentandolo
Estuve mirando algunos temas ya publicados sobre esto, pero ninguno me soluciono el problema de momento.
Muchas gracias, un saludo

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Mié Oct 23, 2024 11:33 pm
por sincedo
Rectificación error al escribir:
Donde dice "hora 1" es: hoja 1,
Donde dice "hora de la tabla dinámica" es: hoja de la tabla dinámica.

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Jue Oct 24, 2024 5:14 am
por FJCC-ES
Uso OpenOffice pero creo que esta macro funcionará en LibreOffice.
Escribí una macro que busca los datos en Hoja1 y actualiza la tabla dinámica en Hoja2. La búsqueda de datos empieza en la celda Hoja1.A1 y encuentra todas las celdas hasta la primera columna y fila vacía. Es importante que estén vacías las celdas a la derecha y debajo de las celdas que contienen los datos de la tabla dinámica.
La tabla dinámica en el archivo adjunto tiene el nombre Pivot1. Tendrá que cambiar el nombre en la macro antes de usarla en su archivo.
La macro se ejecuta al cambiar cualquier celda en Hoja1. Hice clic derecho en la etiqueta de Hoja1 y seleccioné "Eventos de la hoja".

Código: Seleccionar todo

Sub Main
oHoja1 = ThisComponent.getSheets.getByName("Hoja1")
oCurs = oHoja1.createCursor()
oCurs.gotoStart()
oCurs.collapseToCurrentRegion()
oDatos = oCurs.RangeAddress

oHoja2 = ThisComponent.getSheets.getByName("Hoja2")
oTablas = oHoja2.getDataPilotTables()
oTabla1 = oTablas.getByName("Pivot1")
oTabla1.setSourceRange(oDatos)
oTabla1.refresh()
End Sub

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Jue Oct 24, 2024 10:33 pm
por sincedo
Gracias por la ayuda:
Copie el siguiene codígo
Sub Main
oHoja1 = ThisComponent.getSheets.getByName("Hoja1")
oCurs = oHoja1.createCursor()
oCurs.gotoStart()
oCurs.collapseToCurrentRegion()
oDatos = oCurs.RangeAddress

oHoja2 = ThisComponent.getSheets.getByName("Hoja2")
oTablas = oHoja2.getDataPilotTables()
oTabla1 = oTablas.getByName("Pivot1")
oTabla1.setSourceRange(oDatos)
oTabla1.refresh()
End Sub

Y lo pege según aparece en los archivos adjuntos. Y me da el siguiente error:
Error de ejecución de BASIC
Se ha producido una excepción Type: Con.sun.star.container. No suchElementExcepción
Mesage
Adjunto 4 archivos; Hoja de datos, tabla dinamica, y dos relacionados con la macro
Un saludo

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Jue Oct 24, 2024 10:35 pm
por sincedo
Adjunto otro archivo, por exceso de espacio en la respuesta anterior

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Vie Oct 25, 2024 2:18 am
por FJCC-ES
Si el nombre de la tabla dinámica es TDx, tiene que cambiar esta linea

Código: Seleccionar todo

oTabla1 = oTablas.getByName("Pivot1")
a

Código: Seleccionar todo

oTabla1 = oTablas.getByName("TDx")

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Sab Oct 26, 2024 10:54 pm
por sincedo
Perdona por tanta molestia.
No consigo que se actualice automaticamente los datos de la tabla dinámica.
Al intentar ejecutar me da error en: oToTabla1 = oTablas.getByName("Hoja2")
Hice otra hoja de cálculo con LibreOffice calc, parecida a la que usted me envio. Que consta de dos hojas ( hoja1 contiene los datos), (hoja2 contiene la tabla dinamica) y le pegue la macro que usted me envio, y da el mismo error.
Adjunto tres archivos en PDF donde consta: Hoja1, Hoja2, y fallo de la macro.l
Descargué el archivo que usted me envio, y funciona perfectamente.
Gracias

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Dom Oct 27, 2024 2:49 pm
por FJCC-ES
"Hoja2" es el nombre de la hoja, no de la tabla. ¿Puede subir el archivo de Calc?

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Dom Oct 27, 2024 8:28 pm
por sincedo
Disculpe las molestias.
Adjunto el archivo de Cal
Nombre del archivo: Tabla-Din(2).ods

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Dom Oct 27, 2024 8:53 pm
por FJCC-ES
Ahora la macro funciona y, al cambiar cualquier celda en Hoja1, la tabla dinámica en Hoja2 se actualiza.

Código: Seleccionar todo

Sub Main
oHoja1 = ThisComponent.getSheets.getByName("Hoja1")
oCurs = oHoja1.createCursor()
oCurs.gotoStart()
oCurs.collapseToCurrentRegion()
oDatos = oCurs.RangeAddress

oHoja2 = ThisComponent.getSheets.getByName("Hoja2")
oTablas = oHoja2.getDataPilotTables()
oTabla1 = oTablas.getByName("DataPilot1")
oTabla1.setSourceRange(oDatos)
oTabla1.refresh()
End Sub

Re: Codigo macro para actualizar una tabla dinámica

Publicado: Lun Oct 28, 2024 8:22 pm
por sincedo
Si funciona perfectamente.
Se puede dar por resuelto este tema.
Muchas gracias, y un saludo