从数据透视表缓存重新创建源数据

Kuy*_*nda 10 excel vba pivot-table

我试图从使用数据透视表缓存的数据透视表中提取源数据并将其放入空白电子表格.我尝试了以下但它返回应用程序定义或对象定义的错误.

ThisWorkbook.Sheets.Add.Cells(1,1).CopyFromRecordset ThisWorkbook.PivotCaches(1).Recordset
Run Code Online (Sandbox Code Playgroud)

文档表明PivotCache.Recordset是一个ADO类型,所以这应该工作.我确实在引用中启用了ADO库.

有关如何实现这一目标的任何建议?

Kuy*_*nda 12

不幸的是,似乎无法在Excel中直接操作PivotCache.

我确实找到了解决方法.以下代码提取工作簿中找到的每个数据透视表的数据透视表缓存,将其放入新的数据透视表并仅创建一个数据透视表字段(以确保将数据透视表缓存中的所有行合并到总计中),然后触发ShowDetail,它创建一个包含所有数据透视表数据的新工作表.

我仍然希望找到一种直接使用PivotCache的方法,但这可以完成工作.

Public Sub ExtractPivotTableData()

    Dim objActiveBook As Workbook
    Dim objSheet As Worksheet
    Dim objPivotTable As PivotTable
    Dim objTempSheet As Worksheet
    Dim objTempPivot As PivotTable

    If TypeName(Application.Selection) <> "Range" Then
        Beep
        Exit Sub
    ElseIf WorksheetFunction.CountA(Cells) = 0 Then
        Beep
        Exit Sub
    Else
        Set objActiveBook = ActiveWorkbook
    End If

    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With

    For Each objSheet In objActiveBook.Sheets
        For Each objPivotTable In objSheet.PivotTables
            With objActiveBook.Sheets.Add(, objSheet)
                With objPivotTable.PivotCache.CreatePivotTable(.Range("A1"))
                    .AddDataField .PivotFields(1)
                End With
                .Range("B2").ShowDetail = True
                objActiveBook.Sheets(.Index - 1).Name = "SOURCE DATA FOR SHEET " & objSheet.Index
                objActiveBook.Sheets(.Index - 1).Tab.Color = 255
                .Delete
            End With
        Next
    Next

    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 至少在Excel 2010下,行:".Randge("B2").ShowDetail = True"实际上应该是:".Range("A2").ShowDetail = True"(A2而不是B2) (2认同)