Mehr Features für Office 2000, Teil 1

Mit VBA lassen sich nicht nur Viren, sondern auf einfache Weise auch Ergänzungen für die Office-Suite schreiben. Im ersten Teil unseres zweiteiligen Workshops stellen wir einige Beispiele für Word vor.

Artikel erschienen in Swiss IT Magazine 2001/07

     

Seit den Viren "I Love You" und "Kournikova" hat wohl jeder PC-Anwender von der Programmiersprache Visual Basic (VB) und ihren beiden Unterarten Visual Basic for Applications (VBA) und Visual Basic Script (VBS) gehört. Die Entwicklungsumgebung taugt allerdings nicht nur für die Kreation von Viren - im Gegenteil: Visual Basic ist eine sehr beliebte und relativ einfach zu erlernende Sprache, mit der beispielsweise komplette, umfangreiche Applikationen geschrieben werden können, die sich als EXE-Dateien beliebig verteilen lassen. Zusätzlich kann man mit der Visual-Basic-Familie aber auch kleine Anwendungen für die Automatisierung von Windows (mit dem Windows Scripting Host, vgl. InfoWeek 37/2000) oder die Erweiterung von Office per VBA erstellen. Im Gegensatz zu "echten" Visual-Basic-Programmen können diese allerdings niemals selbständig ablaufen - sie benötigen zur Lauffähigkeit immer eine Anwendung, sei dies nun der Scripting Host oder ein Programm der Office-Suite wie Word oder Excel.



Bekanntlich kann Microsofts Office-Suite sehr vieles, aber längst nicht alles. Nun ist nicht jeder Bug ein fehlendes Feature, aber beides ist ungefähr gleich ärgerlich. Und meist fehlen genau diejenigen Funktionen, die man selber am dringendsten benötigt.




Kein Problem mit VBA. Die seit der Version 97 in die Office-Suite integrierte Programmiersprache erlaubt über eine komplette Entwicklungsumgebung die relativ einfache Erweiterung aller Bestandteile von Office.



In unserem zweiteiligen Workshop betrachten wir einige VBA-Anwendungen für Word, Excel und Outlook. Im vorliegenden ersten Teil liegt der Fokus auf Word, dazu präsentieren wir einige Grundlagen der Office-Programmierung und stellen die Entwicklungsumgebung vor.


Komplette Entwicklungsumgebung

Mit der Standardinstallation von Office 2000 wird die Entwicklungsumgebung von Visual Basic for Applications gleich mit auf die Festplatte gespielt, sollte also auch auf Ihrem PC zur Verfügung stehen. Ist das nicht der Fall, lässt sie sich problemlos von der Office-CD 1 nachinstallieren. Auf der Office-CD finden sich auch die Hilfedateien zu Visual Basic for Applications.



Sind die Programme auf Ihrem Rechner installiert, starten Sie zunächst Word und dann über das Menü Extras - Makro - Visual Basic-Editor die Entwicklungsumgebung. Alternativ funktioniert das auch über die Tastenkombination <ALT> + <F11>.




Der Visual-Basic-Editor mag auf den ersten Blick verwirrend wirken. Allerdings fällt die Handhabung des Programms relativ leicht.



Neben den bekannten Menüleisten und Toolbars besteht die Oberfläche aus drei Fenstern. Oben links findet sich der Projekt-Explorer, in dem eine hierarchisch aufgebaute Liste der Projekte und ihrer Elemente angezeigt wird. Grundsätzlich besteht jedes VBA-Programm aus einem Projekt.



Darunter sieht man das Eigenschaften-Fenster, das die aktuellen Properties eines Objekts anzeigt. Ein Objekt ist jedes Element, das bearbeitet werden kann, also etwa ein Dokument, ein Absatz in Word oder eine Zelle in Excel. Objekte werden typischerweise in Hierarchien gegliedert, gleichartige Objekte in Listen zusammengefasst.



Das dritte Standardfenster ist schliesslich das grosse Codefenster. Hier werden die Makros programmiert und bearbeitet.



Natürlich bietet die VBA-Entwicklungsumgebung noch einige andere Fenster. Darunter finden sich beispielsweise Hilfsmittel zum Debuggen des Codes, aber auch der Objekt-Katalog, der sämtliche Objekte mit ihren Eigenschaften und Methoden auflistet.



Der Visual Basic-Editor unterstützt den Entwickler bei der Programmierung seiner Anwendungen mit einigen speziellen Features. Sehr hilfreich ist etwa die Auto-Vervollständigung: Während man einen Befehl eintippt, zeigt der Editor automatisch eine Liste mit den möglichen Befehlen an, die an dieser Stelle möglich sind. Benutzt man hier nun die <ENTER>-Taste, wird der Befehl vom Editor vervollständigt und eine Zeilenschaltung durchgeführt. Ist letzteres nicht nötig, weil die Befehlszeile noch nicht vollständig ist, benutzt man allerdings besser die Tabulator-Taste, wodurch bloss der Befehl vervollständigt wird.



Wenn möglich sollte man diese Routine des Editors nutzen: Man spart sich damit nicht nur Tipparbeit, sondern kann darüber hinaus auch Tippfehler vermeiden.



Visual Basic kümmert sich übrigens nicht um Gross- oder Kleinschreibung. Dennoch sollte sich der angehende VBA-Programmierer angewöhnen, gewisse Konventionen der Schreibweisen einzuhalten. Ein Überblick über die von Microsoft empfohlenen Konventionen findet sich auf der MS-Site.




Von Eigenschaften und Prozeduren

Jede Anwendung, die in Visual Basic for Applications geschrieben wird, besteht aus bestimmten Elementen. Dazu gehören natürlich zunächst die Dialogfenster, die im VBA-Jargon Formulare oder Forms genannt werden und von denen sich das "Visual" in Visual Basic herleitet. Diese Formulare bestehen ihrerseits aus Objekten, sind selber aber ebenfalls Objekte.



Hinter der grafischen Oberfläche besteht aber auch der Code aus verschiedenen, klar definierten Einzelteilen:





Module: Ein Modul ist ein Container, in dem die einzelnen Prozeduren und Funktionen gespeichert sind. Man unterscheidet zwischen allgemeinen Modulen, in denen sich die von Objekten unabhänigen Prozeduren befinden, und den Formular- oder Berichtsmodulen, die diejenigen Prozeduren beherbergen, die direkt einem Formular oder Bericht sowie den Objekten innerhalb dieser Objekte zugeordnet sind, was hauptsächlich auf Ereignisprozeduren zutrifft. Schliesslich existieren die sogenannten Klassenmodule, die die Definition einer Klasse mitsamt ihren Eigenschaften und Methoden beinhalten.




Prozeduren: Die einzelnen VBA-Befehle werden in Prozeduren gespeichert. Jede Prozedur beginnt mit Sub und dem Namen des Makros gefolgt von Klammern, also beispielsweise Sub Duplex(), und endet mit End Sub. Man unterscheidet zwischen normalen und Ereignisprozeduren. Letztere sind direkt einem Objekt zugeordnet und werden durch ein Ereignis gestartet, beispielsweise durch Anklicken einer Schaltfläche. Normale Prozeduren dagegen werden von anderen VBA-Prozeduren ausgelöst und haben keinen Bezug auf ein Objektereignis.




Funktionen: Anders als eine Prozedur gibt eine Funktion einen Wert aus, führt also eine bestimmte Aufgabe durch und liefert das Resultat. Date beispielsweise zeigt das aktuelle Datum an. VBA bietet eine grosse Zahl an vordefinierten Funktionen, die in der Online-Hilfe beschrieben werden.




Eigenschaften und Methoden: Damit Objekte überhaupt bearbeitet werden können, verfügen sie über Eigenschaften und Methoden. Eine Methode ist dabei generell eine Aktion, die das Objekt ausführen kann und die einen Einfluss auf das Objekt hat. Mit der Methode show beispielsweise wird ein Objekt aufgerufen und sichtbar gemacht. Über die Eigenschaften eines Objekts lassen sich sein Aussehen und sein Zustand verändern, und zwar entweder schon bei der Kreation oder aber zur Laufzeit, also während des Programmablaufs.



Dazu kommen natürlich noch verschiedene weitere Elemente, die in fast jedem VBA-Programm zu finden sind, wie etwa die Ein- und Ausgabeanweisungen (InputBox respektive MsgBox), Variablen (werden mit Dim dimensioniert) oder Konstanten (Const).


Vereinfachter Duplex-Druck

In unserem ersten Projekt zeigen wir Ihnen, wie man längere Word-Dokumente bequem beidseitig ausdrucken kann, ohne dass der Printer über eine Duplex-Einheit verfügen muss. Natürlich kann einem das Makro nicht die ganze Arbeit abnehmen - umdrehen und wieder in den Papierschacht legen müssen Sie das Papier schon selber. Es vereinfacht aber dennoch den anfallenden Arbeitsaufwand bei der Vorbereitung des Duplexdrucks, indem es dafür sorgt, dass die geraden und ungeraden Seiten getrennt ausgedruckt und die Druckreihenfolge automatisch umgekehrt wird - Dinge, die sonst von Hand im Treiber eingestellt werden müssen und oft vergessen gehen.



Öffnen Sie also zunächst Word und wechseln über <ALT> + <F11> in den Visual Basic-Editor. Hier klicken Sie im Projekt-Explorer auf den Eintrag Normal, womit Sie dafür sorgen, dass das Makro in der Standard-Dokumentvorlage normal.dot gespeichert wird und fortan allen Word-Dokumenten zur Verfügung steht.




Der Code für dieses Makro ist simpel. Zunächst benennen Sie die Prozedur und definieren eine Boolsche Variable, die als Werte "Wahr" (True) oder "Falsch" (False) verwalten kann.



Mit Hilfe dieser Variable wird nun die Druckreihenfolge umgedreht, worauf in Zeile 5 die Methode PrintOut die Seiten des aktiven Dokuments mit gerader Seitennummer ausdruckt. Das Argument Background:=False sorgt dabei dafür, dass das Makro nicht weiter ausgeführt wird, während Word die Seiten druckt. Statt dessen wird eine Nachrichtenbox angezeigt, die den Anwender auffordert, das Ende des ersten Druckvorgangs abzuwarten und dann die Seiten wieder in den Papierschacht einzulegen.



Wurde dies durchgeführt und OK angeklickt, läuft das Makro weiter. Nun wird zunächst wieder die Druckreihenfolge umgedreht respektive in den Normalzustand zurückversetzt, bevor wiederum mit der PrintOut-Methode die ungeraden Seiten gedruckt werden. Hier spielt es nun keine Rolle mehr, ob das Makro während des Drucks weiterläuft, das Background-Argument ist deshalb hinfällig.



Nun können Sie das Makro testen. Schliessen Sie dazu den VB-Editor und kehren Sie zu Word zurück - Ihr Makro wird dabei automatisch gespeichert. Nun laden Sie ein grosses Dokument und starten das Makro über Extras - Makro - Makros... oder alternativ über <ALT> + <F8>. Im daraufhin erscheinenden Dialogfenster klicken Sie doppelt auf den Eintrag Duplex.




Makros bequemer aufrufen

Natürlich ist es ein wenig umständlich, wenn das eben geschriebene Makro immer über das Extras-Menü gestartet werden muss. Eleganter wäre es, wenn man dafür einen Button in der Symbolleiste hätte, was sich allerdings problemlos einrichten lässt.



Klicken Sie dazu mit der rechten Maustaste auf diejenige Symbolleiste, in die das Makro eingetragen werden soll. Im erscheinenden Kontextmenü klicken Sie auf den Befehl Anpassen, worauf sich das entsprechende Fenster öffnet.




In der Karteikarte Befehle des Anpassen-Fensters scrollen Sie zum Eintrag Makros, den Sie auswählen. Im rechten Fenster erscheint nun eine Liste aller verfügbaren Makros. Wählen Sie das Duplex-Makro aus und ziehen Sie es mit der Maus auf den richtigen Platz in der gewünschten Symbolleiste. Nun klicken Sie es (bei geöffnetem Anpassen-Dialog!) mit der rechten Maustaste an und machen im erscheinenden Kontextmenü die nötigen Änderungen für Name und Schaltflächensymbol. Schliesslich wählen Sie Standard als Anzeigeart - das Makro ist nun nur noch über sein Symbol sichtbar und zeigt seinen Namen als Tooltip, sobald man mit der Maus darüber verweilt.




Dokumente sicher archivieren

Von Haus aus erzeugt Word Sicherheitskopien von geöffneten Dokumenten, wenn die entsprechende Option unter Extras - Optionen - Speichern aktiviert ist. Allerdings leidet diese an und für sich nützliche Funktion unter einem Makel: Die Sicherheitskopie wird nämlich generell immer im selben Ordner angelegt, in dem sich schon das Original befindet. Falls die Festplatte schaden nimmt, nützt einem die Sicherheitskopie deshalb herzlich wenig.



Sinnvollerweise erstellt man Sicherheitskopien in einem speziellen Ordner, der sich auf einem anderen physikalischen Laufwerk befinden muss. Genau dies ist die Aufgabe des vorliegenden Makros.




Indem das VBA-Modul "DateiÖffnen" genannt und in der Dokumentenvorlage normal.dot gespeichert wird, ersetzt es den normalen Öffnen-Befehl von Word und wird jedes Mal automatisch gestartet, sobald ein Dokument geöffnet wird.



Das Makro lädt zunächst mit Zeile 5 das gewohnte Öffnen-Fenster, in dem man wie üblich die Datei auswählt. Danach wird die Datei in den Zeilen 11 bis 13 mit dem Pfad zum neuen Speicherort sowie einem Datumszusatz versehen und in Zeile 14 gespeichert. Schliesslich zeigt das Makro noch eine Message-Box, die den User über den Ort der Sicherheitskopie informiert.




Interoperabilität mit Excel

In der Version 2000 verfügt Word über eine hervorragende Tabellenfunktion. Rechnen kann man damit zwar nicht, und auch die Visualisierung von Daten ist damit nicht vorgesehen - das ist und bleibt die Domäne von Excel.



Um aus Word-Tabellendaten ein Diagramm zu erstellen, geht man deshalb üblicherweise wie folgt vor: Man startet Excel, kopiert die Daten in ein neues Spreadsheet und kreiert daraus ein Diagramm, das man schliesslich wieder in Word zurückkopiert.




Und das ist genau das, was auch unser Makro macht - allerdings ohne dass man selber noch gross Hand anlegen müsste. Es genügt, in Word die gewünschten Daten zu markieren und das Makro zu starten.



Dieses kopiert die Daten mit der Anweisung in Zeile 6 in die Zwischenablage und startet dann mit der Objektvariablen objXL in Zeile 7 eine neue, unsichtbare Instanz von Excel. Diese öffnet eine neue Arbeitsmappe, kopiert den Inhalt der Zwischenablage in das erste Sheet und erstellt daraus ein Diagramm vom Typ 3D-Säulen (Zeilen 8 bis 13). In Zeile 14 wird die Datenquelle definiert, nämlich der benutzte Bereich (usedRange) der Zellen in Tabelle1; gleichzeitig wird Excel angewiesen, das Diagramm nach den Zeilen auszurichten. Das Diagramm wird nun in ein neues Sheet erstellt und schliesslich in die Zwischenablage kopiert (Zeilen 15 bis 17).



Da Excel seine Arbeit damit beendet hat, wird die Arbeitsmappe mit den Anweisungen der Zeile 18 ungespeichert geschlossen und Excel in Zeile 19 beendet. Zum Schluss weist das Makro den Anwender mit einer Message-Box darauf hin, dass die Diagramm-Kreation beendet ist und er die visualisierten Daten aus der Zwischenablage in sein Word-Dokument einfügen kann.



Natürlich könnte man das Diagramm auch direkt an Word übergeben. Da im Dokument aber immer noch die Tabelle markiert ist, würde diese von ihrer eigenen Visualisierung überschrieben, was nicht immer sinnvoll ist. Mit dem Umweg über die Zwischenablage wird dem Anwender ermöglicht, selber zu entscheiden, wo im Dokument er das Diagramm einfügen möchte.



Im zweiten Teil dieses Workshops, der in der nächsten Ausgabe von InfoWeek erscheint, werden wir Ihnen unter anderem zeigen, wie Sie in Excel mit als Text formatierten Zahlen rechnen und in Outlook Attachments automatisch speichern können.




Offengelegt: Der VBA-Code der InfoWeek-Beispiele

Vereinfachter Duplex-Druck 1 PRE>



GOLD SPONSOREN
SPONSOREN & PARTNER