PDA

View Full Version : [SOLVED:] Extract pivot table data list table



paynod
08-14-2015, 06:07 AM
I am tring to extract the data from a pivot table, highlighted blue and purple below (without the header), then add it to a list table on another tab. Does anyone have any ideas how I can progress this?....
14164


Sub getData(x As Long)
Dim lo As ListObject
Dim dtData As Worksheet, cData As Worksheet
Dim pvt As PivotTable
Dim data As Range
'Set ws = Worksheets.Add
x = 1
Set dtData = Worksheets("dtData")
Set cData = Worksheets("cData")
Set pvt = dtData.PivotTables(x)
dtData.Activate
pvt.PivotSelect "", xlDataAndLabel, True
Selection.Copy
Worksheets("cData").Activate
Set lo = ActiveCell.ListObject
'lo.ListRows.Add.Range.Cells.PasteSpecial.Value

End Sub

p45cal
08-14-2015, 08:03 AM
try replacing:
pvt.PivotSelect "", xlDataAndLabel, True
with:
pvt.PivotSelect "Date[All]", xlDataAndLabel, True
to select all bar headers.

p45cal
08-14-2015, 09:11 AM
That may not have worked. Perhaps a bit more robust:
Sub getData(x As Long)
Dim lo As ListObject
Dim dtData As Worksheet, cData As Worksheet
Dim pvt As PivotTable
x = 1
Set dtData = Worksheets("dtData")
Set cData = Worksheets("cData")
Set pvt = dtData.PivotTables(x)
cData.Activate
Set lo = ActiveCell.ListObject
If Intersect(pvt.DataBodyRange, pvt.DataLabelRange) Is Nothing Then
Intersect(pvt.TableRange1, pvt.DataBodyRange.EntireRow).Copy lo.ListRows.Add.Range
End If
End Sub
The above copies everything, format and all.
To paste just values:
Sub getData(x As Long)
Dim lo As ListObject
Dim dtData As Worksheet, cData As Worksheet
Dim pvt As PivotTable
x = 1
Set dtData = Worksheets("dtData")
Set cData = Worksheets("cData")
Set pvt = dtData.PivotTables(x)
cData.Activate
Set lo = ActiveCell.ListObject
If Intersect(pvt.DataBodyRange, pvt.DataLabelRange) Is Nothing Then
Set Destn = lo.ListRows.Add.Range
Intersect(pvt.TableRange1, pvt.DataBodyRange.EntireRow).Copy
Destn.PasteSpecial xlPasteValues
End If
End Sub

paynod
08-17-2015, 11:42 PM
Hi P45cal,
Thanks very much. I wasn't sure whether you could use union or intersect with data label or data body range together. Also adding the range to the list was a problem so it really helps to see this code. Thanks again.
Tim