Buenas,
estoy intentando escribir una macro que me muestre /oculte los datos de ciertas fechas de un gráfico dinámico, pero al ejecutarla me salta el siguiente error: "Se ha producido el error '1004' en tiempo de ejecución: No se puede asignar la propiedad Visible de la clase PivotItems"
El error me salta en la línea dentro del If, ya sea al intentar asignarlo a True o a False. ¿Alguien ha lidiado con esto anteriormente y me puede echar una mano? Os pego el código a continuación:
Public Sub HOT_TOPIC()
Dim titulo1 As String
Dim nombreGRAF1 As String
Dim nombreTAB1 As String
Dim nombreCAM1 As String
Dim fecha_aux As Date
Dim fecha_lim As Date
Dim TABitem As PivotItem
Dim prueba As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
titulo1 = "HOT TOPIC NH90 - " & Date
nombreGRAF1 = "HOT TOPIC NH90"
nombreTAB1 = "Tabla HT NH90"
nombreCAM1 = "FECHA PREV CIERRE"
fecha_lim = DateAdd("ww", 2, Date)
Hoja3.ChartObjects(nombreGRAF1).Chart.ChartTitle.Text = titulo1
Hoja3.ChartObjects(nombreGRAF1).Chart.PivotLayout.PivotFields(nombreCAM1).AutoSort xlManual, nombreCAM1
For Each TABitem In Hoja3.ChartObjects(nombreGRAF1).Chart.PivotLayout.PivotFields(nombreCAM1).PivotItems
fecha_aux = CDate(TABitem.Value)
If fecha_aux <= fecha_lim Then
TABitem.Visible = True
Else
TABitem.Visible = False
End If
Next TABitem
Hoja3.ChartObjects(nombreGRAF1).Chart.PivotLayout.PivotFields(nombreCAM1).AutoSort xlAscending, nombreCAM1
End Sub
Pues no había trasteado con esto antes, pero he intentado replicarlo y he encontrado el error 1004 en dos casos.
Antes de nada, recordar que el error 1004 es un error genérico, no capturado, por lo que no aporta información sobre lo que realmente está pasando.
En mi caso (prueba a ver si es también el tuyo), me hice una tabla con 5 campos (t1, t2, t3, t4 y t5) y con unos cuantos registros. En t1 los registros se llamaban v1, v2, v3... y en el resto de campos tenían valores numéricos aleatorios.
Al principio me lanzaba error en la línea del for each. La razón es que equivoqué el campo. Donde tú pones nombreCAM1 yo puse "v1". El campo se llama "t1", y por eso me lanzaba error.
Una vez subsanado, funcionaba correctamente hasta que llegaba al último valor del campo. Parece ser que no te permite dejar la tabla vacía, por lo que te lanza error si intentas hacer TABItem.Visible= false al último valor que queda en la gráfica.
Mira si es esto y nos comentas.
Un saludo
Gracias Cron,
Sí, algo de eso hay, pero no es lo único que fallaba. Al final conseguí hacerlo funcionar ayer después de darme cabezazos contra la pared un par de horas. Por lo visto, si los valores son fechas no puede asignar la propiedad .Visible al PivotItem. ¿Por qué? Ni idea, pero cambié mi tabla dinámica para que en vez de fechas almacenara diferencia de días como enteros, y el código funcionó perfectamente, tras añadir un pequeño if para saltar el valor "(blank)", y así se queda siempre ese valor activado pero no muestra nada en el gráfico que no tenga que mostrar.
Eso fue ayer, y yo estaba contento como unas castañuelas... Esta mañana he ejecutado de nuevo el código (sin haber cambaido nada) y, ¡sorpresa!: error. Como ha pasado un día desde ayer, la columna de diferencia de días (entre hoy y una fecha preestablecida) ha variado de valores. Pues bien, ejecutándolo paso a paso me he dado cuenta de que el bucle for está leyendo valores de PivotItems actuales intercalados con los valores de PivotItems que tenía ayer... es decir, está leyendo valores que existieron en la tabla dinámica asociada, pero que, tras actualizarla, se supone que ya no existen XD. Es curioso y desesperante al mismo tiempo. ¿Alguien tiene alguna idea de lo que puede estar pasando?
Disculpad por no poner ejemplos de este error más explícitos, pero no tengo el archivo ahora mismo disponible para trastearlo.
Un saludo y gracias de nuevo.
Gracias por comentarlo
Tras darle alguna vuelta más, lo he acabado resolviendo; os dejo aqui mis conclusiones por si sirven de ayuda a alguien :)
El problema estaba en las opciones de la propia tabla dinámica. Seleccionando la tabla dinámica, Opciones > Tabla dinámica > Opciones > pestaña "Datos"
Ahi hay una sección llamada "Mantener los elementos eliminados del origen de datos". En el campo "Número de elementos que desea conservar por campo" hay que seleccionar "Ninguno", para que la macro sólo recorra los datos que está guardando la tabla dinámica actualmente, y no los valores pasados.
No sé si me he explicado bien pero el tema es ese, que estaba cargando datos pasados porque la propia configuración de la tabla dinámica los estaba guardando.
Un saludo,
Un millón de gracias por colgar la solución, me estaba desesperando ya que me ocurría lo mismo.
No acabo de entender estas opciones desastrosas que vienen activadas por defecto, son un infierno.
Muchas gracias otra vez!!
Muchas gracias por tus conclusiones, tenia el mismo error que no resolvia por días.