Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 15
Default Storing Multiple Selected Pivot Table Report Filter Values

Hi - I have a pivot table that uses a large number of report filters.
These report filters each can have multiple selected values.
I would like to be able to capture the selections in the pivot table and store them in a worksheet so that at a later time, a user could reselect all of the specific combinations they made previously without having to reselect each of the report filters and reset them.

Example:
Report Filter 1: Possible Values A,B,C,D,E
Report Filter 2: Possible Values F,G,H,I,J
Report Filter 3: Possible Values K,L,M,N,O

User selected values:
Report Filter 1: A,C,E
Report Filter 2: F,G,I
Report Filter 3: K,L
this would be stored as scenario 1


I'd like scenario 1 to be available after the file has been saved/closed and reopened.

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 15
Default Storing Multiple Selected Pivot Table Report Filter Values

And to make one clarification - the problem I'm really struggling with is how to store the multiple items bit. I get that if a user only selections (all) or makes a unique selection that its pretty straightforward.

I just can't for the life of me figure out a simple way to store the multiple items piece.

One other piece of information - the items in each of the report filters are all unique - although it would be better if I didn't have to depend on this.
  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 73
Default Storing Multiple Selected Pivot Table Report Filter Values

I'm posting here some a code snippet which I use to save complete
pivot table layouts for later restoration on demand:

It won't run since there are quite a lot of other routines required,
but it will illustrate what you are after.

Sub savePT_layout()
Dim objPF As PivotField
Dim intRow As Integer
Dim firstRow As Integer
Dim nRow As Integer
Dim Wn As Worksheet

Dim dataset As Integer
Dim ws As Worksheet
Dim PT As PivotTable
Dim pfItem As PivotItem
Dim c As Range
Dim i As Integer


On Error GoTo savePT_layout_Error

Set PT = getPivotTable
If PT Is Nothing Then
MsgBox "Error: Can't find pivot table on the active sheet!"
Exit Sub
End If
Call AppSwitch(False)
Call EnsureLayoutStoreExists
Set ws = Worksheets(FIELDsheet)
Set Wn = Worksheets(LAYOUTsheet)

nRow = LastCell(Wn).Row + 1
If nRow = 2 Then
dataset = 1
Else
dataset = Wn.Cells(nRow - 1, 1).Value + 1
End If

intRow = LastCell(ws).Row
firstRow = intRow + 1
PT.Parent.Activate
Call AppSwitch(True)
initBar PT.VisibleFields.Count * 10, "save... "
Debug.Print PT.VisibleFields.Count * 10
i = 1
For Each objPF In PT.VisibleFields

Call AppSwitch(True)
objPF.LabelRange.Select
updateBar i * 10
Call AppSwitch(False)
i = i + 1
intRow = intRow + 1

ws.Cells(intRow, 1).Value = dataset
ws.Cells(intRow, 2).Value = objPF.Caption
On Error Resume Next ' for "Data" labels
ws.Cells(intRow, 3).Value = objPF.SourceName
On Error GoTo savePT_layout_Error
' If Left(objPF.Name, 3) = "Sum" Then Stop
Select Case objPF.Orientation
Case xlRowField
ws.Cells(intRow, 4).Value = xlRowField
ws.Cells(intRow, 5).Value = "xlRowField"
ws.Cells(intRow, 6).Value = objPF.Position
ws.Cells(intRow, 7).Value = objPF.VisibleItems.Count
On Error Resume Next ' Data fields don't like this
objPF.Orientation = xlPageField ' temporary pagefield
settings
On Error GoTo savePT_layout_Error
objPF.Orientation = xlRowField ' restore columnfield
settings
objPF.Position = ws.Cells(intRow, 6).Value
ws.Cells(intRow, 10).Value = objPF.TotalLevels
Set c = ws.Cells(intRow, 21)
On Error Resume Next
For Each pfItem In objPF.VisibleItems
c(1, pfItem.Position) = pfItem.Name
Next pfItem
On Error GoTo savePT_layout_Error
If objPF.Name = "ProjectDetailDate" Then
' Stop ' group Debug.Print
g(5)
Else
' Stop
End If
Case xlColumnField
ws.Cells(intRow, 4).Value = xlColumnField
ws.Cells(intRow, 5).Value = "xlColumnField"
ws.Cells(intRow, 6).Value = objPF.Position
ws.Cells(intRow, 7).Value = objPF.VisibleItems.Count
On Error Resume Next ' Data fields don't like this
objPF.Orientation = xlPageField ' temporary pagefield
settings
ws.Cells(intRow, 9).Value =
objPF.CurrentPage.LabelRange.Text
On Error GoTo savePT_layout_Error
objPF.Orientation = xlColumnField ' restore columnfield
settings
objPF.Position = ws.Cells(intRow, 6).Value
ws.Cells(intRow, 10).Value = objPF.TotalLevels
Set c = ws.Cells(intRow, 21)
On Error Resume Next
For Each pfItem In objPF.VisibleItems
c(1, pfItem.Position) = pfItem.Name
Next pfItem
On Error GoTo savePT_layout_Error
Case xlPageField
ws.Cells(intRow, 4).Value = xlPageField
ws.Cells(intRow, 5).Value = "xlPageField"
ws.Cells(intRow, 6).Value = objPF.Position
ws.Cells(intRow, 8).Value = objPF.CurrentPage
ws.Cells(intRow, 9).Value =
objPF.CurrentPage.LabelRange.Text
Set c = ws.Cells(intRow, 21)
objPF.Orientation = xlRowField ' temporary a rowfield
to read it properly
ws.Cells(intRow, 7).Value = objPF.VisibleItems.Count
'PivotItems.Count
On Error Resume Next
For Each pfItem In objPF.PivotItems
If pfItem.Visible = True Then
c(1, pfItem.Position) = pfItem.Name
End If
Next pfItem
On Error GoTo savePT_layout_Error
objPF.Orientation = xlPageField ' restore pagefield
settings
objPF.Position = ws.Cells(intRow, 6).Value
objPF.CurrentPage = CStr(ws.Cells(intRow, 8))
Case xlDataField
ws.Cells(intRow, 4).Value = xlDataField
ws.Cells(intRow, 5).Value = "xlDataField"
ws.Cells(intRow, 6).Value = objPF.Position
ws.Cells(intRow, 8).Value = objPF.Function
' ws.Cells(intRow, 8).Value = objPF.Orientation
Case xlHidden
' ws.Cells(intRow, 5).Value = xlHidden
' ws.Cells(intRow, 6).Value = "xlHidden"
intRow = intRow - 1
End Select
Next objPF
clearBar

' sort by Orientation and 2nd by position
ws.Rows(firstRow & ":" & intRow).Sort _
Key1:=ws.Cells(firstRow, 4), _
Key2:=ws.Cells(firstRow, 6)
' assemble std. Name
setName = ws.Cells(intRow, 2)
Do
intRow = intRow - 1
Select Case ws.Cells(intRow, 4)
Case xlPageField
If ws.Cells(intRow, 8) = "(All)" And ws.Cells(intRow, 7) <
4 Then
For i = 1 To ws.Cells(intRow, 7)
If i = 1 Then
setName = setName & " " & ws.Cells(intRow, 20
+ i)
Else
setName = setName & ", " & ws.Cells(intRow, 20
+ i)
End If
Next i
Else
setName = setName & " " & ws.Cells(intRow, 2) & ":" &
ws.Cells(intRow, 8)
End If
Case Else
If ws.Cells(intRow, 7) < 4 Then
For i = 1 To ws.Cells(intRow, 7)
If i = 1 Then
setName = setName & ", for " &
ws.Cells(intRow, 20 + i)
Else
setName = setName & "-" & ws.Cells(intRow, 20
+ i)
End If
Next i
Else
setName = setName & ", by " & ws.Cells(intRow, 2)
End If
End Select
Loop While ws.Cells(intRow - 1, 1) = dataset

Call AppSwitch(True)
UserFormPT_layout_title.Show
' setName = InputBox("Enter description for pivot table
layout", "Enter description", setName)
If setName < "" Then
Call AppSwitch(False)
Wn.Cells(nRow, 1) = dataset
Wn.Cells(nRow, 2) = setName
Wn.Cells(nRow, 3) = Now()
Wn.Cells(nRow, 4) = PT.Name
Wn.Cells(nRow, 5) = PT.Parent.Name
Wn.Cells(nRow, 6) = PT.PivotCache.Index

Dim ch As Chart
For Each ch In ActiveWorkbook.Charts 'nSheet.ChartObjects
If ch.HasPivotFields Then
If ch.PivotLayout.PivotTable.Name = PT.Name Then
Wn.Cells(nRow, 7) = ch.Name
Wn.Cells(nRow, 8) = ch.Type
Wn.Cells(nRow, 9) = ch.ChartType
Wn.Cells(nRow, 10) = "Chartsheet"
Wn.Cells(nRow, 11) = ch.Name
Wn.Cells(nRow, 12) = ch.HasDataTable
If ch.HasDataTable Then Wn.Cells(nRow, 13) =
ch.DataTable.ShowLegendKey
End If
End If
Next ch
Dim shp As Shape
If Wn.Cells(nRow, 7) = "" Then
Dim nSheet As Worksheet
For Each nSheet In Worksheets
For i = 1 To nSheet.ChartObjects.Count
With nSheet.ChartObjects(i).Chart
If .HasPivotFields Then
If .PivotLayout.PivotTable.Name = PT.Name
Then
Wn.Cells(nRow, 7) = .Parent.Name
Wn.Cells(nRow, 8) = .Type
Wn.Cells(nRow, 9) = .ChartType
Wn.Cells(nRow, 10) = "embedded"
Wn.Cells(nRow, 11) = nSheet.Name
Wn.Cells(nRow, 12) = .HasDataTable
If .HasDataTable Then Wn.Cells(nRow,
13) = .DataTable.ShowLegendKey
End If
End If
End With
Next i
Next nSheet
End If
Else

End If
Call AppSwitch(True)

On Error GoTo 0
Exit Sub

savePT_layout_Error:
clearBar
MsgBox "Error " & err.Number & " (" & err.Description & ") in
procedure savePT_layout of Module Pivot_Layout_Mngr"
End Sub
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Using VBA with Pivot Table Report Filter treesinger101 Excel Programming 0 November 19th 09 10:12 PM
Excel Pivot Table - Sort Report Filter Values Jeff Reese Excel Discussion (Misc queries) 3 September 13th 09 12:30 AM
FRom Pivot table select multiple items under report filter AJ Excel Programming 0 May 29th 09 04:53 PM
Show the item selected from Report Filter in a Pivot Chart Mally Excel Discussion (Misc queries) 3 January 22nd 09 02:02 AM
Pivot table page filter not accepting multiple values. Workaround? jco Excel Worksheet Functions 2 September 25th 05 09:35 PM


All times are GMT +1. The time now is 10:30 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"