Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pivottabelle mit Cubewert berechnen-aktualisieren

Pivottabelle mit Cubewert berechnen-aktualisieren
09.10.2023 12:13:20
Frank
Hallo,

ich hab ein Problem, wenn ich über VBA eine Pivottabelle mit Cubewerten aktualaisieren lassen wird diese nicht durchgeführt. Ohne VBA wird die Berechnung und Aktualisierung durchgeführt.
Die Berechnung und Aktualisierung klappt auch wenn ich ein Haltepunkt setze.
z.Bsp in der Zeile Next i
In den auskommentierten Zeile sind meine Varinten zu sehen um dem Code mehr Zeit für die Aktualisierung zu geben, leider ohne erfolg.

Hat jemand noch ein Idee wie ich dem Code beibringen kann, das die Daten in der Pivottabelle aktualisiert werden vor dem:
Application.Dialogs(xlDialogPrintPreview).Show

Private Sub CommandButton3_Click() 'Seitenvorschau

Dim Kstauswahl As String
Dim i As Integer, t As Integer

' t = 8
Unload Me
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").ClearAllFilters

For i = 0 To ListBox2.ListCount - 1 'Für jede Zeile der Listbox2
' Tabelle2.Cells(t, 1).Value = ListBox2.List(i) 'Eintrag aus Listbox2 in Tabelle1-SpalteC- unten dranhängen
' Application.ScreenUpdating = True
Kstauswahl = ListBox2.List(i)
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").VisibleItemsList = Array("[Kostenstellen].[Nr_und_Bez].&[" & Kstauswahl & "]")
'Seitenansicht aufrufen
' t = t + 1
Next i

' Sleep (500) Pause Variante1


' Do Pause Variante2
' DoEvents
' Call Sleep(1000)
' Loop Until Application.CalculationState = xlDown



' Application.Wait (Now + TimeValue("00:00:02")) Pause Variante3

Application.Dialogs(xlDialogPrintPreview).Show
' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="d:kostenstelle.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
' Do While Worksheets(2).Cells(t + 1, 1) > ""
' Tabelle2.Cells(t + 1, 1).Value = ""
' Loop
' Application.ScreenUpdating = True
' ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").ClearAllFilters



Unload Me

End Sub



Vielen Dank schonmal für die Hilfe

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivottabelle mit Cubewert berechnen-aktualisieren
09.10.2023 14:22:26
Yal
Hallo Frank,

wenn Du auf deinem VBA-Code den Cursor auf PivotTables positioniert und Strg + F1 drückst, dann kommst Du auf die Onlinehilfe von PivotTables.
Darin steht, das Pivottables "eine Auflistung aller PivotTable-Objekte ..." dabei ist PivotTable-Objekte anklickbar.

Dann bist Du auf die Onlinehilfe von PivotTable-Objekt. Links eine Hierarchie. Darin die "Methoden" des PivotTable-Objekts.
In dieser Liste von Methode ist die Antwort versteckt (Spoiler: es fängt mir "re" und endet mit "frech").

Nicht zur Strafe sondern zur Übung ;-) Es ist ja ein notwendige Grundwissen, um in VB voranzukommen.
Alternativ: das Objektkatalog direkt in VB-Editor (Ansicht, Objektkatalog).

VG
Yal

Anzeige
AW: Pivottabelle mit Cubewert berechnen-aktualisieren
09.10.2023 18:02:25
Yal
Hallo Frank,

wenn man zuerst alle als Kommentar ausgeblendete Zeilen in deinem Code löscht, dann sieht man Bäume anstatt Wald.

In der Onlinehilfe kann man neugierig auf PivotField-Objekt gehen, und dort den Eigenschaft "VisibleItemList" anschauen, insbesondere das Beispiel.

Private Sub CommandButton3_Click() 'Seitenvorschau

Dim Arr()
Dim i As Integer

ReDim Arr(ListBox2.ListCount - 1)
For i = 0 To ListBox2.ListCount - 1
Arr(i) = ListBox2.List(i)
Next i
Unload Me
With ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]")
.ClearAllFilters
.VisibleItemsList = Arr
End With
End Sub


Ohne Datei natürlich keine Garantie, dass es funktioniert.


VG
Yal
Anzeige
AW: Pivottabelle mit Cubewert berechnen-aktualisieren
10.10.2023 10:09:57
Frank
Hallo Yal,

funktioniert leider nicht, da das Array nicht so an die Pivotabelle übergeben werden kann. Laut Hilfe für die Eigenschaft "VisibleItemList" sollte es so übergebenwerden
        ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").VisibleItemsList = Array("[Kostenstellen].[Nr_und_Bez].&[" & Kstauswahl & "]")

Das funktioniert ja auch. Wenn mann das
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").ClearAllFilters

entfernt und die Seitenvorschau beendet. Dann werden die Daten korrekt in der Pivottabelle angezeigt. Bevor die Daten angezeigt werden, ist ein sichbare Verzögerung zusehen ( 1 Sekunde). Nimmt man jetzt den ClearAllFilters wieder rein und nimmt bei der Auswahl immer die selbe Kostenstelle, dann werden die gefilterten Daten beim 3. Durchlauf in der Pivottabelle korrekt angezeigt.
Ablauf:
Druckauswahl -> auswahl Kostenstelle -> Seitenvorschau (keine Daten) -> Seitevorschau beenden
Druckauswahl -> auswahl Kostenstelle -> Seitenvorschau (keine Daten) -> Seitevorschau beenden
Druckauswahl -> auswahl Kostenstelle -> Seitenvorschau (jetzt mit Daten) -> Seitevorschau beenden

Die Datei kann ich hier hier nicht öffentlich hochladen. Wenn das hier möglich ist, höchstes als PN.


Private Sub CommandButton3_Click() 'Seitenvorschau

Dim i As Integer
Dim Kstauswahl As String

Unload Me
For i = 0 To ListBox2.ListCount - 1 'Für jede Zeile der Listbox2
Kstauswahl = ListBox2.List(i)
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").VisibleItemsList = Array("[Kostenstellen].[Nr_und_Bez].&[" & Kstauswahl & "]")
Application.Dialogs(xlDialogPrintPreview).Show

ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").ClearAllFilters

Next i

End Sub

Anzeige
AW: Pivottabelle mit Cubewert berechnen-aktualisieren
11.10.2023 07:32:19
Frank
Hallo

hat keiner eine Idee dazu, wie man dem Code beibringen kann, das wenn der Wert an den Pivotfilter übergeben wird die Berechnung sofort durchgeführt wird.

Wieder offen
11.10.2023 11:22:19
Yal
(nicht vergessen den Haken bei "Frage noch offen" zu setzen, um weitere Helfer auf die Frage aufmerksam zu machen)

VG
Yal
AW: Wieder offen
11.10.2023 12:11:14
Frank
Hallo Yal,

ich hatte bei der letzten Antwort auf deinen Tipp den Hacken bei "Frage noch offen " gesetzt. Könntest dur dir Antwort nochmal ansehen, falls noch nicht geschehen. Danke
AW: Pivottabelle mit Cubewert berechnen-aktualisieren
09.10.2023 16:47:58
Frank
Hallo Yal,

das hatte ich auch schon probiert. Das bewirkt nur das die Daten aus der Datenbank neu eingelesen werden (Dauer ca. 10 sekunden) aber die Pivottabelle nicht aktualisiert wird.
Private Sub CommandButton3_Click() 'Seitenvorschau

Dim Kstauswahl As String
Dim i As Integer, t As Integer

' t = 8
Unload Me
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").ClearAllFilters

For i = 0 To ListBox2.ListCount - 1 'Für jede Zeile der Listbox2
' Tabelle2.Cells(t, 1).Value = ListBox2.List(i) 'Eintrag aus Listbox2 in Tabelle1-SpalteC- unten dranhängen
' Application.ScreenUpdating = True
Application.ScreenUpdating = True
Kstauswahl = ListBox2.List(i)
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").VisibleItemsList = Array("[Kostenstellen].[Nr_und_Bez].&[" & Kstauswahl & "]")
'Seitenansicht aufrufen
' t = t + 1
Next i

ActiveSheet.PivotTables("PivotTable1").RefreshTable


' Sleep (1000) ' Pause Variante1


' Do ' Pause Variante2
' DoEvents
' Call Sleep(1000)
' Loop Until Application.CalculationState = xlCalculating



' Application.Wait (Now + TimeValue("00:00:02")) Pause Variante3

Application.Dialogs(xlDialogPrintPreview).Show
' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="d:kostenstelle.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
' Do While Worksheets(2).Cells(t + 1, 1) > ""
' Tabelle2.Cells(t + 1, 1).Value = ""
' Loop
' Application.ScreenUpdating = True
' ActiveSheet.PivotTables("PivotTable1").PivotFields("[Kostenstellen].[Nr_und_Bez].[Nr_und_Bez]").ClearAllFilters



Unload Me

End Sub
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige