Avatar billede lordnelson Seniormester
28. januar 2016 - 15:08 Der er 11 kommentarer

Dynamisk data hentning til pivot tabel

Hej

Laver en Pivot tabel i VBA, men da' selve data arket jo kan ændre sig ville jer gerne hente data dynamisk hvergang

Koden er:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Ark2!R1C1:R3948C3", Version:=xlPivotTableVersion15).CreatePivotTable _

Hvor det jo er R3948C3 , der skal ændre sig i forhold til hvor mange data der er
Avatar billede H_Klein Novice
10. februar 2016 - 18:10 #1
Hejsa

Hvis du bruger Excel 2010 eller nyere kan du lægge dine data i en navngiven tabel og så få pivoten til at hente alt indhold fra tabellen.
Så vil den ikke længere kigge på størrelsen af tabellen, men på alt indholdet.

Med venlig hilsen

Henrik
Avatar billede lordnelson Seniormester
10. februar 2016 - 19:38 #2
Jo da

Alt foregår i kode så hvordan ?
Avatar billede H_Klein Novice
12. februar 2016 - 18:08 #3
Prøv at ændre

Nedenstående

"Ark2!R1C1:R3948C3"

til

"Tabelnavnet"

altså til det navn som tabellen har.
Avatar billede lordnelson Seniormester
12. februar 2016 - 18:22 #4
Yes
det vil sige jeg skal lave en kode der finder ud af hvor stor tabellen er
og markerer denne , for derefter at navngive den
er dette korrekt ?
Avatar billede H_Klein Novice
12. februar 2016 - 18:38 #5
Det område hvor du har dine data skal formatteres som en tabel.
Når du gør det, får tabellen automatisk tildelt et navn, som du vil kunne se oppe i menu-linien i venstre side når du har klikket på "Tabel-værktøjer" i toppen af menu-linjen.
I din Pivot-kode skal du så, som vist, skrive navnet på tabellen ind i stedet for at skrive noget med størrelse.
Tabellen vil nemlig indrette sig efter hvor meget du fylder i den og pivot-tabellen vil opdatere alle det a der ligger i tabellen ligegyldigt hvor mange eller få rækker der måtte være på det givne tidspunkt.

Du kan altså forstille dig at tabellen er en spand og indholdet er vand, og når du opdaterer pivot-tabellen henter den alt det vand der ligger i spanden hvad enten det er en hel eller en halv liter vand...

Håber at ovenstående giver mening...
Avatar billede lordnelson Seniormester
12. februar 2016 - 18:54 #6
Ok
Har nok ikke formeleret mig korrekt , siden du bliver ved med at skrive hvad der står i menu linje m.v.

ALT ALT bliver lavet i kode , lige fra at hente data til slut finish

Altså tryk på en knap og det færdige resultat er der !!!!!!!!!!!
Avatar billede H_Klein Novice
12. februar 2016 - 19:34 #7
Ok... har du mulighed for at kopiere hele den kode der bruges fra den henter data ind og til pivoten er færdig?

Eller måske selve excel-arket?
Avatar billede lordnelson Seniormester
12. februar 2016 - 19:47 #8
Se problemet ligge ri at finde ud af hvor stor data er
den del har jeg fundet ud af , men får hele tiden i koden
den absolutte adresse altså med $

Så spørgsmåler er når jeg når beder den om at gå til sidste celle i arket
kan den så leverer adressen i R1C
således jeg kan ændrer R til noget andet



"Ark2!R1C1:R3948C3",
Avatar billede H_Klein Novice
12. februar 2016 - 23:37 #9
Hvis jeg forstår det korrekt så henter din kode først data ind i et ark og ud fra disse data dannes derefter en pivot-tabel?

Hvis dette er korrekt skal du ændre tabel-navnet i koden der hvor der hentes data ind i arket udefra og det samme tabel-navn skal så sættes ind i koden der dannet pivot-tabellen som vist i en tidligere tråd.

Derefter vil du slet ikke have brug for RC-kodningen længere.

Så igen... har du mulighed for at sende koden til mig, så jeg kan markere hvor det er du skal lægge ændringerne ind?
Avatar billede lordnelson Seniormester
13. februar 2016 - 13:33 #10
Har denne kode , inden Pivot tabel

i = 1
Range("a1").Select
Do While Not ActiveCell.Offset(0, i).Value = "Jur"
i = i + 1
Loop
i = i + 1
Columns(i).Select

Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
Worksheets(1).Activate
i = i + 2
Columns(i).Select
Selection.Copy
Worksheets(2).Activate
Range("b1").Activate
ActiveSheet.Paste
Range("a5").Activate
ActiveWorkbook.Worksheets(2).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(2).Sort.SortFields.Add Key:=Range("A5"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(2).Sort
        .SetRange Range("A2:B200000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
  Range("c2").FormulaLocal = "=LOPSLAG(B2;'O:\bogholderi\salg\[sagstyper.xlsx]Ark1'!$g:$h;2;FALSK)"
 
  p = 1
  Do While Range("b" & p).Value <> ""
  p = p + 1
  Loop
  p = p - 1
 
  Range("C2").Select
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("C2:C" & p)
  o = 1
  Do While Not Range("a" & o).Value = ""
  Range("a" & o).Value = Trim(UCase(Range("a" & o).Value))
  o = o + 1
  Loop
  Range("c1").Value = "Gennemsnit"
Avatar billede H_Klein Novice
13. februar 2016 - 14:40 #11
Som jeg læser det skal du danne pivot-tabellen ud fra data i Worksheet(2).

En løsning kunne derfor være, at du i worksheet(2) lægger nedenstående kode ind, som vil konvertere alle dataene i dette faneblad til en tabel og derefter lægger du dette tabelnavn ind i den kode der danner din pivot-tabel.

bemærk at du skal oprette to variabler

Dim Bund as long
dim Kol as long

    'Starter fra celle (A1) og finder nederste række med indhold.
    Cells(1, 1).Select
    Selection.End(xlDown).Select
    'Tildeler variablen Bund nummeret på den nederste række der skal være med i tabellen
    Bund = ActiveCell.Row
    'Starter fra celle (A1) og finder sidste kolonne med indhold.
    Cells(1, 1).Select
    Selection.End(xlToRight).Select
    'Tildeler variablen Kol nummret på den sidste kolonne der skal være med i tabellen
    Kol = ActiveCell.Column
    Cells(1, 1).Select
    'Opretter tabellen og tildeler den navnet "Tabel1" (dette navn kan du selv ændre
    ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(Bund, Kol)), , xlYes).Name = _
        "Tabel1"
    'Vælger den formattering som tabellen skal have. (Husk at hvis du vil ændre tabelnavnet skal det også ændres herunder)
    Range(Cells(1, 1), Cells(Bund, Kol)).Select
    ActiveSheet.ListObjects("Tabel1").TableStyle = "TableStyleMedium2"
   
    Cells(2, 1).Select

--------------------------------------------------

Herefter er alle data i en navngiven tabel og du kan nu blot henvise til dette navn i din Pivot-kode hvorefter alle data kan pivoteres efter ønske.

Håber at det giver mening og ellers vender du bare retur så jeg kan forsøge igen. Mine pædagogiske evner er ikke de bedste såå...
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

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