2013-02-25 1 views
3

Мне нужно создать таблицы поворота xlPivotTableVersion10 (совместимый с Excel 2003) с помощью макроса, который я запускаю на своем компьютере с Excel 2007 на нем. Я запускаю макрос из исходного файла. У меня есть другой файл (WkbVar), который является .xls и открыт в [совместимом режиме], в котором я хочу создать несколько сводных таблиц. Мне удалось создать подключение к моей базе данных внешнего доступа (DOH Location inventory V6), из которой я получаю свой источник данных, а также сводный кеш (pc) с этим соединением.VBA создайте сводную таблицу версии 10 в файле xls через Excel 2007

кэш
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 и т. Д.

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

ответ

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

+0

Спасибо, что нашли время, чтобы изучить мой вопрос. Я отредактировал свой вопрос, чтобы сообщить о некоторых изменениях, которые я внес в свой первоначальный код, чтобы решить эту проблему, и я думаю, что это действительно может быть связано с проблемой внутреннего/внешнего источника, о которой вы упоминаете. – user1997216