2010-05-05 1 views
1

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

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** 

ответ

0

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

Set ptCache.Recordset = rs 

Set wkbTo.PivotCaches(1).Recordset = rs 
+0

HI Dick, К сожалению, это не сработало. Первая версия дала мне ту же ошибку, используя wkbTo.PivotCaches (1), дал мне индекс ошибок вне диапазона. Это говорит о том, что предыдущая строка, в которой создается ptCache, не работает? – Paul

+0

Это похоже на случай, но это должно дать вам ошибку на этой строке. У меня нет 2007 года, но в 2003 году нет метода Create для PivotCaches, а только метода Add. Если это все еще верно в 2007 году и ваши подавления ошибок вокруг этой линии, то это будет виновником. В любом случае, я проверю его в 2007 году, как только смогу. –

+0

Hi Dick Это была одна вещь, которую я нашел. В excel 2007 нет метода добавления, но есть метод create, который выглядит одинаково. Я добавил сначала и получил ошибку 438 (я думаю). Кроме того, я не подавляю ошибки. И поскольку мое сообщение laast, я сбрасывал rs на электронную таблицу без проблем и создавал сводчатый и сводный из этого листа. Но все же очень хочется знать, как создать сводный набор записей сводной таблицы. Спасибо за вашу помощь. – Paul

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^