
Tengo una tabla dinámica (Excel 2010). Cada vez que actualizo los datos y realizo una actualización, la clasificación y los filtros de la tabla dinámica se pierden respectivamente. Necesito modificar explícitamente el filtro (seleccionar todos y eliminar los que no son necesarios).
¿Alguna solución para esto?
- ¿Cómo puedo cambiar el filtro a través de VBA cuando se actualiza la tabla dinámica?
- ¿Cómo puedo cambiar la clasificación a través de VBA cuando se actualiza la tabla dinámica?
- ¿Cómo puedo activar una actualización de la tabla dinámica cuando cambian los datos?
Gracias de antemano saludos Marcos
Respuesta1
Pude lograr lo que quería. Primero grabé una macro para ver los detalles de qué objetos deben ser accedidos. Luego terminé el asunto haciendo algunas optimizaciones. Consulte a continuación el extracto del código, que puede resultar útil para otros.
Con respecto al orden, encontré en un foro el consejo de que debes asignar otro "orden de clasificación" a otra columna en la tabla de datos de origen y usarla como columna oculta en la tabla dinámica para que puedas definir el orden de clasificación usando ese campo. Este tampoco se perderá cuando cambies los datos más adelante.
Sub Macro1()
On Error GoTo Fehler
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets("Rating").PivotTables(1)
.PivotFields("OWASP 2010").ClearAllFilters
With .PivotFields("OWASP 2010")
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
' uncomment this sectin in case you liek to change the sorting via vba
' 1. sort first the stuff automatically A-Z
'.AutoSort xlAscending, "OWASP 2010"
' 2. move empty values to the end
'If .PivotItems(" ").Position <> .PivotItems.Count - 1 Then
' .PivotItems(" ").Position = .PivotItems.Count - 1
'End If
End With
.PivotFields("Categories").ClearAllFilters
With .PivotFields("Fortify Categories")
If .PivotItems("0").Visible = True Then
.PivotItems("0").Visible = False
End If
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
End With
End With
Application.ScreenUpdating = True
Exit Sub
Fehler:
Application.ScreenUpdating = True
End Sub
saludos marca