Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2012, 03:09   #1
Cave_IAR
Пользователь
 
Регистрация: 12.08.2010
Сообщений: 24
Восклицание Ошибка 1004 при создании PivotCache.Recordset

Добрый день!
Следующий алгоритм должен создавать Recordset из запроса в .accdb базе Access, присваивать его кэшу сводной таблицы и потом строить саму таблицу по нему:
Код:
  Dim rst As ADODB.Recordset
    Dim cnn As ADODB.Connection
    Dim objXL As Excel.Application
    Dim objWB As Excel.Workbook
    Dim objWS As Excel.Worksheet
    Dim objPivC As Excel.PivotCache
    Dim objPivT As Excel.PivotTable
    Dim objPivCh As Excel.Chart
    Dim fld As ADODB.Field
    Dim intCol As Integer
    Dim lngRow As Long
    Set rst = New ADODB.Recordset
    rst.Open strQrName, CurrentProject.Connection
'Запихиваем Эксель в память и создаем новый лист
    Set objXL = New Excel.Application
    Set objWB = objXL.Workbooks.Add
    Set objWS = objWB.ActiveSheet
    objWS.Name = strQrName & "_data"
'Создаем кэш Пивота, засовываем в него рекордсет и создаем пивотную таблицу из этого кэша
    Set objPivC = objWB.PivotCaches.Create(xlExternal, , 4)
    Set objPivC.Recordset = rst
    Set objPivT = objWS.PivotTables.Add(PivotCache:=objPivC, TableDestination:=ActiveSheet.Range("R1C1"), TableName:=strQrName)
'Настройка пивотной таблицы
...
Но на строке
Код:
Set objPivC.Recordset = rst
Выдает ошибку 1004: Application-defined and object-defined error.

Кто подскажет, из-за чего ошибка? Облазил пол-инета, в т.ч. забугорного, - нигде чёткого решения проблемы не нашёл.

Спасибо заранее за помощь!
Cave_IAR вне форума Ответить с цитированием
Старый 25.01.2012, 10:08   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Все же необходимо сначала создать сам объект, а затем в него уже данные впихивать.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 25.01.2012, 12:16   #3
Cave_IAR
Пользователь
 
Регистрация: 12.08.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
Все же необходимо сначала создать сам объект, а затем в него уже данные впихивать.
Какой именно? Впрочем неважно, и objPivC, и rst, и все остальные объявлены в dim'е. И естесственно rst задействует некий запрос под именем strQrName.

Последний раз редактировалось Cave_IAR; 25.01.2012 в 13:55.
Cave_IAR вне форума Ответить с цитированием
Старый 25.01.2012, 20:27   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Cave_IAR Посмотреть сообщение
Какой именно? Впрочем неважно, и objPivC, и rst, и все остальные объявлены в dim'е. И естесственно rst задействует некий запрос под именем strQrName.

выделил +++++ основную Вашу проблему

Код:
Sub start()
Dim rst As ADODB.Recordset
    Dim cnn As ADODB.Connection
    Dim objXL As Excel.Application
    Dim objWB As Excel.Workbook
    Dim objWS As Excel.Worksheet
    Dim objPivC As Excel.PivotCache
    Dim objPivT As Excel.PivotTable
    Dim objPivCh As Excel.Chart
    Dim fld As ADODB.Field
    Dim intCol As Integer
    Dim lngRow As Long
    Set rst = New ADODB.Recordset
    Set cnn = New ADODB.Connection
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
Set cnn = CurrentProject.AccessConnection
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
    rst.Open "select * from Q_TYPEPROBLEM", cnn
'Запихиваем Эксель в память и создаем новый лист
    Set objXL = New Excel.Application
    Set objWB = objXL.Workbooks.Add
    objXL.Visible = True
    Set objWS = objWB.ActiveSheet
    objWS.Name = "TestNameSheet"
'Создаем кэш Пивота, засовываем в него рекордсет и создаем пивотную таблицу из этого кэша
    Set objPivC = objWB.PivotCaches.Create(xlExternal, , 4)
    Set objPivC.Recordset = rst
    
    With objPivC
    .CreatePivotTable TableDestination:=objWS.Range("A1"), _
        TableName:="TestTable"
    End With

End Sub
запрос измените на свой
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 26.01.2012, 00:23   #5
Cave_IAR
Пользователь
 
Регистрация: 12.08.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
выделил +++++ основную Вашу проблему

Код:
Sub start()
Dim rst As ADODB.Recordset
    Dim cnn As ADODB.Connection
    Dim objXL As Excel.Application
    Dim objWB As Excel.Workbook
    Dim objWS As Excel.Worksheet
    Dim objPivC As Excel.PivotCache
    Dim objPivT As Excel.PivotTable
    Dim objPivCh As Excel.Chart
    Dim fld As ADODB.Field
    Dim intCol As Integer
    Dim lngRow As Long
    Set rst = New ADODB.Recordset
    Set cnn = New ADODB.Connection
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
Set cnn = CurrentProject.AccessConnection
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
    rst.Open "select * from Q_TYPEPROBLEM", cnn
'Запихиваем Эксель в память и создаем новый лист
    Set objXL = New Excel.Application
    Set objWB = objXL.Workbooks.Add
    objXL.Visible = True
    Set objWS = objWB.ActiveSheet
    objWS.Name = "TestNameSheet"
'Создаем кэш Пивота, засовываем в него рекордсет и создаем пивотную таблицу из этого кэша
    Set objPivC = objWB.PivotCaches.Create(xlExternal, , 4)
    Set objPivC.Recordset = rst
    
    With objPivC
    .CreatePivotTable TableDestination:=objWS.Range("A1"), _
        TableName:="TestTable"
    End With

End Sub
запрос измените на свой
Ура, спасибо большое) теперь понимаю, что впопыхах изучая Access незаслуженно пропустил тему Connections)
До этого получилось осуществить задуманное только копированием данных из Рекордсета на лист, созданием Сводной таблицы и созданием графика. Теперь, как я понимаю, процесс будет несколько быстрее проходить, особенно для крупных Recordset'ов)
Cave_IAR вне форума Ответить с цитированием
Старый 26.01.2012, 00:53   #6
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

вот тут почитайте, в чем отличие
тынц
и обратите внимание сводную я добавил другим способом.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при создании TclientDataSet antka БД в Delphi 1 03.01.2012 21:38
Ошибка при создании БД alt5000 PHP 12 26.11.2011 18:46
ошибка 1004 при удалении объекта типа Range Red_Garry Microsoft Office Excel 2 26.02.2011 15:12
Ошибка при создании таблицы LAGOX SQL, базы данных 1 28.03.2009 00:46
Ошибка при создании типа Monte-Kristo Помощь студентам 4 04.03.2009 19:51