Проблема Pivotcache с использованием набора записей ado в excel

У меня проблема с ошибкой выполнения 1004 в последней строке. Я ввожу запрос доступа в Excel 2007. Я знаю, что с набором записей все в порядке, так как я вижу поля и данные. Я не уверен, что picotcache был создан в строке set ptCache. Приложение вижу, но индекс 0. Код ниже...

Private Sub cmdPivotTables_Click()

    Dim rs As ADODB.Recordset
    Dim i As Integer
    Dim appExcel As Excel.Application
    Dim wkbTo As Excel.Workbook
    Dim wksTo As Excel.Worksheet
    Dim str As String
    Dim strSQL As String
    Dim rng As Excel.Range
    Dim rs As DAO.Recordset
    Dim db As DAO.Database
    Dim ptCache As Excel.PivotCache

    Set db = CurrentDb()

    'to handle case where excel is not open
    On Error GoTo errhandler:
    Set appExcel = GetObject(, "Excel.Application")
    'returns to default excel error handling
    On Error GoTo 0
    appExcel.Visible = True
    str = FilePathReports & "Reports SCU\SCCUExcelReports.xlsx"
    'tests if the workbook is open (using workbookopen functiion)
    If WorkbookIsOpen("SCCUExcelReports.xlsx", appExcel) Then
        Set wkbTo = appExcel.Workbooks("SCCUExcelReports.xlsx")
        wkbTo.Save
        'To ensure correct Ratios&Charts is used
        wkbTo.Close
    End If
    Set wkbTo = GetObject(str)
    wkbTo.Application.Visible = True
    wkbTo.Parent.Windows("SCCUExcelReports.xlsx").Visible = True

    Set rs = New ADODB.Recordset
    strSQL = "SELECT viewBalanceSheetType.AccountTypeCode AS Type, viewBalanceSheetType.AccountGroupName AS AccountGroup, " _
                & "viewBalanceSheetType.AccountSubGroupName As SubGroup, qryAmountIncludingAdjustment.BranchCode AS Branch, " _
                & "viewBalanceSheetType.AccountNumber, viewBalanceSheetType.AccountName, " _
                & "qryAmountIncludingAdjustment.Amount, qryAmountIncludingAdjustment.MonthEndDate " _
            & "FROM viewBalanceSheetType INNER JOIN qryAmountIncludingAdjustment ON " _
                & "viewBalanceSheetType.AccountID = qryAmountIncludingAdjustment.AccountID " _
            & "WHERE (qryAmountIncludingAdjustment.MonthEndDate = GetCurrent()) " _
            & "ORDER BY viewBalanceSheetType.AccountTypeSortOrder, viewBalanceSheetType.AccountGroupSortOrder, " _
                & "viewBalanceSheetType.AccountNumber;"
    rs.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic

'    Set rs = db.OpenRecordset("qryExcelReportsTrialBalancePT", dbOpenForwardOnly)

**'**********problem here
    Set ptCache = wkbTo.PivotCaches.Create(SourceType:=XlPivotTableSourceType.xlExternal)
    Set wkbTo.PivotCaches("ptCache").Recordset = rs**

person Paul    schedule 05.05.2010    source источник


Ответы (3)


Ваш Pivot Cache не называется «ptCache», это, вероятно, «PivotCache1» или что-то в этом роде. Любой из них будет работать, первый предпочтительнее.

Set ptCache.Recordset = rs

Set wkbTo.PivotCaches(1).Recordset = rs
person Dick Kusleika    schedule 05.05.2010
comment
Привет Дик, К сожалению, это не сработало. Предыдущая версия дала мне ту же ошибку, использование wkbTo.PivotCaches(1) дало мне индекс ошибки вне допустимого диапазона. Это говорит о том, что предыдущая строка, в которой создается ptCache, не сработала? - person Paul; 05.05.2010
comment
Казалось бы, это так, но это должно дать вам ошибку в этой строке. У меня нет 2007 под рукой, но в 2003 нет метода Create для PivotCaches, только метод Add. Если это все еще верно в 2007 году и вы подавляете ошибки вокруг этой строки, то это будет виновником. В любом случае, я проверю это в 2007 году, как только смогу. - person Dick Kusleika; 05.05.2010
comment
Привет Дик Это была одна вещь, которую я нашел. В Excel 2007 нет метода добавления, но есть метод создания, который выглядит так же. Сначала я добавил и получил ошибку 438 (я думаю). Кроме того, я не подавляю ошибки. И после моего последнего сообщения я без проблем загрузил rs в электронную таблицу и создал сводную кэш-память и сводную таблицу из этого листа. Но все же очень хочется узнать, как создать набор записей ado для сводной таблицы. Спасибо за вашу помощь. - person Paul; 05.05.2010
comment
Он работает в Excel, но не из Access. Я не знаю почему. Можете ли вы объяснить, чего вы пытаетесь достичь, и, возможно, мы сможем найти другой способ. - person Dick Kusleika; 06.05.2010

Я знаю, что это старо, но просто мысль. Я заметил, что вы объявляете две переменные rs (одна использует ADODB, а другая использует DAO) в одной и той же подпрограмме. Откровенно говоря, я удивлен, что компилятор не уловил этого для вас, но я бы предложил попробовать одно или другое, но не оба (а поскольку вы инициализируете rs как ADODB.RecordSet, вам, вероятно, следует закомментировать rs = DAO.RecordSet).

person William    schedule 12.03.2012

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

person MHosseinpour    schedule 17.09.2020
comment
Это не дает ответа на вопрос. Получив достаточную репутацию, вы сможете /comment">прокомментировать любой пост; вместо этого дайте ответы которые не требуют разъяснений от спрашивающего. – Из обзора - person Ankh; 18.09.2020