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)
| 归档时间: |
|
| 查看次数: |
19166 次 |
| 最近记录: |