Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bestehende Pivottabelle mittels VBA aktualisieren

1,549 views
Skip to first unread message

Volker Neurath

unread,
Oct 8, 2012, 2:52:25 PM10/8/12
to
Hallo zusammen,

ich möchte in einem Excel-Sheet, das eine manuell erstellte
Pivottabelle enthält, die Datenquelle automatisch neu erstellen (noch
einfach) und dann, und das ist der Teil, um den sich meine Frage
dreht: der Pivottabelle diese neue Datenquelle "bekannt machen" und
die PT aktualisieren.

Geht das überhaupt? Oder muss ich auch die PT per VBA erstellen? (Das
würde ich gern vermeiden, auch wenn ich weiss, wie es geht)

Volker

Claus Busch

unread,
Oct 8, 2012, 3:13:20 PM10/8/12
to
Hallo Volker,

Am Mon, 8 Oct 2012 20:52:25 +0200 schrieb Volker Neurath:

> ich möchte in einem Excel-Sheet, das eine manuell erstellte
> Pivottabelle enthält, die Datenquelle automatisch neu erstellen (noch
> einfach) und dann, und das ist der Teil, um den sich meine Frage
> dreht: der Pivottabelle diese neue Datenquelle "bekannt machen" und
> die PT aktualisieren.

wenn es die gleiche Tabelle ist, bei der sich immer nur die Datenmenge
ändert, dann würde ich einen dynamischen Bereichsnamen für die Tabelle
vergeben und diesen als Quelle nehmen. Damit ist die Pivot-Tabelle nach
Aktualisierung immer auf dem richtigen Stand.


Mit freundlichen Grüßen
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3

Volker Neurath

unread,
Oct 9, 2012, 2:29:18 PM10/9/12
to
Hi Claus,

> wenn es die gleiche Tabelle ist, bei der sich immer nur die Datenmenge
> ändert,

Ist es. Zum Hintergrund:

Ich muss einmal wöchentlich eine Abfrage aus SAP machen; dazu steht mir
ein in Excel eingebundener Makrosatz zur Verfügung, der über einige
Add-Ins bedient wird.

Eines daran ist dumm:
Der Makrosatz ist nicht in der Lage, von der erweiterten
Zeilen-/Spaltenkapazität in XL2010 gebrauch zu machen.

Also muss ich die Abfrage zweimal über jeweils einen leicht veränderten
Datumsbereich durchführen.

Die so jeweils gewonnenen Daten will ich in (jeweils?) einer Datei
speichern, die ich dann in einer .xlsm zusammenführe.

Letztere ist diejenige Datei, in der insgesamt 3 Pivottabellen
existieren, die auf die oben gewonnenen Daten zugreifen und weiterhin
zugreifen sollen - momentan werden alle Schritte manuell gemacht, ich
möchte das über ein Makro erledigen, da das ganze mittlerweile doch
recht zeitraubend ist.

> dann würde ich einen dynamischen Bereichsnamen für die Tabelle
> vergeben und diesen als Quelle nehmen.

Was meinst du mit "dynamischen Bereichsnamen"? Steh gerade irnkwie auf
dem Schlauch.

Volker

Claus Busch

unread,
Oct 9, 2012, 2:47:18 PM10/9/12
to
Hallo Volker,

Am Tue, 9 Oct 2012 20:29:18 +0200 schrieb Volker Neurath:

> Was meinst du mit "dynamischen Bereichsnamen"? Steh gerade irnkwie auf
> dem Schlauch.

angenommen, deine Daten fangen in A1 an. Dann gehe auf Formeln =>
Namensmanager => Neu. Vergebe z.B. den Namen Pivot_Daten und als Formel
daf�r:
=BEREICH.VERSCHIEBEN($A$1;;;ANZAHL2($A:$A);ANZAHL2($1:$1))
und �ndere dann f�r deine Pivot-Tabellen die Quelle auf:
=Pivot_Daten
Damit musst du nur deine Tabellen aktualisieren, um sie immer auf dem
richtigen Stand zu halten.
Wenn du damit eine L�sung hast, dann melde dich und schreibe mal wo
deine Pivot-Tabellen sind und wir k�nnen mal nach Makro sehen, das dir
die Pivot-Tabellen immer automatisch aktualisiert.


Mit freundlichen Gr��en

Volker Neurath

unread,
Oct 10, 2012, 1:51:17 PM10/10/12
to
Hi Claus,

> angenommen, deine Daten fangen in A1 an. Dann gehe auf Formeln =>
> Namensmanager => Neu. Vergebe z.B. den Namen Pivot_Daten und als
> Formel dafür:
> =BEREICH.VERSCHIEBEN($A$1;;;ANZAHL2($A:$A);ANZAHL2($1:$1))
> und ändere dann für deine Pivot-Tabellen die Quelle auf:
> =Pivot_Daten
> Damit musst du nur deine Tabellen aktualisieren, um sie immer auf dem
> richtigen Stand zu halten.

Genau das habe ich heute Nachmittag in eineer ruhigen Phase im Büro
ergoogled ;)

Danke trotzdem.

> Wenn du damit eine Lösung hast, dann melde dich und schreibe mal wo
> deine Pivot-Tabellen sind und wir können mal nach Makro sehen, das dir
> die Pivot-Tabellen immer automatisch aktualisiert.

Mach ich glatt.

Aber: ich muss, wie geschrieben, die Daten (aus SAP BW) in zwei
Schritten ziehen, da ich sonst einen gepflegten Zeilenüberlauf bekomme,
da dass "dumme " SAP Makro nicht mit >65536 zeilen umgehen kann.

Ich rätsele noch, wie ich die so gewonnenen Datensheets am besten
zusammenführe ...

Volker

Claus Busch

unread,
Oct 10, 2012, 2:18:16 PM10/10/12
to
Hallo Volker,

Am Wed, 10 Oct 2012 19:51:17 +0200 schrieb Volker Neurath:

> Aber: ich muss, wie geschrieben, die Daten (aus SAP BW) in zwei
> Schritten ziehen, da ich sonst einen gepflegten Zeilen�berlauf bekomme,
> da dass "dumme " SAP Makro nicht mit >65536 zeilen umgehen kann.

exportierst du aus SAP oder importierst du aus Excel? Wenn du aus Excel
importierst, m�sste doch das Makro oder AddIn anzupassen sein.

> Ich r�tsele noch, wie ich die so gewonnenen Datensheets am besten
> zusammenf�hre ...

Erste freie Zeile im ersten Sheet ermitteln und dann das zweite Sheet ab
dort einf�gen.

Volker Neurath

unread,
Oct 10, 2012, 4:19:40 PM10/10/12
to
Hi Claus,

> > Aber: ich muss, wie geschrieben, die Daten (aus SAP BW) in zwei
> > Schritten ziehen, da ich sonst einen gepflegten Zeilenüberlauf
> > bekomme, da dass "dumme " SAP Makro nicht mit >65536 zeilen umgehen
> > kann.
>
> exportierst du aus SAP oder importierst du aus Excel?

Die Daten werden via SAP Business Warehouse gewonnen.
Bei uns geschieht das über einen Excel-Makrosatz, der als AddIn in
Excel integriert ist; wir müsse dazu eine Excel-Version starten, die
sich "SAP BW Analyser" nennt -- das ist dann ein ganz normales Excel
mit dem Makrosatz drin.

Über diesen Satz habe ich Zugriff auf diverse "Queries", die dann eben
die Daten liefern.

Die SAP Makros sind Passwortgeschützt :(

> > Ich rätsele noch, wie ich die so gewonnenen Datensheets am besten
> > zusammenführe ...
>
> Erste freie Zeile im ersten Sheet ermitteln und dann das zweite Sheet
> ab dort einfügen.

So werde ich das machen.

Volker

Volker Neurath

unread,
Oct 12, 2012, 3:48:10 PM10/12/12
to
Hi nochmal,

> > Erste freie Zeile im ersten Sheet ermitteln und dann das zweite
> > Sheet ab dort einfügen.
>
> So werde ich das machen.

So, dieser Punkt ist integriert und funktioniert auch.
Musste etwas tricksen, damit nicht zuviele Makros nacheinander
gestartet werden müssen...

Jetzt hab ich erstmal eine Woche Urlaub, danach werde ich dann die
Pivot-Sache integrieren

Volker

Volker Neurath

unread,
Oct 22, 2012, 12:29:01 PM10/22/12
to
So, wie kürzlich schon gepostet, steht das Basisgerüst, d.h. das Makro
zur Zusammenführung von Daten.
Auch der dynamische Bereichsname ist vergeben.

Jetzt bräuchte ich einen Hinweis zur Realisierung des automatischen
Refresh der Pivottable.

Die Arbeitsmappe enthält folgende Worksheets:

1. Summary PT
2. Umsatz PT
3. Menge PT
4. Daten
5. BI Parameter- und filter von SAP business Warehouse
6 Results Ergebnis der BusinessWarehouse-Abfrage
(liefert die Daten für 4.)

5. und 6. werden später via Makro ausgeblendet (=> very hidden)
ebenso ein geplantes 7. Sheet, das lediglich zwei Buttons zum Start des
Makros erhalten soll (warum 2 ist schwierig in Worte zu fassen ;) )

Volker

Claus Busch

unread,
Oct 22, 2012, 1:15:49 PM10/22/12
to
Hallo Volker,

Am Mon, 22 Oct 2012 18:29:01 +0200 schrieb Volker Neurath:

> 1. Summary PT
> 2. Umsatz PT
> 3. Menge PT
> 4. Daten
> 5. BI Parameter- und filter von SAP business Warehouse
> 6 Results Ergebnis der BusinessWarehouse-Abfrage
> (liefert die Daten für 4.)

Code gehört in das Codemodul Diese Arbeitsmappe:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim pt As PivotTable

For Each pt In Sh.PivotTables
pt.PivotCache.Refresh
Next
End Sub

Damit werden beim Aktivieren eines Blattes die PivotTabellen
aktualisiert.


Mit freundlichen Grüßen

Volker Neurath

unread,
Oct 22, 2012, 4:07:44 PM10/22/12
to
Hi Claus,

> Code gehört in das Codemodul Diese Arbeitsmappe:
>
> Private Sub Workbook_SheetActivate(ByVal Sh As Object)
> Dim pt As PivotTable
>
> For Each pt In Sh.PivotTables
> pt.PivotCache.Refresh
> Next
> End Sub
>
> Damit werden beim Aktivieren eines Blattes die PivotTabellen
> aktualisiert.

Danke, wir morgen direkt getestet.
Ich melde mich dann wieder.

Volker

Volker Neurath

unread,
Oct 23, 2012, 12:29:59 PM10/23/12
to
Hi claus,

> Code gehört in das Codemodul Diese Arbeitsmappe:
>
> Private Sub Workbook_SheetActivate(ByVal Sh As Object)
> Dim pt As PivotTable
>
> For Each pt In Sh.PivotTables
> pt.PivotCache.Refresh
> Next
> End Sub
>
> Damit werden beim Aktivieren eines Blattes die PivotTabellen
> aktualisiert.

Danke für den code, der arbeitet völlig einwandfrei - wie nicht anders
zu erwarten.
Damit "steht" die neue Version der Auswertung und wird am Ende der
Woche erstmals eingesetzt.

Danke nochmal.

volker
0 new messages