Error: No se puede asignar la propiedad Visible de la clase PivotItems

5 envíos / 0 nuevos
Último envío
Vyrtim
Imagen de Vyrtim
Offline
última acción: Hace 1 mes 1 semana
Nivel 1 - 200 puntos
alta: 13/07/2016 - 09:18
Puntos: 270
Error: No se puede asignar la propiedad Visible de la clase PivotItems

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

 

Cron
Imagen de Cron
Offline
última acción: Hace 18 horas 45 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 10980
Pues no había trasteado con

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

Vyrtim
Imagen de Vyrtim
Offline
última acción: Hace 1 mes 1 semana
Nivel 1 - 200 puntos
alta: 13/07/2016 - 09:18
Puntos: 270
Gracias Cron,Sí, algo de eso

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.

Cron
Imagen de Cron
Offline
última acción: Hace 18 horas 45 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 10980
Gracias por comentarlo

Gracias por comentarlo

Vyrtim
Imagen de Vyrtim
Offline
última acción: Hace 1 mes 1 semana
Nivel 1 - 200 puntos
alta: 13/07/2016 - 09:18
Puntos: 270
Tras darle alguna vuelta más,

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,