Макрос для автоматического изменения фильтра Pivot не работает - PullRequest
0 голосов
/ 29 января 2019

У меня есть отчет с несколькими сводными таблицами, в которых используются производственные данные, заказы и поставки.Я запускаю его ежедневно, а затем меняю фильтры в своем отчете, чтобы выбрать все номера доставки, а затем отменяю выбор пустых номеров доставки.

Другими словами, я выбираю только те заказы, которые содержат номер доставки,Если номер доставки пуст, значит, заказ еще не настроен на отправку.

    ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #").CurrentPage = _
        "(All)"
    With ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #")
        .PivotItems("(blank)").Visible = True
    End With
    ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #").CurrentPage = _
        "(All)"
    With ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #")
        .PivotItems("(blank)").Visible = False
    End With
End Sub

Я хочу, чтобы это произошло и выбрал все номера доставки, кроме пустых номеров доставки.

Screen shot

Похоже, не удалось выбрать "Все", а выбрал только то, что было выбрано накануне.

1 Ответ

0 голосов
/ 29 января 2019

Как показать все PivotItem, кроме пустых

Если для PivotTables().PivotFields().EnableMultiplePageItems установлено значение True, вы не сможете выбрать все PivotItems, установив для PivotFields.CurrentPage значение ="(All)" (хотя макрос-рекордер записывает только это!).

Чтобы выбрать все PivotItems, просто используйте PivotField.ClearManualFilter или PivotField.ClearAllFilters (в PivotField, а не случайно в PivotTable!).После этого вы можете скрыть (отменить выбор) пустых.

With WorkSheet.PivotTables(...).PivotFields(...)
    .ClearManualFilter    ' or ClearAllFilters
    If .PivotItems.Count > 1 Then   ' at least 1 has to remain visible
        .PivotItems("(blank)").Visible = False
    End If
End With

Обработка ошибок
По крайней мере один PivotItem должен оставаться видимым.Вы получите ошибку, если есть только пробелов и вы попытаетесь скрыть их.
Если есть также no пробелов, то вы получите ошибку, которую следуетпоймать с On Error Resume Next, или вы можете сначала перебрать все элементы, чтобы проверить, называется ли один из них «(пустым)».Недостаточно проверить имя последнего PivotItem, например If .PivotItems(.PivotItems.Count).Name = "(blank)", поскольку это не обязательно последняя запись.

Ваш пример должен работать с этим:

With ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #")
    .ClearManualFilter
    If .PivotItems.Count > 1 Then   ' at least 1 has to remain visible
        .PivotItems("(blank)").Visible = False
    End If
End With

Может быть, вам нужно ActiveSheet.PivotTables("PivotTable5").RefreshTable каждый день дополнительно.

И наоборот: как отобразить только пустые сводные элементы

Если были выбраны EnableMultiplePageItems = True и один или несколько, но не пустые , тогда CurrentPage = "(blank)" выдает ошибку.Сначала вы должны включить пустые, либо очистив фильтры, как указано выше, либо добавив видимые пробелы дополнительно, а затем вы можете выбрать страницу только с пустыми:

WorkSheet.PivotTables().PivotFields().PivotItems("(blank)").Visible = True
WorkSheet.PivotTables().PivotFields().CurrentPage = "(blank)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...