122503
Goto Top

Powerpointpräsentation aktualisieren

Moin zusammen,
ich habe eine Powerpointpräsentation mit einigen Diagrammen erstellt, bei der die Daten verknüpft aus einer Exceltabelle kommen, die auf dem Firmenserver liegt. Jeden Tag werden von vielen Kollegen neue Werte eingetragen, die dann letztendlich angezeigt werden sollen. Die Aktualisierung der Werte findet allerdings immer nur dann statt, wenn die Tabelle auf dem jeweiligen Rechner, auf der auch die Präsentation läuft, neu geöffnet wird. Ich hab nun ein Makro in Excel eingefügt, dass die derzeit offene Exceltabelle schließt und eine Aufgabe mit der Aufgabenplanung erstellt, die die Tabelle nun wieder öffnen soll. Beim automatischen Öffnen durch die Aufgabenverwaltung aktualisieren sich die Werte der Powerpointpräsi jedoch nicht. Hat jemand noch einen anderen Vorschlag, um die automatische Aktualisierung zu ermöglichen?

Besten Dank schonmal ;)

Content-Key: 274071

Url: https://administrator.de/contentid/274071

Printed on: April 20, 2024 at 02:04 o'clock

Mitglied: 114757
Solution 114757 Jun 09, 2015 updated at 08:05:56 (UTC)
Goto Top
Moin,
das lässt sich über ein Makro in der PP machen das alle Slides durchgeht und die Links aktualisiert ...
https://www.google.de/search?hl=de&q=powerpoint+vba+update+linked+sh ...

Gruß jodel32
Mitglied: 122503
122503 Jun 09, 2015 at 07:56:17 (UTC)
Goto Top
Und das Makro ist dann auch in der Lage, die geöffnete Exel-Arbeitsmappe (als schreibgeschützt geöffnet) zu aktualisieren? Das wär ja spitze, dann müsst ich nur noch son Makro finden. Das wär dann sowas in der Art, oder?

http://daslebeneinscherz.blogspot.de/2012/09/alle-excel-verknupfungen-d ...

Zum Verständnis: Die Powerpointdiagramme stellen nur jeweils einen zuletzt eingetragenen Wert dar, der mithilfe einer Verknüpfung von der Excel-Arbeitsmappe in die Powerpointdiagramm-Arbeitsmappe übertragen wird.
Mitglied: 114757
114757 Jun 09, 2015 updated at 08:02:36 (UTC)
Goto Top
Und das Makro ist dann auch in der Lage, die geöffnete Exel-Arbeitsmappe (als schreibgeschützt geöffnet) zu aktualisieren?
Sicher.

Dafür reicht ein einfaches:
ActivePresentation.UpdateLinks
Um alle verknüpften Objekte in der Präsentation zu aktualisieren.
Mitglied: 122503
122503 Jun 09, 2015 at 08:05:27 (UTC)
Goto Top
Sehr cool, das sollt ich hinkriegen. Besten Dank jodel ;)
Member: colinardo
colinardo Jun 09, 2015 updated at 08:58:54 (UTC)
Goto Top
Hallo zusammen,
Noch als Ergänzung zu Jodels Code der übrigens nicht immer alle Links zuverlässig aktualisiert (insbesondere OLE-Object Links), ein kleines VBS-Script das eine Präsentation updated
Dim objPP,p
Set objPP = CreateObject("PowerPoint.Application")  
objPP.Visible = True
objPP.DisplayAlerts = False
Set p = objPP.Presentations.Open("C:\Test.pptx")  
For Each slide In p.Slides
    For Each shp In slide.Shapes
        If shp.Type = 10 Then
            shp.LinkFormat.Update
        End If
    Next
Next
p.Save
objPP.DisplayAlerts = True
objPP.Quit
Man kann sich natürlich auch direkt ein PPAM-Addin schreiben und in Powerpoint einbinden, dafür sieht der Code so aus:
Sub Auto_open()
    Dim p As Presentation, shp As Shape, slide As slide
    For Each p In Application.Presentations
        For Each slide In p.Slides
            For Each shp In slide.Shapes
                If shp.Type = msoLinkedOLEObject Then
                    shp.LinkFormat.Update
                End If
            Next
        Next
    Next
End Sub
Grüße Uwe
Mitglied: 122503
122503 Jun 09, 2015 at 11:17:42 (UTC)
Goto Top
Hallo Uwe,
die Idee mit vbs ist auch interessant. Da die Präsentation aber durchgehend läuft und nur aktualisiert werden soll, erübrigen sich die Open-, Save- und Quitbefehle. Kannst du mir das nochmal entsprechend anpassen? Sorry,ich habe keinerlei Erfahrungen damit.
PS: Warum müssen Warnungen unterdrückt werden?

Vielen Dank!
Member: colinardo
colinardo Jun 09, 2015 updated at 11:43:33 (UTC)
Goto Top
Zitat von @122503:

Hallo Uwe,
die Idee mit vbs ist auch interessant. Da die Präsentation aber durchgehend läuft und nur aktualisiert werden soll,
erübrigen sich die Open-, Save- und Quitbefehle. Kannst du mir das nochmal entsprechend anpassen?
Um die Slides der aktuell offenen Präsentationen zu aktualisieren sieht das dann so aus:
On Error Resume Next
Dim objPP,p
Set objPP = GetObject(,"Powerpoint.Application")  
For Each p In objPP.Presentations
	For Each slide In p.Slides
	    For Each shp In slide.Shapes
	        If shp.Type = 10 Then
	            shp.LinkFormat.Update
	        End If
	    Next
	Next
Next
PS: Warum müssen Warnungen unterdrückt werden?
Für einen reibungslosen Batchbetrieb ist das zu empfehlen .. In einem Script das per Taskplaner aufgerufen werden soll sitzt ja meist keiner davor der einen Dialog wegklicken könnte face-wink
Das gilt jetzt aber nur für das alte Script, für das bei laufendem Betrieb ohne Öffnen und speichern ist das nicht nötig.

Grüße Uwe
Mitglied: 122503
122503 Jun 10, 2015 at 06:16:47 (UTC)
Goto Top
Moin Uwe,
das Script aktualisiert leider nicht die geöffnete, schreibgeschützte Excel-Arbeitsmappe, auf der die Diagramme basieren. Gibt es Variablen in dem Script, die ich anpassen müsste? Wie erfolgt die Aktualisierung? Simultan oder wenn alle Folien einmal durchgespielt sind? Hab im Moment noch große Fragezeichen.

Danke für deine Mühe.
Mitglied: 114757
114757 Jun 10, 2015 updated at 06:30:26 (UTC)
Goto Top
Stell doch einfach mal ein Demo-File online ...dann wissen wir wie du das Excel-File eingebunden hast... da gibt es nämlich mehrere Möglichkeiten
Mitglied: 122503
122503 Jun 10, 2015 at 08:20:16 (UTC)
Goto Top
Versuchs hier nochmal zu erklären:

Wenn man "Daten bearbeiten" des Powerpointdiagramms anklickt, öffnet sich eine "Diagramm in Microsoft PowerPoint" Exceltabelle. Von dort aus wird dann der Bezug zur Eingabetabelle bzw zur Tabelle, aus der die Werte kommen sollen, durch eine Indexfunktion (verknüpft) hergestellt (In diesem Fall der letzte Wert der Spalte L des Tabellenblattes Produktion).

=INDEX([Eingabetabelle.xlsx]Produktion!$L:$L:[Eingabetabelle.xlsx]Produktion!$L:$L;MAX(ISTZAHL([Eingabetabelle.xlsx]Produktion!$L$573:$L$4500)*ZEILE([Eingabetabelle.xlsx]Produktion!$L$573:$L$4500)))

Habe also kein Diagramm aus Excel kopiert bzw. verknüpft, sondern mit der "Diagramm einfügen" Funktion in Powerpoint gearbeitet und die dafür neu angelegte Exceltabelle genutzt. Der Wert, der durch die Indexfunktion in die Powerpoint-Exceltabelle geholt wird, füttert dann die jeweiligen Tabellenwerte des Diagramms.

Die Aktualisierung der Diagramme funktioniert nur, wenn durch "Daten bearbeiten" alle zugrundeliegenden Exceldiagramme geöffnet sind und die Eingabetabelle neu geöffnet wird.
Member: colinardo
Solution colinardo Jun 10, 2015, updated at Jun 11, 2015 at 05:57:51 (UTC)
Goto Top
Zitat von @122503:

=INDEX([Eingabetabelle.xlsx]Produktion!$L:$L:[Eingabetabelle.xlsx]Produktion!$L:$L;MAX(ISTZAHL([Eingabetabelle.xlsx]Produktion!$L$573:$L$4500)*ZEILE([Eingabetabelle.xlsx]Produktion!$L$573:$L$4500)))
Dann ist es klar, das kann dann so nicht funktionieren, denn bei diesen Formeln muss die Arbeitsmappe offen sein sonst läuft das nicht.
Habe also kein Diagramm aus Excel kopiert bzw. verknüpft, sondern mit der "Diagramm einfügen" Funktion in
Powerpoint gearbeitet und die dafür neu angelegte Exceltabelle genutzt. Der Wert, der durch die Indexfunktion in die
Powerpoint-Exceltabelle geholt wird, füttert dann die jeweiligen Tabellenwerte des Diagramms.
Meine Empfehlung wie du es besser machst, dann funktioniert das einwandfrei (hier getestet):
  • Du erstellst das Diagramm in dem Excel-Dokument
  • Dann kopierst du das Diagramm in Excel, und fügst es in Powerpoint ein, es ist dann automatisch mit dieser definierten Arbeitsmappe (und nicht mit einer embedded-Variante !) verknüpft und lässt sich aber weiterhin normal in PowerPoint bearbeiten
  • Dann musst du in meinem obigen Code nur den Typ des Elements ändern Zeile 8 auf 3 (entspricht dem Typ msoChart):
On Error Resume Next
Dim objPP,p
Set objPP = GetObject(,"Powerpoint.Application")  
For Each p In objPP.Presentations
	For Each slide In p.Slides
	    For Each shp In slide.Shapes
                ' Shapes vom Typ msoChart aktualisieren  
	        If shp.Type = 3 Then
	            shp.LinkFormat.Update
	        End If
	    Next
	Next
Next
Wie erfolgt die Aktualisierung?
Simultan oder wenn alle Folien einmal durchgespielt sind?
Die Präsentation wird dann Live aktualisiert, alle Charts auf allen Folien, sie kann dabei laufen, das macht keinen Unterschied.

Eine Demo das es läuft kannst du in folgendem Demo-Screencast sehen:

Viel Erfolg
Grüße Uwe
Mitglied: 122503
122503 Jun 11, 2015 at 05:57:05 (UTC)
Goto Top
Hallo Uwe,
vielen Dank für deinen Tipp und dein anschauliches Beispiel. Ich habe schon befürchtet, dass diese Einbindung Probleme machen könnte. Andererseits verstehe ich seitens Powerpoint nicht, warum das ganze so nicht umsetzbar ist, ist es doch eigentlich die deutlich elegantere Lösung. (schließlich sind die Diagramme nur da, wo sie auch hingehören (nämlich in Powerpoint).
Ich werde das ganze jz mal mal in Excel erstellen und schauen, ob es funktioniert.
Mitglied: 114757
114757 Jun 11, 2015 updated at 06:29:49 (UTC)
Goto Top
Zitat von @122503:
Andererseits verstehe ich seitens Powerpoint nicht, warum das ganze so nicht umsetzbar ist, ist es doch
eigentlich die deutlich elegantere Lösung.
Finde ich nicht, aber das die Formeln sich nur aktualisieren wenn das Quellsheet offen ist per Design so und liegt nicht an Powerpoint sondern an Excel !

(schließlich sind die Diagramme nur da, wo sie auch hingehören
(nämlich in Powerpoint).
Du kannst das Diagramm auch nach dem Kopieren in Excel und Einfügen in PP wieder löschen, in PP bleibt es dann weiterhin erhalten.

Finde ich persönlich zielgerichteter als einen doppelten Umweg zu machen ... also von einem Sheet aufs andere zu verweisen, wo doch eins vollkommen ausreicht face-wink

Gruß jodel32
Mitglied: 122503
122503 Jun 12, 2015 updated at 07:38:50 (UTC)
Goto Top
Moin Jodel,
stimmt, so ist es echt deutlich einfacher und geradliniger - und dadurch, dass man die (überflüssigen) Diagramme in Excel löschen kann, ist es auch nicht weniger elegant.
Das Script funktioniert beim Testen auch soweit wunderbar, allerdings, wie in deinem Beispiel Uwe, nur dann, wenn ich die Daten selber eingebe. Wenn ein Kollege das Excelsheet als "Schreiber" geöffnet hat, einen Wert einträgt und speichert wird durch das Script mein schreibgeschütztes Excelsheet nicht aktualisiert - und somit auch nicht die Präsi. Wie könnte man dies am einfachsten lösen?

Eigentlich könnte man jetzt ja einen Task erstellen, der die Excelsheet alle paar Minuten öffnet (für die Aktualisierung), ein Makro für Excel, dass die Mappe alle paar Minuten schließt (um die Neuöffnung zu ermöglichen) und dazwischen das Script schalten, mit der die neuen Werte des Excelsheets auch tatsächlich in Pp übernommen werden.
Wie ich anfänglich erklärt habe wurden diese beim automatisierten Neuöffnen von Excel bei der embedded-Verknüpfung nämlich nicht in Powerpoint übertragen.

Denke ich da zu kompliziert bzw. geht das auch einfacher?
Mitglied: 114757
114757 Jun 12, 2015 updated at 08:07:16 (UTC)
Goto Top
Denke ich da zu kompliziert bzw. geht das auch einfacher?
Yip zu kompliziert, Werte lassen sich auch ohne ein Sheet explizit zu öffnen auslesen:
VBA: mehrere Zellen aus anderer Datei auslesen (ohne diese zu öffnen)

Aber warum ist dein Sheet schreibgeschützt??? Wie soll sich ein schreibgeschütztes Sheet aktualisieren? Irgendwie alles ziemlich konfus deine Konstellation. Ihr solltet mal über eine Datenbank nachdenken (MySQL/Access) das ist wesentlich zielgerichteter für sowas.
Mitglied: 122503
122503 Jun 12, 2015 at 08:11:30 (UTC)
Goto Top
Danke für den Tipp, werde ich gleich mal versuchen.
Ja ne Datenbank würde sicherlich Sinn machen, hier wird aber nur mit Excel gearbeitet. Diese ist dann für denjenigen, der das Sheet als Erstes öffnet, zur Bearbeitung freigegeben - für alle weiteren schreibgeschützt. Da die Präsi ja rund um die Uhr auf einen Rechner laufen soll, muss es dementsprechend schreibgeschützt geöffnet werden. Ich bin auch nur einige Montate als Praktikant hier, ich werd bestimmt keine großen Reformen anhauen ;)
Mitglied: 122503
122503 Jun 12, 2015 at 08:14:49 (UTC)
Goto Top
Bei der Frage geht es aber um das Auslesen ohne Öffnung, hier soll es ja um die Aktualisierung der Werte bzw des Sheets gehen?
Mitglied: 114757
114757 Jun 12, 2015 updated at 08:16:39 (UTC)
Goto Top
Schon mal was von freigegebenen Arbeitsmappen gehört face-smile ?
Mitglied: 122503
122503 Jun 12, 2015 at 08:33:05 (UTC)
Goto Top
Hehe ja hab ich, das ist aber mal so was mit Excel...läuft ja nicht immer allzu rund, zudem gibts ja auch Einschränkungen in der Funktionalität.
Mitglied: 122503
122503 Jun 12, 2015 at 13:29:33 (UTC)
Goto Top
Hallo zusammen, habe einen Thread gefunden, bei dem der das gleiche Aktualisierungsproblem hatte.
Excel-Datei von mehreren Arbeitsplätzen öffnen und automatisch aktualisieren
Mit Larz Makro und deinem Skript Uwe läuft das wunderbar. Schönen Dank jodel und Uwe. ;)
Member: computerbrain
computerbrain Apr 15, 2020 at 12:59:23 (UTC)
Goto Top
Hallo 122503,

könntest du dein VBA Skript zur Verfügung stellen? Ich habe selbst so etwas 2010 mal machen lassen, allerdings nicht selbst programmiert. Jetzt bin ich allerdings wieder in der Situation, dass eine Kiosk-Präsi laufen lassen will und auf anderen PCs die Excel Datei bearbeitet werden soll, die Präsentation im "Endlosmodus" sich aber automatisch updaten soll.

Ich schaffe es, die Updates zu bekommen, allerdings nur solange die Excel am selben PC offen ist, ansonsten gibt die Präsenation den Fehler aus, dass die Excel bereits geöffnet ist auf einem anderen PC und nicht updaten kann. Ich verwende den Code von weiter oben in diesem Thread

On Error Resume Next
Dim objPP,p
Set objPP = GetObject(,"Powerpoint.Application")
For Each p In objPP.Presentations
For Each slide In p.Slides
For Each shp In slide.Shapes
' Shapes vom Typ msoChart aktualisieren
If shp.Type = 3 Then
shp.LinkFormat.Update
End If
Next
Next
Next

Was ich allerdings auch noch als Herausforderung habe, ist dass die Daten immer wieder auf den Ursprungszustand zurückspringen, also jedes mal updaten wenn die Slide wieder kommt (PPT ist aus wiederholend eingestellt). D.h. ich sehe immer zuerst den Stand, als die Datei aufgemacht wurde. Gibt es eine Möglichkeit, dass sich PPT das merkt und nicht immer auf den Urzustand zurückspringt?

Hast du eine Idee?