VBA - wie Code bei Folienaufruf ausführen?
#1
hey, wie kann ich VBA-Code einer Folie zuordnen?

Und wie kann ich den Code dann ausführen beim oder vorm Aufruf einer Folie?
Oder wie rufe ich Code auf für alle Folien zu Zeitpunkt vom Aufruf einer bestimmen Folie?
Antworten Top
#2
Hallo Julia,

anfang der 2000er Jahre war es sehr beliebt, vermeintlich witzige Powerpoint Präsentationen von Büro zu Büro zu schicken. Praktischerweise hat sich damit ein perfektes Einfallstor für allerlei Makroviren ergeben, denn die tausendfache Teilung über vertrauensvolle Absender war ein idealer Verbreitungsmechanismus. Als Konsequenz daraus hat Microsoft für Powerpoint alle Möglichkeiten abgeschaltet, Makros direkt auf Events reagieren zu lassen. Anders als in Excel gibt es also nicht die Möglichkeit in den generischen Objekten, direkt eigene Eventhandler zu implementieren. Während es in Excel immer ein ThisWorkbook-Objekt und für jedes Worksheet auch noch ein eigenes Worksheet mit eigenem Codebehind gibt, hast du in Powerpoint nur die Möglichkeit eigene Klassen, Objekte und Module zu erstellen.

Natürlich stellt auch Powerpoint Events zur Verfügung, die jedoch grundsätzlich im Application-Objekt gekapselt sind (Eine Slide und eine Presentation und eine SlideShow haben also keine eigenen Events, auf die du reagieren kannst). Das kannst du wunderbar sehen, wenn du dich im Objektkatalog mal durch alle Klassen klickst und feststellst, dass es nur in Application "Blitze" gibt, die Ereignisse markieren.

Auf Application-Events kannst du auch im Code reagieren. Allerdings funktioniert das nur in Klassenmodulen. Das Problem daran wird nun, dass ein Klassenmodul erstmal nur eine Beschreibung eines Objektes ist, die selbst nichts kann. Damit VBA Code eines Klassenmoduls ausführen kann (und auf Events anderer Objekte reagieren kann), musst du erst eine Instanz der Klasse erstellen (und damit ein Objekt). Dummerweise hast du aber bis zu dem Zeitpunkt keine Möglichkeit auf irgendwelche Events in Powerpoint zu reagieren um anhand eines Events ein Objekt zu erstellen (und da beißt die Katze sich in den Schwanz). Es gibt in den großen weiten des World Wide Web Umgehungsmöglichkeiten, die über automatisch ausgelöste Trigger in Ribbon-Vorlagen ein Presentation-Open-Event simulieren, aber das funktioniert nur in AddIns. Also bleibt nur der Weg, den Nutzer zu veranlassen, ein Makro auszuführen, dass dir eine Instanz von deiner eigenen "Event-Handler-Klasse" erzeugt.

Beim Folienwechsel werden einige Application-Events aufgerufen, auf die du reagieren kannst. Du kannst dabei SlideShowNextSlide und SlideShowNextClick nutzen. Als Parameter wird dir das SlideShowWindow übergeben, in dem das Event ausgelöst wurde. Über die .View.Slide-Eigenschaft des SlideShowWindow kannst du wiederum auf die jeweilige Folie zugreifen, die zum Beispiel über den .SliedIndex die Foliennummer liefert.

Wie das ganze in der Praxis aussehen könnte, habe ich mal im MSOffice-Forum zusammengefasst (Beitrag 8): VBA - Anzeige einer Folie wird nicht aktualisiert - MS-Office-Forum
HaWe hat da auch noch einige interessante Ergänzungen zu geliefert.

Fazit: Du kannst keiner Folie direkt Code zuordnen, Zum Ausführen benötigst du ein Objekt, dass du irgendwie händisch erstellen (lassen) musst, ob du dann einen Code für alle Folien ausführst, oder auf eine Bestimmte Folie im SlideShowWindow reagierst ist dir überlassen.

Viele Grüße
derHöpp
[-] Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:
  • o0Julia0o
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste