Afhankelijke draaitabel

Status
Niet open voor verdere reacties.

maartenmars

Gebruiker
Lid geworden
29 apr 2008
Berichten
75
Dag mensen,

Ik heb een probleem. Ik heb een draaitabel die alles prima laat zien van 17 afdelingen. Nu wil ik ook graag 17 van deze draaitabellen laten zien die enkel de betreffende afdeling laat zien onder de bijbehorende grafiek. Nu komt er elke keer informatie bij en voegt hij deze informatie automatisch toe aan alle draaitabellen. Nu zou ik graag een macro willen maken dat als ik boven aan in cel a1 "MTD" neerzet hij in alle draaitabellen in de kolom "Year Month" alleen de optie "MTD" weergeeft. En als ik vervolgens de jaarcijfers wil zien, wil ik eigenlijk "YTD" in a1 neerzetten en alle draaitabellen verversen met die data. Nu kan dit makkelijk in excel 2007 met een macro, maar heb ik excel 2003 op werk en wil ik eigenlijk ook nog deze techniek op meer velden toe gaan voegen. Bijvoorbeeld de rij "Company" moet alleen de cel a2 weergeven.

Heb een bestand toegevoegd met het probleem op de tweede sheet "pivot"

Alvast bedankt voor de tijd. Hopelijk heeft iemand een idee of dit mogelijk is in 2003
 

Bijlagen

Informatie tbv PivotTable programmeren

Als je onderstaande code in een module toevoegd in jouw'n voorbeeld bestand. Dan kan je deze code draaien mits de rood aangegeven variabelen kloppen. Ik heb een nieuwe pivottable aangemaakt gezien het feit dat er Items in de PivotField.PivotItems voorkwamen die niet relevenat waren (blank, ""). Onderstaande code geeft weer hoe je de selecties zou kunnen beinvloeden. Nu moet je het echter nog aanpassen naar jouw'n wensen met betrekking tot activering code en toe te passen pivottables.


Code:
Sub pivot_tbl_Change()
Dim PFT As PivotTable
Dim PF As PivotField
Dim PI As PivotItem
Dim PFT_Col As PivotTables

Dim wb As Workbook
Dim ws As Worksheet
Dim rg As Range

On Error GoTo Err_During_Pivot_tbl_Change
'On Error GoTo 0

Set wb = ThisWorkbook
Set ws = wb.Worksheets("Pivots")
Set rg = ws.Range("A1")
Set PFT_Col = ws.PivotTables

'Voor Pivottabel namen kan dit makkelijk zijn:
'For Each PFT In PFT_Col
'    MsgBox PFT.Name
'Next PFT

'Neem aan dat pivottables vaste namen hebben, dan:
Set PFT = PFT_Col.Item([COLOR="red"]"PivotTable2"[/COLOR]) 'Index nr kan ook

'Voor het achterhalen van field namen kan dit makkelijk zijn:
'For Each PF In PFT.PivotFields
'    MsgBox PF.Name
'Next PF
'Neem aan dat variabele naam PivotField naam is, dan:
Set PF = PFT.PivotFields([COLOR="red"]"Month"[/COLOR])

'Voor het achterhalen van field item kan dit makkelijk zijn:
'For Each PI In PF.PivotItems
'    MsgBox PI.Name
'Next PI

'Check of waarde voorkomt in FieldLijst, dan:
Set PI = PF.PivotItems(rg.Value)
'Zorgt ervoor dat de lijst niet leeg komt te staan.
'Anders krijg je een error!
PI.Visible = True

For Each PI In PF.PivotItems
    'Als je dus de waarde van rg als instelwaarde
    'Wilt gebruiken dan kan dat als volgt:
    'Dus komt een waarde niet voor in de lijst, dan creeert dit een
    'error scherm.
    If PI.Name = rg.Value Then
        PI.Visible = True
    Else
        PI.Visible = False
    End If
Next PI

'Kan ook als vorm van functie geschreven worden.
'Opmerking: zorg wel dat de opgegeven range een string value heeft!

'Dit gaat goed
Call Select_PF_item(PF, rg.Value)
'Dit geeft een error!
Call Select_PF_item(PF, "Dit is me grappig")

Exit Sub

Err_During_Pivot_tbl_Change:
    MsgBox "Ging niet goed, verdorie. Check de stappen nogmaals"

End Sub

Function Select_PF_item(PF As PivotField, SelectItem As String)
Dim PFT As PivotTable
Dim PI As PivotItem

On Error GoTo Item_Load_fail

Set PFT = PF.Parent
Set PI = PF.PivotItems(SelectItem)
PI.Visible = True

For Each PI In PF.PivotItems
    'Als je dus de waarde van SelectItem als instelwaarde
    'wilt gebruiken.
    'Zorg er voor dat tenminste één waarde geselecteerd blijft
    'Anders krijg je geen weergave van de pvt en creeer je een error!
    If PI.Name = SelectItem Then
        PI.Visible = True
    Else
        PI.Visible = False
    End If
Next PI

Exit Function

Item_Load_fail:
    MsgBox ("De pivot tabel " & PF.Parent.Name & _
            " heeft voor het veld " & PF.Name & _
            " bezit niet het item " & """" & SelectItem & """" & ".")

End Function

Hopelijk voldoet het aan de wensen. Mocht het niet zo zijn dan hoor ik het wel :P.

Met vriendelijke groet,

Tilly
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan