"Folie loeschen" mit VBA-Script (?) in PowerPoint 2007

07/04/2009 - 11:54 von Ernst Boetsch | Report spam
Liebe Expertinnen und Experten,


ich habe einen Vortrag, den ich mehrmals pro Jahr aktualisiere
und vor unterschiedlichen Zielgruppen halte.

Vom _Konzept_ her wàren zielgruppenorientierte Pràsentationen optimal
geeignet.

Bei meinen Rahmenbedingungen ist die _technische Realisierung_
der zielgruppenorientierten Pràsentation unter PowerPoint 2007 aber
absolut unbrauchbar (siehe bei Interesse die Begründung in Anhang 1).


Mir wàre aber geholfen, wenn man mit einem Script (VBA-Script ?)
einzelne Folien aus einer pptx-Datei löschen könnte.

Ich komme aus der UNIX-Welt und kenne mich deswegen mit der
Script-Programmierung unter MS-Windows nicht aus.

Kann mir deshalb eine freundliche Expertin / ein freundlicher Experte
bei folgenden Punkten unter die Arme greifen?

* Wie muss die Script-Datei "gruppe-1.script" aussehen,
mit der man z.B. die Folien 3, 17 und 67 löscht?

Ich vermute die Script-Datei hat folgenden prinzipiellen Aufbau:

<Vorspann>
<Lösche Folie Nr. 67>
<Lösche Folie Nr. 17>
<Lösche Folie Nr. 3>
<Abspann>

Ich gehe dabei davon aus, dass es sich bei der Script-Datei um eine
einfache Textdatei handelt, die man mit einem Editor der Wahl
erstellen oder sonstwie generieren kann.

* Wie wende ich die Script-Datei "gruppe-1.script" auf die
PowerPoint-Datei "vortrag.gruppe-1.pptx" an?

Dabei ist es für mich gleichgültig, ob ich das Script auf der
Kommandozeile starten muss, oder ob ich das Script innerhalb von
PowerPoint aufrufe.


Wer sich dafür interessiert, findet im Anhang 2 eine lange Erklàrung,
warum dies mein Problem löst.
Dies ist gleichzeitig auch eine Anregung, wie man die Funktion
"Zielgruppenorientierte Pràsentation" aus meiner Sicht besser
realisieren könnte.


Ich wàre außerdem für einen Hinweis dankbar, wo ich Dokumentation
darüber finde, welche Script-Anweisungen für PowerPoint-Operationen
noch zur Verfügung stehen.
Ich denke dabei z.B. an Anweisungen für folgende Aktionen:

* Folie ausblenden
* Folie duplizieren
* Folie innerhalb der pptx-Datei an eine andere Position verschieben


Vielen Dank für die Hilfe.


Mit freundlichen Grüßen
Ernst Bötsch

########################################################################

Bei meinen Rahmenbedingungen

* Mehr als 100 Folien in einer pptx-Datei

* Bei jeder Aktualisierung kommen mehrere Folien neu hinzu
und mehrere alte Folien werden ersetzt.

* Mehr als 10 unterschiedliche Zielgruppen

ist die _technische Realisierung_ der zielgruppenorientierten
Pràsentation unter PowerPoint 2007 aus folgenden Gründen absolut
unbrauchbar:

* Neue Folien muss man bei _jeder Zielgruppe individuell_ hinzufügen.

* Das Fenster "Zielgruppenorientierte Pràsentation definieren"
kann man in der Größe nicht veràndern.
Deshalb kann man Folien nicht unterscheiden, wenn diese einen langen
Titel haben, der sich erst ganz am Ende unterscheidet.

Beispiel für derartige Titel:
+ Wichtigster Schutz gegen die Gefahren im Internet (1)
+ Wichtigster Schutz gegen die Gefahren im Internet (2)

Bei mir werden diese beiden Titel in der Liste "Folien in der
zielgruppenorientierten Pràsentation" nach "Gefahre"
abgeschnitten. In dieser Liste kann ich deshalb nicht erkennen,
welche der beiden Folien zuerst angezeigt wird.

* Mit Abstand am schlimmsten ist aber folgendes:

Wenn man eine neue Folie zur zielgruppenorientierten Pràsentation
hinzufügt, landet diese Folie am _Ende_ der Pràsentation.
Wenn diese Folie aber am Anfang der Pràsentation erscheinen soll,
müsste man nach dem Hinzufügen noch mehr als 100-mal auf den Button
"Folie in der Reihenfolge nach oben" drücken. :-(((

########################################################################

Ersatz der "Zielgruppenorientierten Pràsentation"


Mein Mechanismus erfordert folgende vereinfachende Annahmen:

* Die relative Reihenfolge der Folien in den Pràsentationen
stimmt mit der Reihenfolge der Folien in der pptx-Datei überein.

* Falls eine Folie in einer Pràsentation mehrfach vorkommen soll,
muss man in der pptx-Datei entsprechende Kopien anlegen.


Vorgehensweise bei der Anwendung meines geplanten Mechanismus
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Bei den ersten beiden Schritten muss man jeweils eine Meta-Datei
erstellen und zusammen mit der pptx-Datei aktualisieren:

+ Index-Datei "vortrag.index".

Es handelt sich dabei um eine einfache Textdatei, die für jede
Folie in "vortrag.pptx" genau einen relativ einfachen Datensatz
enthàlt (s.u.).

+ Für jede Zielgruppe N eine Filter-Datei "gruppe-N.filter".

Es handelt sich dabei um eine einfache Textdatei (s.u.).


* Beim Erstellen der jeweiligen Pràsentation sind folgende Schritte
erforderlich:

+ Erstellen der Kopie "vortrag.gruppe-N.pptx" aus "vortrag.pptx".

+ Generieren der Datei Script-Datei "gruppe-N.script" aus
"vortrag.index" und "gruppe-N.filter".

Dies erfolgt mit Hilfe eines einfachen Perl-Scripts, das ich
problemlos schreiben kann. Bei Interesse stelle ich dieses
Perl-Script gerne allgemein zur Verfügung.

Die erzeugte Script-Datei "gruppe-N.script" hat z.B. folgenden
Aufbau:

<Vorspann>
<Lösche Folie Nr. 67>
<Lösche Folie Nr. 17>
<Lösche Folie Nr. 3>
<Abspann>

+ Anwenden von "gruppe-N.script" auf "vortrag.gruppe-N.pptx",
wodurch dann die gewünschten Folien gelöscht werden.


Aufbau von "vortrag.index"
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Die Meta-Datei "vortrag.index" beruht darauf, dass man jeder Folie
ein oder mehrere Attribute zuordnen kann.
Ein Attribut kann zusàtzlich zu seinem Namen noch optional einen
Wert besitzen.

"vortrag.index" muss für jede Folie in "vortrag.pptx" eine Zeile
(Datensatz) der folgenden Form enthalten:

<Attribut-Liste> / <Kommentar>

Dabei gilt folgendes:

* In <Attribut-Liste> werden die einzelnen Attribute durch mindestens
ein Blank getrennt.

* <Attribut-Liste> kann auch leer sein.

* <Kommentar> dient nur dazu, dass man die Übersicht behàlt
und kann auch leer sein.

* Attribut-Namen und -Werte dürfen nur aus folgenden Zeichen bestehen:

+ Buchstaben

+ Ziffern

+ Die folgenden Sonderzeichen:
_ . - (Unterstrich/Underline, Punkt, Bindestrich)

Außerdem müssen Attribut-Namen mit einem Buchstaben oder mit einem
Unterstrich ("_") beginnen.

* Die Reihenfolge der Datensàtze in "vortrag.index" richtet sich nach
der Reihenfolge der Folien in "vortrag.pptx".


"vortrag.index" darf zusàtzlich noch folgende Zeilen enthalten:

* Leere Zeilen werden ignoriert.

* Zeilen, die mit einem "#" beginnen, werden als Kommentar ignoriert.

* Zeilen der Form "@Abschnitt <Name>", wobei folgendes gilt:

+ Alle Folien-Datensàtze, die auf eine derartige Zeile folgen,
erhalten automatisch das Attribut "Abschnitt" mit dem Wert
<Name>.

+ Das Argument <Name> darf nur aus den Zeichen eines Attribut-Werts
bestehen.


Bei jedem Vortrag sind folgende Attribute sinnvoll:

* "Fuer_Vortrag":

Die Folie darf in der eigentlichen Pràsentation enthalten sein,
d.h. wenn man den Vortrag vor den Zuhörern hàlt.

Dies gilt z.B. bei Animationen, die in einem PDF sinnlos wàren,
oder wenn man die Folie aus Copyright-Gründen nur beim Vortrag
selbst zeigen darf.

* "Fuer_Web":

Die Folie darf in Handzetteln oder Notizseiten enthalten sein,
die man als PDF im Web allgemein zugànglich macht.

* "Fuer_Ausdruck":

Die Folie darf in Handzetteln oder Notizseiten enthalten sein,
die man beim Vortrag als Ausdruck verteilt.

* "Details=<xyz>":

Mit diesem Attribut beschreibt man den Detaillierungsgrad der Folie.
<xyz> könnte z.B. die Werte "mittel" oder "hoch" annehmen.


Beispiel für eine Datei "vortrag.index":

# Dies ist die Meta-Datei zu meinem Vortrag "..."

Fuer_Vortrag / Bild, bevor der Vortrag beginnt

Titel=t.1 / Titel-Folie (Variante 1)
Titel=t.2 / Titel-Folie (Variante 2)

Gruppe=zg.1 / Übersichts-Folie für Zielgruppe 1
Gruppe=zg.2 / Übersichts-Folie für Zielgruppe 2
Gruppe=zg.3 / Übersichts-Folie für Zielgruppe 3

@Abschnitt Thema.1

/ Folie "Bla Bla"
/ Folie "Bla Bla"
/ Folie "Bla Bla"

Fuer_Vortrag / Folie "XXX" (Animation)
Fuer_Web Fuer_Ausdruck / Folie "XXX (1)" (Text-Variante)
Fuer_Web Fuer_Ausdruck / Folie "XXX (2)" (Text-Variante)

/ Folie "Bla Bla"
/ Folie "Bla Bla"

@Abschnitt Thema.2

/ Folie "Bla Bla"

Fuer_Vortrag / Cartoon "ABC"

/ Folie "Bla Bla"
/ Folie "Bla Bla"

@Abschnitt Thema.3

/ Folie "Bla Bla"
/ Folie "Bla Bla"

Details=mittel / Folie "Bla Bla"

/ Folie "Bla Bla"

@Abschnitt Thema.4

/ Folie "Bla Bla"

Details=hoch / Folie "Bla Bla"

/ Folie "Bla Bla"
/ Folie "Bla Bla"

# Die folgende Folie darf aus Copyright-Gründen nicht im Web
# veröffentlicht werden.
Fuer_Vortrag Fuer_Ausdruck / Bild "YYY"

@Abschnitt Ende

Gruppe=zg.1 / Fazit-Folie für Zielgruppe 1
Gruppe=zg.2 / Fazit-Folie für Zielgruppe 2
Gruppe=zg.3 / Fazit-Folie für Zielgruppe 3

Fuer_Vortrag / Folie "Noch Fragen"



Aufbau von "gruppe-N.filter"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

"gruppe-N.filter" enthàlt Anweisungen (jeweils eine Zeile),
die bei jeder Folie von oben nach unten abgearbeitet werden.

Folgende Anweisungen sind möglich:

* "LOESCHE FALLS <Bedingung>":

Falls <Bedingung> (s.u.) erfüllt ist, wird die Folie gelöscht
und die folgenden Anweisungen werden nicht mehr ausgewertet.

* "UEBERNEHME FALLS <Bedingung>":

Falls <Bedingung> erfüllt ist, bleibt die Folie erhalten
und die folgenden Anweisungen werden nicht mehr ausgewertet.

* "LOESCHE":

Die Folie wird gelöscht
und die folgenden Anweisungen werden nicht mehr ausgewertet.

* "UEBERNEHME":

Die Folie bleibt erhalten
und die folgenden Anweisungen werden nicht mehr ausgewertet.


"gruppe-N.filter" darf zusàtzlich noch folgende Zeilen enthalten:

* Leere Zeilen werden ignoriert.

* Zeilen, die mit einem "#" beginnen, werden als Kommentar ignoriert.


<Bedingung> kann folgende Formen haben:

* "<Atr-Bedingung>":

Dabei sind für <Atr-Bedingung> folgende Varianten möglich:

+ "<Atr-Name>":

Die Bedingung ist erfüllt, falls bei der Folie das Attribut
mit dem Namen <Atr-Name> definiert ist.
Ein evtl. vorhandener Wert ist dabei gleichgültig.

+ "<Atr-Name>=<Atr-Wert>":

Die Bedingung ist erfüllt, falls bei der Folie das Attribut
mit dem Namen <Atr-Name> definiert ist _und_ dieses Attribut
den Wert <Atr-Wert> besitzt.


* Bei Bedarf kann man Bedingungen mit logischen Operatoren verknüpfen:

+ "NICHT <Bedingung>":

Der Ausdruck ist erfüllt, falls <Bedingung> nicht erfüllt ist.

+ "<Bedingung-1> ODER <Bedingung-2>":

Der Ausdruck ist erfüllt, falls <Bedingung-1> oder <Bedingung-2>
erfüllt ist.

+ "<Bedingung-1> UND <Bedingung-2>":

Der Ausdruck ist nur dann erfüllt, falls sowohl <Bedingung-1> als
auch <Bedingung-2> erfüllt ist.

+ "( <Bedingung> )":

Mit runden Klammern kann man die Auswertungsreihenfolge steuern.


Die folgenden Beispiele für eine Filter-Datei passen zum obigen Beipiel
für "vortrag.index".

Beispiel 1: "gruppe-1.vortrag.filter"

# Diese Filter-Datei gehört zur Zielgruppe 1 beim Vortrag selbst.

# Achtung: Die Reihenfolge der einzelnen Filter-Anweisungen
# ist wesentlich, da sie von oben nach unten abgearbeitet werden.

# Die Variante 1 der Titel-Folie übernehmen; die restlichen
# Titel-Folien löschen.
UEBERNEHME FALLS Titel=t.1
LOESCHE FALLS Titel

# Es werden nur Thema.1, Thema.2 und Thema.4 behandelt.
# Achtung: Wegen der Auswertungsreihenfolge der Filter-Datei
# muss man aber diejenigen Abschnitte löschen, die nicht behandelt
# werden.
LOESCHE FALLS Abschnitt=Thema.3
# Falls man die anderen Abschnitte übernehmen würde,
# wàren die folgenden Lösch-Anweisungen nicht mehr wirksam.

# Jede Folie löschen, die spezifisch für eine Zielgruppe ist
# und nicht für die Zielgruppe 1 gedacht ist.
LOESCHE FALLS Gruppe UND NICHT Gruppe=zg.1
# Man könnte auch folgendes schreiben:
# LOESCHE FALLS Gruppe=zg.2 ODER Gruppe=zg.3
# Wenn allerdings spàter noch eine vierte Zielgruppe dazukommt,
# müsste man diese Anweisung entsprechend anpassen.

# Alle Folien mit einem hohen Detaillierungsgrad löschen.
LOESCHE FALLS Details=hoch

# Jede Folie löschen, die ausschließlich für die Web-
# oder Ausdruck-Variante spezifisch ist.
UEBERNEHME FALLS Fuer_Vortrag
LOESCHE FALLS Fuer_Web ODER Fuer_Ausdruck

# Die restlichen Folien übernehmen.
UEBERNEHME


Beispiel 2: "gruppe-1.web.filter"

# Diese Filter-Datei gehört zur Zielgruppe 1 bei den Handzetteln,
# die im Web zur Verfügung gestellt werden sollen.

UEBERNEHME FALLS Titel=t.1
LOESCHE FALLS Titel

LOESCHE FALLS Abschnitt=Thema.3

LOESCHE FALLS Gruppe UND NICHT Gruppe=zg.1

# Im Web sollen auch Folien mit einem hohen Detaillierungsgrad
# enthalten sein.
# Deshalb ist die folgende Anweisung auskommentiert.
# LOESCHE FALLS Details=hoch

# Jede Folie löschen, die ausschließlich für die Vortrags-
# oder Ausdruck-Variante spezifisch ist.
UEBERNEHME FALLS Fuer_Web
LOESCHE FALLS Fuer_Vortrag ODER Fuer_Ausdruck

UEBERNEHME
 

Lesen sie die antworten

#1 Dr. Eckehard Pfeifer
07/04/2009 - 14:44 | Warnen spam
Hallo, Du musst Dich mit dem Objektmodell von PowerPoint (COM) beschàftigen.
Dann kannst Du das, was Du willst, mit VBScript loesen, indem Du PowerPoint
aus diesem Script automatisierst. Alternativ geht jedes andere COM-fàhige
Produkt, also auch PowerPoint (VBA) selbst. Einen Einstieg findest Du im
Handbuch zu PowerPoint 2007 von MS Press oder in beliebigen andereren
Büchern, die sich mit VBA und Office beschàftigen (nicht notwendig PPT, da
zu VBA nur ein etwas anderes Objektmodell der jeweiligen Anwendung
hinzukommt).

MfG EP
Entwicklung - Beratung - Training (www.dr-e-pfeifer.net)
XL-Maxibuch (ISBN: 3-86645-231-4)
Microsoft Office 2007-Programmierung (ISBN 3-86645-415-5)

Ähnliche fragen