Мне нужно создать сводные таблицы xlPivotTableVersion10 (совместимые с Excel 2003) с помощью макроса, который я запускаю на своем компьютере с Excel 2007. Я запускаю макрос из исходного файла. У меня есть другой файл (WkbVar) с расширением .xls, открытый в [совместимом режиме], в котором я хочу создать несколько сводных таблиц. Мне удалось создать подключение к моей внешней базе данных Access (DOH Location inventory V6), из которой я получаю свой источник данных, а также сводный кеш (ПК) с этим подключением.
Set pc = WkbVar.PivotCaches.Create(SourceType:=xlExternal,
SourceData:=WkbVar.Connections("DOH Location inventory V6") _
, Version:=xlPivotTableVersion10)
With pc
.CreatePivotTable TableDestination:=WksAlertesVar.Range("A9"),TableName:="PivotTable_0", _
DefaultVersion:=xlPivotTableVersion10
End With
Кажется, что сводный кеш создан нормально, но затем я получаю ошибку типа 1004 "приложение, определенное для определения объекта" в строке ".CreatePivotTable [...] DefaultVersion: = xlPivotTableVersion10".
Я пробовал несколько вариантов, и вот краткое изложение того, что я получил:
Версия сводного кеша: = xlPivotTableversion10 + сводная таблица DefaultVersion: = xlPivotTableversion10 => ошибка 1004
Версия сводного кеша: = xlPivotTableversion10 + сводная таблица DefaultVersion: = xlPivotTableversion12 => ошибка 1004
Версия сводного кеша: = xlPivotTableversion12 + сводная таблица DefaultVersion: = xlPivotTableversion10 => 5 ошибка «недопустимый вызов процедуры»
Версия сводного кэша: = xlPivotTableversion12 + сводная таблица DefaultVersion: = xlPivotTableversion12 => работает нормально, но создает сводную таблицу Excel 2007, которая несовместима для фильтров и обновления в xls файлы.
Если я остановлю макрос после создания своего подключения и создаю сводную таблицу вручную, все еще находясь в [режиме совместимости], она будет работать как надо: я получаю сводную таблицу Excel 2003. Это заставляет меня думать, что то, что я пытаюсь сделать, возможно, я просто не могу правильно это кодировать ...
Если у кого-нибудь есть подсказки о том, как создавать сводные таблицы Excel 2003 в файлах xls, но с помощью приложения Excel 2007 и VBA, я был бы очень признателен за ваш обмен знаниями.
С уважением, J.
-------------- редактировать (после комментария Картера)
На самом деле, похоже, есть проблема с использованием внешнего источника для моей сводной таблицы. После небольшого количества поисков и тестов я пришел к следующему решению:
With ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, Version:=xlPivotTableVersion10)
.Connection = Array( )'HERE GOES ALL THE DATA RELATIVE TO MY CONNECTION TO THE ACCESS DATABASE
.CommandType = xlCmdTable
.CommandText = Array( _ 'here is the SQL string to select some data from a specific table I have in my Access database
"SELECT *" & Chr(13) & "" & Chr(10) & "FROM [DOH historique avec libelles] WHERE [DOH historique avec libelles]![Numero Site Gestionnaire] = " & NoSite _
)
.MaintainConnection = False
.CreatePivotTable TableDestination:=ActiveWorksheet.Range("A9"), TableName:="PivotTable_0", DefaultVersion:=xlPivotTableVersion10
End With
когда раньше я сначала добавлял соединение только с информацией «ДАННЫЕ, ОТНОСЯЩИЕСЯ К МОЕМУ СОЕДИНЕНИЮ ...» без параметров .CommandType, .CommandText и т. д.
Я не очень знаком с параметрами соединений, но полагаю, что этот трюк как-то связан с проблемой внешнего источника, выделенной Картером.