Avatar billede it-dyret Nybegynder
12. marts 2003 - 01:17 Der er 15 kommentarer og
1 løsning

VBA - pivottabel med SourceType:=xlPivotTable

Hej!

Jeg arbejder i øjeblikket med et regneark, hvor jeg genererer en masse pivottabeller med samme datakilde via VBA:

Jeg gør i øjeblikket som følger ved første pivottabel, hvor resSet er et navngivet område:

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=resSet).CreatePivotTable      TableDestination:=Worksheets("Ark1").range("B2"), TableName:="Pivottabel1"

For at gøre filerne lidt lettere, vil jeg gerne have samtlige efterfølgende pivottabeller til at basere sig på den første. Men følgende kode giver en runtime error:

ActiveWorkbook.PivotCaches.Add(SourceType:=xlPivotTable, SourceData:="Pivottabel1").CreatePivotTable      TableDestination:=Worksheets("Ark1").range("B20"), TableName:="Pivottabel2"

Hvad er der galt, og hvad er den korrekte VBA-kode for at basere en pivottabel på en anden?
Avatar billede bak Forsker
12. marts 2003 - 10:57 #1
Hvad der går galt er jeg ikke rigtig klar over, men test lige det her istedet:
ActiveSheet.PivotTableWizard SourceType:=xlPivotTable, SourceData:= _
        "PivotTable1", TableDestination:="Ark1!R20C2", _
        TableName:="PivotTable2"
Avatar billede it-dyret Nybegynder
12. marts 2003 - 12:25 #2
Som udgangspunkt fungerer det, men der er bare det problem (som ved andet kode optaget med macro-optageren), at det forudsætter, at arket er aktiveret. Det vil jeg MEGET gerne undgå, da det afvikler koden væsentlig hurtigere, hvis et andet ark er aktiveret. Performance lider væsentlig, hvis der samtidig skal opdateres skærmbillede...
Avatar billede bak Forsker
12. marts 2003 - 14:06 #3
Jeg er ikke helt med. Arket behøver da ikke være aktiveret (det behøver jo ikke være activesheet) og at oprette en pivot via pivottablewizard er lige så hurtigt som det andet.
Min kodestump er jo bare et eksempel.
Avatar billede bak Forsker
12. marts 2003 - 14:20 #4
Denne her gør tricket:

ThisWorkbook.PivotCaches(1).CreatePivotTable TableDestination:="Ark1!R20C10", TableName:="Pivottabel3"
Avatar billede bak Forsker
12. marts 2003 - 14:22 #5
mht. til skærmopdatering, så slå det fra Application.ScreenUpdating=False
Avatar billede it-dyret Nybegynder
12. marts 2003 - 14:33 #6
Ahh... nu er vi ved at være der, hvor løsningen er på vej, kan jeg mærke! Og hvor jeg også lærer noget nyt! :)

Har du mulighed for at sende et komplet eksempel lige fra erklæring af evt. variable + første pivot(den med source:=xlDataBase) + anden pivot(den med source:=xlPivotTable)? Jeg har selv rodet lidt med PivotCache uden helt at få det til at virke.
Avatar billede it-dyret Nybegynder
12. marts 2003 - 14:36 #7
Ved nærmere eftertanke: Er PivotCaches(1) så SourceType + SourceData fra første pivot? Hvis ja, hvordan går jeg så, hvis jeg arbejder med flere serier af pivottabeller, som alle skal have en første pivot, der suger i forskellige xlDataBase? Og hvor de efterfølgende har en række pivot, som skal bruge samme kilde (i form af xlPivotTable)?
Avatar billede it-dyret Nybegynder
12. marts 2003 - 14:37 #8
går = gør
Avatar billede bak Forsker
12. marts 2003 - 15:50 #9
Du har ret i din "eftertanke". Den næste pivottabel, der oprettes på en ny datasource (database) får så PivotCache nr. 2, altså PivotCaches(2).
På den kan der ligeledes laves en mængde nye pivottabeller.
Problemet er faktisk kun at holde rede i pivotcachenumrene.
Avatar billede bak Forsker
12. marts 2003 - 16:03 #10
en måde at gøre det på er at først definere pivotcacherene, derefter oprette tabeller der knytter sig til disse. I dette eksempel laver jeg 3 cacher og på disse 3 bygger jeg 5 pivottabeller.
Sub test2()
Dim test1 As PivotCache
Dim test2 As PivotCache
Dim test3 As PivotCache

Set test1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Database1!R1C1:R22C10")
Set test2 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Database2!R1C1:R22C10")
Set test3 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Database3!R1C1:R22C10")

test1.CreatePivotTable TableDestination:="Ark1!R15C10", TableName:="Pivottabel_1"
'bla. bla.
test2.CreatePivotTable TableDestination:="Ark2!R15C10", TableName:="Pivottabel_10"
'bla. bla.
test3.CreatePivotTable TableDestination:="Ark3!R15C10", TableName:="Pivottabel_20"
'bla. bla.
test3.CreatePivotTable TableDestination:="Ark4!R15C10", TableName:="Pivottabel_20"
'bla. bla.
test3.CreatePivotTable TableDestination:="Ark5!R15C10", TableName:="Pivottabel_20"
'bla. bla.

End Sub
Avatar billede bak Forsker
12. marts 2003 - 16:04 #11
Ps. de 3 sidste kan selvfølgelig ikke have samme navn.....
Avatar billede it-dyret Nybegynder
12. marts 2003 - 16:08 #12
Det ser absolut ud til, at det er det, som skal til! :)

Jeg tester senere i dag og kvitterer derefter med point.
Avatar billede palle_ib Nybegynder
14. marts 2003 - 14:47 #13
Lige et novice spørgsmål - det er ikke lettere at kopiere arket når du først har dannet arket derved navngiver Excel selv arkene. Kunne det være en fordel?

Sheets("Sheet1/Ark1").Copy After:=Sheets(1)
ActiveSheet.Name = "nytNavn"
Avatar billede palle_ib Nybegynder
14. marts 2003 - 14:48 #14
Ups - dannet Pivotabellen ikke arket.
Avatar billede bak Forsker
14. marts 2003 - 16:21 #15
Måske palle ib, men det kunne jo tænkes at it-dyret ville have flere pivottabeller på samme ark, uden at skulle kopiere og bygge om.
Avatar billede it-dyret Nybegynder
16. marts 2003 - 21:25 #16
Mange tak for det udførlige svar, bak! Ikke bare fik jeg svar på mit spørgsmål, jeg lærte også noget nyt omkring muligheden for at slå skærm opdateringen fra! :)

Og til Palle ib: Det er netop muligheden for at have endog rigtig mange pivottabeller på samme ark, som jeg har brug for...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester