Поскольку вы не получаете никаких сообщений об ошибках, я считаю, что проблема заключается в том, что вы не создаете никаких «отображаемых элементов» (сводная таблица, сводная диаграмма и т. Д.) , которые используют эту сводную кэш-память. Я сделал некоторое тестирование с кодом. Вы должны быть в состоянии повторить мои результаты с приложенным кодом и настройкой данных, показанной на изображении ниже.
Используя свежую рабочую книгу, добавьте образцы данных в столбец A Листа1, затем добавьте второй лист (Примечание: мой код использует кодовые имена для листов, поэтому, если вы не начинаете с новой книги, вам может потребоваться изменить кодовые имена в присваиваниях переменных листа
В коде у меня есть два места, где я использую MsgBox, чтобы получить количество сводных кешей. Оба после "создания" сводного кэша. Один - до создания сводной таблицы с этим кешем, другой - после.
Когда я запускаю код, первый MsgBox показывает «0»; в то время как второй MsgBox показывает «1».
Хотя я не могу найти документацию по этому явлению; мое предположение следующее:
Чтобы не допустить вздутия файлов Excel, существует автоматизированный процесс, который очищает неиспользуемые сводные кэши, т. Е. Сводные кэши без каких-либо связанных элементов (сводная таблица, сводная диаграмма и т. Д.), И / или предотвращает сводную кэш. от завершения до того, как элемент отображения будет связан с ним.
Поэтому, чтобы полностью создать и завершить сводную кэш-память, по крайней мере один из требуемых элементов отображения также должен быть создан с использованием этой сводной кэш-памяти.
Если по какой-то причине вы действительно не можете создать какой-либо требуемый элемент отображения во время создания сводной кэш-памяти, я предлагаю создать «фиктивный» элемент отображения на очень скрытом листе, который можно удалить после добавления некоторые фактические элементы отображения для этой сводной кэш-памяти. (К вашему сведению: я также пытался создать фиктивный элемент отображения, а затем сразу же удалил его. Это также привело к автоматическому удалению сводной кэш-памяти.)
Sub test()
Set wBk = ThisWorkbook
Set wsh = Sheet1
Set sht2 = Sheet2
fRow = 1
fCol = 1
lRow = 5
lCol = 1
Set kchPivot = wBk.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsh.Range(wsh.Cells(fRow, fCol), wsh.Cells(lRow, lCol)))
MsgBox wBk.PivotCaches.Count 'Does not increment for newly created pivotcache with no associated display items
With kchPivot
.CreatePivotTable TableDestination:=sht2.Range("D3"), TableName:="Performance"
End With
MsgBox wBk.PivotCaches.Count 'Increments for pivotcache now associated with a pivottable
End Sub