Я работаю над книгами с уникальной сводной таблицей в каждой. В данной рабочей книге мне нужно выбрать некоторые элементы в сводном поле, получить результат во второй рабочей книге, затем изменить выбранные элементы, получить новый результат и так далее. Поэтому мой код выглядит следующим образом:
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
является первым, который необходимо отменить выбор.
Спасибо за помощь