Wie Pivot-Tabellen automatisch aktualisieren?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

Als absoluter Rookie mit Pivot-Tabellen + Makros habe ich ein bisschen herum gesucht im WWW und einiges probiert, bin aber zu keinem brauchbaren Ergebnis gekommen, um Pivot-Tabellen automatisch zu aktualisieren.

Mein Anliegen ist es, dass, wenn Änderungen in einem Tabellenblatt vollzogen werden (Inhalts-Updates, aber auch Hinzufügen oder Löschen von Zeilen!), alle, von diesem Tabellenblatt ausgehenden Pivot-Tabellen (auch wenn die Pivots sich in anderen Tabellenblättern befinden!) automatisch aktualisiert werden.

Ich habe im WWW folgendes Makro gefunden, aber leider kommt bei der Ausführung der Basic-Syntax-Fehler, dass "PivotTable" ein unbekannter Datentyp sein..... :?


Makro:

Option Explicit

'---------------------------------------------------------------------------------------
' Module : RefreshAllWorkbookPivots
' Purpose : Refresh All Chosen Pivot Tables in a Workbook
'---------------------------------------------------------------------------------------

Sub RefreshAllWorkbookPivots()

Dim pt As PivotTable
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

For Each pt In ws.PivotTables
pt.RefreshTable
Next pt

Next ws

Application.Calculate

End Sub


Für weiterführende Tipps oder Alternativlösungen bin ich sehr dankbar! :)

P.S. Ich verwende OO 4.1.1 !
TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

Danke für die Verlinkung zu diesem Fremd-Forum (die Idee, mit englischen Suchbegriffen zu arbeiten ist mir gar nicht gekommen *schäm* ), aber so richtig scheinen die dort auch nicht zu einer Lösung gekommen zu sein, oder?
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von Stephan »

aber so richtig scheinen die dort auch nicht zu einer Lösung gekommen zu sein, oder?
Mal ganz offen, meinst Du ich poste hier auf gut Glück irgendwelche Links? Im verlinkten Thread steht u.a.:

Refresh all database ranges and pilots:

REM ***** BASIC *****
Sub refresh_DBRanges_And_Pilots
REM disable auto-calculation:
bAutoCalc = thisComponent.IsAutomaticCalculationEnabled
thisComponent.enableAutomaticCalculation(False)
oDBRangesEnum = thisComponent.DatabaseRanges.createEnumeration()
refresh_Enumeration(oDBRangesEnum)
oSheetsEnum = thisComponent.Sheets.createEnumeration()
refresh_All_DataPilots(oSheetsEnum)
REM reset auto-calculation to previous state:
thisComponent.enableAutomaticCalculation(bAutoCalc)
End Sub
Sub refresh_All_DataPilots(oSheetsEnum)
REM Bug: Disregards pilots created from datasource
while oSheetsEnum.hasMoreElements()
oSheet = oSheetsEnum.nextElement()
oDPEnum = oSheet.DataPilotTables.createEnumeration()
refresh_Enumeration(oDPEnum)
wend
End Sub
Sub refresh_Enumeration(oEnum)
while oEnum.hasMoreElements()
oNext = oEnum.nextElement()
oNext.refresh()
wend
End Sub


Nachfragen sind natürlich willkommen, nur gleichzeitig bitte ich doch darum die Perspektive des Anderen zu sehen: ich sitze hier am Schreibtisch und gehe meiner regulären Arbeit (als Freiberufler) nach und habe nur die Zeit kurz zu antworten (z.B. mit einem Link) oder eben garnicht. Nur einen LInk zu setzen ist schon deshalb besser als nichts zu tun weil er anderen u.U. hilft Dir zu helfen, nämlich solchen Leuten die das Makro anpassen können, aber selbst noch nicht den LInk gefunden hatten.


Gruß
Stephan
TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

Stephan hat geschrieben:
aber so richtig scheinen die dort auch nicht zu einer Lösung gekommen zu sein, oder?
Mal ganz offen, meinst Du ich poste hier auf gut Glück irgendwelche Links? Im verlinkten Thread steht u.a.:

....

Gruß
Stephan
Sorry, ich wollte dir nicht zu nahe treten mit meiner Aussage - ich bezog mich auf das letzte Posting in dem Thread, worin geschrieben wird, dass der TO bei einer älteren OO-Version bleiben muss, weil die Lösung in neueren Versionen nicht funktioniert.
.... now it doest work...I have to stay at OO 3.2.1 because of this ability.
Is there any new way how to refresh PT in OO 3.3/FO3.3/FO3.4???

Btw. in OO 3.3 my PT totaly colabsed! they have lost they link to source area, it is not possible to edit their source area in their properties, the only way how to make PT work in OO 3.3 is to create whole new PT - but I will do this only if I decide to leave this world by painful way - which this is. What is wrong with PT in OO 3.3 that were created in OO 3.2. ?????...
Ich werde das jetzt selbst versuchen - soll ich das Makro direkt an mein File binden oder wäre es besser, das Ganze generell, für alle OO-Calcs, einzurichten?
Die "generelle Lösung" wäre mir erheblich sympathischer - aber spricht etwas dagegen, bzw. wo muss ich das Makro dafür hinzufügen?

Danke für die Unterstützung! 8)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von Stephan »

soll ich das Makro direkt an mein File binden oder wäre es besser, das Ganze generell, für alle OO-Calcs, einzurichten?
Die "generelle Lösung" wäre mir erheblich sympathischer


technisch geht Beides.

Ich persönlich würde von der generellen Variante deshalb absehen weil es immer mal wieder Probleme geben kann die es erfordern Änderungen an den globalen Programmeinstellungen zu machen und dadurch auch mal Makrozuweisungen ungewollt verloren gehen, außerdem ist es nervig wenn bestimmte Makroabläufe Dich in jeder Datei für (sinngemäß) 1 Sekunde ausbremsen wenn sie doch nur in manchen Dateien gebraucht werden.


Gruß
Stephan
TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

Stephan hat geschrieben:
soll ich das Makro direkt an mein File binden oder wäre es besser, das Ganze generell, für alle OO-Calcs, einzurichten?
Die "generelle Lösung" wäre mir erheblich sympathischer


technisch geht Beides.

Ich persönlich würde von der generellen Variante deshalb absehen weil es immer mal wieder Probleme geben kann die es erfordern Änderungen an den globalen Programmeinstellungen zu machen und dadurch auch mal Makrozuweisungen ungewollt verloren gehen, außerdem ist es nervig wenn bestimmte Makroabläufe Dich in jeder Datei für (sinngemäß) 1 Sekunde ausbremsen wenn sie doch nur in manchen Dateien gebraucht werden.


Gruß
Stephan
OK - ich habe es nur ans Calc-File direkt angehängt und ich sehe beim Öffnen des Files kurz in der Statusleiste aufblitzen, dass Berechnungen durchgeführt werden - im Tabellenblatt mit der Pivot-Tabelle sind die Änderungen aber weiterhin erst ersichtlich, wenn ich manuell aktualisiere! :shock:
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von mikeleb »

Hallo,
OK - ich habe es nur ans Calc-File direkt angehängt
und auch mit dem entsprechenden Tabellenereignis ("Inhalt geändert") verknüpft?
Gruß,
mikeleb
TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

mikeleb hat geschrieben:Hallo,
OK - ich habe es nur ans Calc-File direkt angehängt
und auch mit dem entsprechenden Tabellenereignis ("Inhalt geändert") verknüpft?
:o Das wusste ich leider nicht (siehe mein Hinweis im Eröffnungs-Posting, dass ich eben bei Pivot + Makro ein Rookie bin)!

Also, ich habe den ganzen "Refresh-Zirkus" unter "Makro verwalten" -> "OpenOffice Basic Makros" -> "MyCalcFile.ods" -> "Standard" -> "OwnBasicRefreshes" abgespeichert.

Vorhandene Makros darin sind: "refresh_DBRanges_And_Pilots", "refresh_All_DataPilots(oSheetsEnum)" und "refresh_Enumeration(oEnum)".

Klicke ich jetzt auf "ZUORDNEN", finde ich kein Tabellenereignis ("Inhalt geändert") - nur "'Geändert'-Status wurde geändert" ist vorhanden!?

Bin ich da richtig und muss ich da alle 3 Makros einzeln zuordnen?

Ich habe schon gesucht, um mehr über Tabellenereignisse in OO-Calc zu finden, aber Google spuckt mit den Suchbegriffen "Tabellenereignis open office calc wie zuordnen" magere 2 Seiten aus.... :?
TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

OK - das mit den Tabellenereignissen habe ich jetzt mal, aber das Makro hat noch irgend ewtas, denn ich bekomme folgenden Fehler:

BASIC-Laufzeitfehler
Eigenschaft oder Methode nicht gefunden: hasMoreElements



Das ist der Teil in dem der Fehler entsteht:

Sub refresh_Enumeration(oEnum)

while oEnum.hasMoreElements()
oNext = oEnum.nextElement()
oNext.refresh()
wend

End Sub
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von mikeleb »

Hallo,

ich vermute mal, die Makrozuordnung stimmt nicht.
Dem Tabellenereignis "Inhalt geändert" (Rechtsklick auf den Tab->Tabellenereignisse) muss das Makro "refresh_DBRanges_And_Pilots" zugeordnet werden.
Gruß,
mikeleb
TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

mikeleb hat geschrieben:Hallo,

ich vermute mal, die Makrozuordnung stimmt nicht.
Dem Tabellenereignis "Inhalt geändert" (Rechtsklick auf den Tab->Tabellenereignisse) muss das Makro "refresh_DBRanges_And_Pilots" zugeordnet werden.
Ich habe jetzt alle Varianten mit der Makro-Zuordnung durch - entweder es passiert gar nichts, oder der o.a. Fehler tritt auf..... :?
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von mikeleb »

Hallo,

kannst du uns deine Datei (ggf. verfremdet) per Anhang zur Verfügung stellen, um nach dem Fehler zu suchen?
Gruß,
mikeleb
TSRalex
**
Beiträge: 28
Registriert: Mi, 20.03.2013 11:05

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von TSRalex »

mikeleb hat geschrieben:Hallo,

kannst du uns deine Datei (ggf. verfremdet) per Anhang zur Verfügung stellen, um nach dem Fehler zu suchen?
Ich habe dir eine PN gesandt! :)
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Wie Pivot-Tabellen automatisch aktualisieren?

Beitrag von mikeleb »

Hallo,

interessanterweise wird das Makro zu schnell abgearbeitet. Nach der Änderung eines Zellinhaltes startet das Makro und schaltet erst einmal die automatische Neuberechnung aus. Damit werden die Pivottabellen mit den "alten" Werten aktualisiert.
Mit folgender Änderung wird zunächst eine Neuberechnung ausgelöst und erst dann werden die Pivottabellen aktualisiert.
Da du keine Datenbereiche definiert hast kann der Teil auskommentiert werden.

Code: Alles auswählen

Sub refresh_DBRanges_And_Pilots

REM disable auto-calculation:
bAutoCalc = thisComponent.IsAutomaticCalculationEnabled
thisComponent.enableAutomaticCalculation(False)
REM re-calculation:
thiscomponent.calculateall()
REM refresh DatabaseRanges
'oDBRangesEnum = thisComponent.DatabaseRanges.createEnumeration()
'refresh_Enumeration(oDBRangesEnum)
REM refreh pilots
oSheetsEnum = thisComponent.Sheets.createEnumeration()
refresh_All_DataPilots(oSheetsEnum)

REM reset auto-calculation to previous state:
thisComponent.enableAutomaticCalculation(bAutoCalc)

End Sub

Sub refresh_All_DataPilots(oSheetsEnum)

REM Bug: Disregards pilots created from datasource:
while oSheetsEnum.hasMoreElements()
oSheet = oSheetsEnum.nextElement()
oDPEnum = oSheet.DataPilotTables.createEnumeration()
refresh_Enumeration(oDPEnum)
wend

End Sub

Sub refresh_Enumeration(oEnum)

while oEnum.hasMoreElements()
oNext = oEnum.nextElement()
oNext.refresh()
wend

End Sub 
Gruß,
mikeleb
Antworten