Нужен обработчик ошибок или обходной путь – ошибка VBA 1004: невозможно получить свойство PivotItems класса PivotField

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

Я отфильтровываю список статусов из поля «Состояние выпуска клиента», однако, если в тот день, когда я запускаю модуль, бывает так, что в моих данных нет такого статуса, он вызывает ошибку

1004: «Невозможно получить свойство PivotItems класса PivotField».

Вот бит кода, где это может произойти.

With ActiveSheet.PivotTables("PivotTable4").PivotFields( _ "Customer Release Status") .PivotItems("Arrived to Destination Port").Visible = False .PivotItems("Awaiting pick up from WWP warehouse").Visible = False .PivotItems("Completed").Visible = False .PivotItems("Culling shortage after rework").Visible = False .PivotItems("Delivered").Visible = False .PivotItems("Delivered to Sterilization").Visible = False .PivotItems("Destroyed").Visible = False .PivotItems("FREE SAMPLES").Visible = False .PivotItems("Internal Use Only").Visible = False .PivotItems("Left Airport Warehouse").Visible = False .PivotItems("Left Factory").Visible = False .PivotItems("Left Warehouse").Visible = False .PivotItems("Liability").Visible = False .PivotItems("Picked up from factory").Visible = False .PivotItems("Stored in warehouse").Visible = False End With 

До сих пор способ, которым я занимался этим, заключается в том, что, когда я получаю сообщение об ошибке, я иду на отладку, комментирую строку, которая вызвала ошибку, а затем возобновила выполнение кода, и как только она закончится, мне придется вспомнить чтобы вернуться к моему коду, чтобы раскомментировать линию. Конечно, это плохой способ справиться с этим, и я хотел бы что-то построить, чтобы поймать эту ошибку.

В идеале, мой код должен фильтровать статусы в соответствии с моими критериями, и если он не может найти этот конкретный статус, он должен просто игнорировать его и проверять следующий статус.

Каков наилучший способ справиться с этим? Я надеялся, что смогу избежать использования цикла, поскольку они, как правило, занимают много времени, чтобы перебирать мой набор данных (это около 15000 строк), но если это единственный способ, то мне придется это сделать. Может быть, обработчик ошибок? Это, вероятно, будет самым быстрым во время выполнения, но я бы хотел, чтобы обработать только эту ошибку, я не хочу избегать законных ошибок.

Я бы сделал что-то подобное, но опять же его личные предпочтения, такие как ErrorHandler, например, On Error Resume Next могут быть просты в использовании.

 Public Sub ShowHide() Dim arrList() Dim sIter Dim dctList As Object '/ Specify Item Names you want to hide/show arrList = Array("Jan", "Feb", "Mar", "TogaToga") '/ Get a list of available items Set dctList = GetItemList(Sheet3.PivotTables(1).PivotFields("Month")) '/ Loop through and show/hide For Each sIter In arrList If dctList.exists(sIter) Then dctList(sIter).Visible = False '/ Uncomment following line, if you just want to toggle visibility 'dctList(sIter).Visible = Not dctList(sIter).Visible End If Next End Sub Public Function GetItemList(pfield As PivotField) As Object Dim pitem As PivotItem Dim ItemList As String Dim dctTemp As Object Set dctTemp = CreateObject("Scripting.Dictionary") '/Create and return a list of available Pivot Items For Each pitem In pfield.PivotItems If Not dctTemp.exists(pitem.Name) Then dctTemp.Add pitem.Name, pitem End If Next Set GetItemList = dctTemp End Function 

введите описание изображения здесь

  • Итерирование через элементы в столбце сводной таблицы
  • PivotCaches.create с SourceData, превышающим 65535 строк.
  • Excel VBA - Обобщение исходных данных / диапазона
  • VBA - копирование информации в новую книгу
  • Неверный вызов процедуры или аргумент при создании сводной таблицы
  • excel vba - как скопировать все поля в сводной таблице в другие ячейки на одном листе
  • Excel 2010: Как изменить исходные данные сводной таблицы без отключения слайсеров?
  • Как сделать динамическую ссылку на значение сводной таблицы?
  • Excel VBA Filter сводная таблица на основе диапазона ячеек
  • Уже есть данные в (Pivot TableName)
  • Изменение источника данных сводной таблицы в VBA
  • Давайте будем гением компьютера.