Как бороться с этой ошибкой 1004 «невозможно получить свойство visible класса pivotitem» (сводная таблица) в VBA? - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю над книгами с уникальной сводной таблицей в каждой. В данной рабочей книге мне нужно выбрать некоторые элементы в сводном поле, получить результат во второй рабочей книге, затем изменить выбранные элементы, получить новый результат и так далее. Поэтому мой код выглядит следующим образом:

Private Function get_result(mName As String) As Double()
    Dim res() As Double
    Dim pf As PivotField, pi As PivotItem        

    ActiveWorkbook.RefreshAll
    With ActiveSheet.PivotTables("myPivotTable")
        .PivotCache.MissingItemsLimit = xlMissingItemsNone
'        .PivotCache.Refresh 'THIS PART DOESN'T WORK
'        .RefreshTable 'THIS PART DOESN'T WORK 

        Set pf = .PivotFields("myFilter")

' I've already try to put all items to Visible=true to ensure that at least one item is selected
'        For Each pi In pf.PivotItems
'            pi.Visible = True
'        Next pi

        For Each pi In pf.PivotItems
            pi.Visible = InStr(1, pi.name, mName, vbTextCompare) > 0
        Next pi
    End With

'    here I put the data I need in 'res'
End Function

Подпрограмма main похожа на

sub main()
'for each workbooks in the selected folder
    'open a workbook wb
    wb.select
    res1 = get_result(name1)
    res2 = get_result(name2)
    '(...)
    'write the results somewhere
    'close wb
'next workbook
end sub

Я запускаю этот код из другой книги, чем те, которые имеют сводную таблицу. Проблема в том, что иногда Я получаю ошибку 1004 - "невозможно получить свойство visible класса pivotitem" (иногда = часто во время второго запуска с name2, работает на некоторых сводных таблицах, но не на других и т. Д.) c ...).

Я уже видел много похожих проблем на Inte rnet, но до сих пор ничего не исправило.

Обычно ошибка возникает, когда элемент поворота pi является первым, который необходимо отменить выбор.

Спасибо за помощь

...