在excel中使用ado记录集时数据透视缓存问题

在excel中使用ado记录集时数据透视缓存问题,excel,ms-access,vba,pivot-table,Excel,Ms Access,Vba,Pivot Table,我在最后一行遇到运行时错误1004的问题。我将access查询引入excel 2007。我知道记录集是正常的,因为我可以看到字段和数据。我不确定picotcache是在set-ptCache行中创建的。我看到了应用程序,但索引是0。代码如下 Private Sub cmdPivotTables_Click() Dim rs As ADODB.Recordset Dim i As Integer Dim appExcel As Excel.Application

我在最后一行遇到运行时错误1004的问题。我将access查询引入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**

您的Pivot缓存不是名为“ptCache”,它可能是“PivotCache1”之类的。这两种方法中的任何一种都会起作用,前者是首选

Set ptCache.Recordset = rs

Set wkbTo.PivotCaches(1).Recordset = rs

我知道这很古老,但只是一个想法。我注意到您在同一个子例程中声明了两个
rs
变量(一个使用
ADODB
,一个使用
DAO
)。坦率地说,我很惊讶编译器没有为您捕捉到这一点,但我建议尝试其中一种,但不能同时尝试两种(并且由于您正在将
rs
初始化为
ADODB.RecordSet
,您可能应该注释掉
rs=DAO.RecordSet
)。

我认为出现此错误是因为您的“strSQL”太长;使用更简单的strSQL运行代码,但我不知道如何解决长strSQL。

嗨,迪克,不幸的是,这不起作用。以前的版本使用wkbTo给了我相同的错误。PivotCaches(1)给了我超出范围的错误下标。这表明创建ptCache的前一行不起作用?这似乎是事实,但这一行应该会给您一个错误。我手头没有2007,但在2003年,没有数据透视缓存的Create方法,只有Add方法。如果这在2007年仍然是真的,并且你在这条线上隐瞒了错误,那么这就是罪魁祸首。无论如何,我会在2007年尽快查出来。嗨,迪克,这是我发现的一件事。在Excel2007中,没有add方法,但是有一个create方法,看起来是一样的。我一开始添加了,得到了错误438(我想)。此外,我并没有抑制错误。自从我最后一条消息发布后,我将rs转储到电子表格中,没有问题,并从该表中创建了数据透视缓存和数据透视表。但还是很想知道如何创建透视表ado记录集。谢谢您的帮助。它在Excel中工作,但在Access中不起作用。我不知道为什么。你能解释一下你想要完成什么吗?也许我们能找到一个不同的方法。这并不能回答这个问题。一旦你有足够的钱,你将能够;相反-