Выделить все сводные элементы и снять выделение (пусто)

У меня есть сводная таблица с несколькими полями. Одно из полей предназначено для комментариев. Когда я обновляю таблицу, поле комментариев устанавливается только (пустое). Я искал способ сделать сводную таблицу по умолчанию, чтобы не выбирать пробелы, но не удачу.

Я написал код ниже, чтобы снять флажок (пробелы) и выбрать все остальные элементы поворота. Код работает, но работает более 5 минут.

Мы будем очень признательны за любые предложения о том, как ускорить код или как лучше отменить выбор (пробелы) и выбрать все.

`Dim ary As Variant, RVary As Variant
Dim StartTime As Double
Dim SecondsElapsed As Double
StartTime = Timer
ary = Array("CM PSL", "NM PSL", "CQ PSL", "NQ PSL", "CM Country", "NM Country", "CQ Country", "NQ Country", "QTR Summary", "TY PSL", "TY Country")
RVary = Array("CMRVCS", "NMRVCS", "CQRVCS", "NQRVCS")
Application.ScreenUpdating = False
On Error Resume Next
For Each i In ary
Sheets(i).Activate
    For Each j In RVary
        With ActiveSheet.PivotTables("RVCS")
            With .PivotFields(j)
                For k = 2 To .PivotItems.Count
                    .PivotItems(k).Visible = True
                Next k
                .PivotItems(1).Visible = False
            End With
        End With
    Next j
Next i

Erase array1
Erase RVCS

Application.ScreenUpdating = True
Sheets("CM PSL").Select
SecondsElapsed = Round(Timer - StartTime, 2)
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation`

person centurion79b    schedule 29.02.2016    source источник


Ответы (1)


Хорошо, у меня есть решение, которое сокращает время выполнения до 30 секунд. Вот новая петля.

    For Each i In ary
    Sheets(i).Activate
        For Each j In RVary
            ActiveSheet.PivotTables("RVCS").PivotFields(j).ClearAllFilters
            With ActiveSheet.PivotTables("RVCS").PivotFields(j)
                .PivotItems("(blank)").Visible = False
            End With
        Next j
Next i
person centurion79b    schedule 29.02.2016
comment
Вы можете сделать это еще быстрее, 1) не активируя лист (просто удалите эту строку) и 2) добавив следующую строку перед строкой For Each J: PivotTables(RVCS).ManualUpdate = True... затем добавьте это после Next Строка J: PivotTables(RVCS).ManualUpdate = False Это останавливает обновление сводной таблицы до тех пор, пока вы не внесете все свои изменения. - person jeffreyweir; 01.03.2016
comment
Ответ хороший, но вы должны знать о некоторых возможных ошибках. См. здесь более подробный ответ: stackoverflow.com/a/54420639/10908769 - person Asger; 29.01.2019