• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Draaitabellen met één pivotcache splitsen naar meer caches, en ook andersom

Status
Niet open voor verdere reacties.

Excelbat

Gebruiker
Lid geworden
23 mrt 2012
Berichten
402
Hi there,

Ben al een hele tijd bezig geweest om te voorkomen dat bij het vernieuwen van één draaitabel, de andere draaitabellen tegelijkertijd ook verversen. Na veel gezoek en geprobeer heb ik dit gevonden, en dit zou misschien anderen ook kunnen helpen:

Als je brongegevens in A1:E5 staan, dan moeten er nieuwe naambereiken aangemaakt worden met één rij extra: dus A1:E6 (zie eerste macro hieronder):

Code:
Sub EersteUitTeVoeren() 'Naambereiken aanmaken
    With ActiveWorkbook
        .Names.Add Name:="NaamEen", RefersTo:="=Tabelle1!$A$1:$E$6"
        .Names.Add Name:="NaamTwee", RefersTo:="=Tabelle1!$A$1:$E$6"
        .Names.Add Name:="NaamDrie", RefersTo:="=Tabelle1!$A$1:$E$6"
    End With
End Sub

Code:
Sub TweedeUitTeVoeren() 'Verschillende caches aanmaken
    With ActiveSheet
        .PivotTables("PivotEen").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="NaamEen", Version:=xlPivotTableVersion14)
        .PivotTables("PivotTwee").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="NaamTwee", Version:=xlPivotTableVersion14)
        .PivotTables("PivotDrie").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="NaamDrie", Version:=xlPivotTableVersion14)
    End With
End Sub

Code:
Sub DerdeUitTeVoeren() 'Naambereiken terugzetten naar de oorspronkelijke tabel
    With ActiveWorkbook
        .Names("NaamEen").RefersToR1C1 = "=RawTabel[#All]"
        .Names("NaamTwee").RefersToR1C1 = "=RawTabel[#All]"
        .Names("NaamDrie").RefersToR1C1 = "=RawTabel[#All]"
    End With
End Sub

Code:
Sub PivotStukVoorStukRefreshen() 'Welke pivot gaan we refreshen
    With Sheets("Tabelle1")
        .PivotTables("PivotDrie").PivotCache.Refresh
        .PivotTables("PivotTwee").PivotCache.Refresh
        .PivotTables("PivotEen").PivotCache.Refresh
    End With
End Sub

Met deze codes kan je verschillende caches terugzetten naar één cache. Dus hier werken we precies tegenovergesteld aan wat we hierboven hebben gedaan:

Code:
Sub MeerCacheNaarEen() 'Alle pivots in het hele werkboek koppelen aan zelfde cache
Dim Pt As PivotTable
Dim wks As Worksheet

  For Each wks In ActiveWorkbook.Worksheets
    For Each Pt In wks.PivotTables
        Pt.CacheIndex = Sheets("Tabelle1").PivotTables("PivotEen").CacheIndex
    Next Pt
  Next wks

End Sub

Code:
Sub MeerCacheToOne() 'Een bepaalde pivot koppelen aan een zekere cache
        Sheets("Tabelle1").PivotTables("PivotTwee").CacheIndex = Sheets("Tabelle1").PivotTables("PivotEen").CacheIndex
        Sheets("Tabelle1").PivotTables("PivotDrie").CacheIndex = Sheets("Tabelle1").PivotTables("PivotEen").CacheIndex
End Sub

Code:
Sub MeerCacheToOneDavid() 'Een bepaalde pivot koppelen aan een zekere cache
    For Each PivotTable In Sheets("Tabelle1").PivotTables
        PivotTable.CacheIndex = Sheets("Tabelle1").PivotTables("PivotEen").CacheIndex
    Next PivotTable
End Sub

Code:
Sub NamenTerugzetten() 'Namen terugzetten David VOORZICHTIG: ALLE NAMEN (DUS OOK MET ANDERE BEREIKEN) WORDEN HIER AAN ÉÉN TABEL GEKOPPELD
    For Each Name In ActiveWorkbook.Names
        Name.RefersToR1C1 = "=RawTabel[#All]"
    Next Name
End Sub

Bekijk bijlage PivotDraaiTabelCacheLoskoppelenBereikRenameHernoemenEnCacheWeerVastkoppelen.xlsb

Ik hoop dat iemand hier gebruik van kan maken, want ik heb mezelf een slag in de rondte op google gezocht om uit te vinden hoe dit voor elkaar te krijgen,

Greetz/Excelbat
 
Die extra rij komt me wat gekunsteld voor.

De volgende code maakt drie verschillende pivotcaches aan met dezelfde tabel als bron:
Code:
PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Table1").CreatePivotTable(TableDestination:="Sheet1!R1C1")
PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Table1").CreatePivotTable(TableDestination:="Sheet2!R1C1")
PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Table1").CreatePivotTable(TableDestination:="Sheet3!R1C1")
Dit kun je ook via de userinterface bereiken maar alleen met de Draaitabel wizard. Die is niet standaard geinstalleerd, het kan handig zijn om hem in je Qat te zetten.
 
Hey thanx Frans,

Dank je wel voor je reactie, want het is inderdaad wat gekunsteld. Ik krijg echter op jouw code een compileerfout -> verwacht: =
Ik heb diverse pogingen gedaan om ergens een = tussen te zetten, maar met dezelfde compileerfout.
Kan je me s.v.p. nog effe verder helpen?

Greetz/Excelbat
 
Heb nog wat gegoogled:

Dit wordt 'm dan:

Code:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="RawTabel[#All]").CreatePivotTable TableDestination:="Tabelle1!R10C1", TableName:="PivotTableThreeDrie"

Greetz/Excelbat
 
@Pixcel,

Overigens is jouw code alleen van toepassing op geheel nieuw te vormen draaitabellen. 'Mijn' code koppelt bestaande draaitabellen los van hun caches en koppelt ze weer aan nieuwe separate caches.

Greetz/Excelbat
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan