
У меня есть сводная таблица (Excel 2010). Каждый раз, когда я обновляю данные и делаю обновление, сортировка и фильтры сводной таблицы теряются, соответственно, мне нужно явно изменить фильтр (выбрать все и удалить ненужные).
Есть ли решение этой проблемы?
- Как изменить фильтр через VBA при обновлении сводной таблицы?
- Как изменить сортировку через VBA при обновлении сводной таблицы?
- Как запустить обновление сводной таблицы при изменении данных?
Спасибо заранее. С уважением, Марк.
решение1
Я смог добиться того, чего хотел. Я просто записал сначала макрос, чтобы увидеть детали, к каким объектам и как должен осуществляться доступ. После этого я закончил дело, выполнив некоторую оптимизацию. Пожалуйста, обратитесь к фрагменту кода ниже, возможно, он будет полезен другим.
Что касается порядка, я нашел на форуме совет, что вам следует назначить другой столбец "порядок сортировки" в исходной таблице данных и использовать его как скрытый столбец в сводной таблице, чтобы вы могли определить порядок сортировки с помощью этого поля. Это также не потеряется, когда вы позже измените данные.
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
С уважением Марк