VBA создает сводную таблицу версии 10 в файле xls через Excel 2007

Мне нужно создать сводные таблицы 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 и т. д.

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


person Justine    schedule 25.02.2013    source источник


Ответы (1)


Я думаю, что фактическое исходное соединение несовместимо - если вы используете xldatabase в качестве источника, он отлично работает:

Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Sheet5!R1C1:R2C3", Version:=xlPivotTableVersion10)

Set pt = pc.CreatePivotTable(Sheet7.[A1], "testpivot1", , xlPivotTableVersion10)

Я знаю, что когда я кодировал сводные таблицы в Excel 2003, вам приходилось вручную настраивать строку подключения сводной таблицы, поэтому я думаю, что это может вызвать ваши проблемы. Я посмотрю, смогу ли я найти старый пример.

person Karter    schedule 12.03.2013
comment
Спасибо, что нашли время изучить мой вопрос. Я отредактировал свой вопрос, чтобы сообщить о некоторых изменениях, которые я внес в свой исходный код для решения проблемы, и я думаю, что это действительно может быть связано с проблемой внутреннего / внешнего источника, о которой вы упоминаете. - person Justine; 19.03.2013