Previous Page TOC Index Next Page See Page

33

Einsatz von Visual Basic für Applikationen, um Office zu integrieren

Jede Office-Applikation kann als ein extrem mächtiges Werkzeug für sich alleine angesehen werden. Trotzdem benötigen Sie für ein gesamtes Projekt mehrere verschiedene Werkzeuge. Sie brauchen etwa Access und Word, um eine große Menge an Daten in ein hochqualitatives Dokument zu verwandeln.

Visual Basic für Applikationen (VBA) kann die Verbindung für verschiedene Komponenten der Applikationen sein. Sie können VBA dazu verwenden, die Funktionalität jeder Applikation, wie zum Beispiel Excel oder Word, zu erweitern. Dieses Kapitel zeigt ihnen, wie Sie VBA einsetzen können, um eine Mehrfachkomponenten-Applikation zu erstellen. Sie lernen hier, was mit Visual Basic für Applikationen alles möglich ist und wie Sie selbst Applikationen damit erstellen.

Erläuterungen zu VBA

Visual Basic für Applikationen (VBA) ist die Standard-Makrosprache, die in Office 97-Applikationen integriert ist. Zusätzlich dazu hat Microsoft VBA durch Lizenzvergabe für andere Firmen und Software-Entwickler verfügbar gemacht, so daß Sie VBA auch in Ihren Applikationen nutzen können. VBA ist mehr als eine Makrosprache und kann dazu eingesetzt werden, die Funktionalität einer Applikation stark zu verändern oder zu erweitern. Außerdem können Sie Daten aus anderen Applikationen, die ebenfalls VBA benutzten, bearbeiten, manipulieren und auslesen. Dazu gehören zum Beispiel die Applikationen »Visio« oder »AutoCAD«.

Vergleich von Visual Basic mit VBA

Wie Sie wahrscheinlich schon erwartet haben, ist VBA sehr stark mit Visual Basic verbunden. VBA ist ein von Visual Basic abgeleitetes Produkt, das sehr stark für die Verwendung mit Applikationen optimiert wurde. Gleichzeitig ist dies auch der größte Unterscheidungspunkt zwischen den beiden Produkten: Visual Basic kann eingesetzt werden, um Applikationen zu erstellen, die direkt von der Windows 95/NT-Oberfläche aus gestartet werden. VBA-Projekte können nur aus einer Applikation gestartet werden, die selbst VBA beinhaltet.

Es gibt viele Gemeinsamkeiten zwischen Visual Basic und VBA. Die Sprachstruktur ist nahezu identisch; Sie müssen fast nichts Neues lernen, um in VBA-Programme zu schreiben, wenn Sie bereits Erfahrungen mit der Programmierung in Visual Basic haben.

Vergleich von Visual Basic Script mit VBA

Sie haben vielleicht von einer neuen Visual-Basic-Version mit dem Namen Visual Basic, Script Edition (VBScript) gehört. Mit der explosionsartigen Steigerung der Popularität und des Einsatzes des Internets und des World Wide Web (WWW) hat die Geschwindigkeit, mit der Werkzeuge für das World Wide Web entwickelt werden, ebenfalls stark zugenommen. Microsoft hat eine spezielle Version von Visual Basic entwickelt, die WWW-Entwicklern helfen soll, interaktive Inhalte in WWW-Seiten zu verwenden. Mit VBScript können Sie kleinere Applikationen direkt innerhalb von Web-Seiten einsetzen.

Die Möglichkeiten von VBA

Wenn Sie die Flexibilität und große Bandbreite der in Office 97 gebotenen Möglichkeiten mit VBA kombinieren, können Sie sehr mächtige Applikationen erstellen, ohne komplizierte Entwicklungswerkzeuge einzusetzen, die viele Jahre an Einarbeitungszeit oder Erfahrung benötigen. Hier sehen Sie Beispiele für einige der Funktionen und Elemente, die Sie mit VBA realisieren können:

Als Entwickler von VBA-Lösungen sind Sie wahrscheinlich an den folgenden Werkzeugen und Techniken interessiert, die Ihnen helfen, ein VBA-Projekt zu erstellen:

Objekte in VBA

VBA benutzt einige objektorientierte Programmierungskonzepte und Techniken (OOP). Objekte und andere Konzepte von OOP werden fast überall in VBA verwendet. Steuerelemente, die auf Ihren VBA-Formularen erscheinen, werden zum Beispiel so verwaltet, als seien es Objekte. Der Gebrauch von Objekten ist der einzige Weg, um an fremde Applikationen und ihre Daten heranzukommen. Später in diesem Kapitel wird dargestellt, wie VBA-Windows-Objekte verwendet. Am Anfang werden jedoch zunächst Objekte an sich und einige objektorientierte Programmierungskonzepte vorgestellt.

Grundlagen zum Thema Objekte

Bevor Sie etwas über objektorientierte Programmierung (OOP) lernen, müssen Sie das grundlegendste und wichtigste Element von OOP verstehen: das Objekt. Was ist ein Objekt?

Ein Objekt kann alles sein: ein Haus, ein Kühlschrank, ein Motor, ein Tisch... Objekte können Dinge aus der realen Umwelt repräsentieren, wie zum Beispiel die gerade aufgelisteten Gegenstände, aber auch abstrakte Dinge, wie zum Beispiel Listen oder Berechnungen. Objekte sind also Dinge. Was macht sie nun für Ihre Zwecke interessant, und wie werden sie in der Programmierung eingesetzt?

Objekte können verwendet werden, um verschiedene nützliche Dinge innerhalb eines Programmes zu repräsentieren, ohne daß der Programmierer wissen muß, wie das Ding hergestellt wurde oder wie es intern arbeitet.

Ein Beispiel: Sie möchten in Ihrer Applikation einfach und unkompliziert auf Daten aus einer Datenbank zugreifen. Die heutigen relationalen Datenbank-Systeme wie Oracle, Sybase und Microsoft SQL-Server sind im »Normalbetrieb« hierzu viel zu komplex und undurchschaubar. Die Lösung heißt Objekt – nämlich ein einfach anzusprechendes Datenbankobjekt, das bestimmte Ergebnisteile aus der Datenbank an Ihr Programm weiterreicht, ohne daß Sie das »Wie« kennen müssen.

Benutzerschnittstellen-Objekte

In visuellen Programmiersprachen, wie zum Beispiel Visual Basic und VBA, besteht ein wichtiger Teil der Objekte in Ihren Applikationen aus Steuerelementen, die auf den erstellten Formularen erscheinen. Mit Steuerelementen sind die Objekte gemeint, die Sie in Dialogen und Fenstern sehen, mit denen Sie unter Windows jeden Tag arbeiten, wie zum Beispiel Listen, Schaltflächen, Beschreibungsfeldern und Eingabefeldern. All diese Steuerelemente auf dem Formular und auch das Formular selbst sind Objekte. Diese Objekte werden nicht anders behandelt als andere Objekte, die Sie in Ihren Applikationen einsetzen. Im nächsten Abschnitt dieses Kapitels werden Sie sehen, wie Benutzerschnittstellen-Objekte programmiert werden.

Verstehen von Klassen

Klassen sind eng mit Objekten verbunden; eine Klasse ist sozusagen die Konstruktionszeichnung für ein Objekt. Die Klasse legt fest, welche Art von Informationen Sie von dem Objekt erhalten können und zu welchen Aktionen Sie ein Objekt auffordern können. Warum wird dann zwischen Klassen und Objekten Unterschiede?

Um diese Frage zu beantworten, können Sie sich eine Konstruktionszeichnung für ein Haus vorstellen. Mit einer guten Konstruktionszeichnung können Sie wahrscheinlich ein schönes Haus bauen. Vielleicht möchten Sie jedes Modell des Hauses, das Sie bauen, etwas abwandeln, obwohl es aus der gleichen Konstruktionszeichnung entsteht. Trotz der kleinen Änderungen werden alle Modelle sehr ähnlich sein und zur Konstruktionszeichnung passen. Eine Klasse arbeitet wie eine Konstruktionszeichnung, aus der dann Objekte erstellt werden.

Verstehen von Instanzen

Jedesmal, wenn Sie ein Objekt aus einer Klasse erstellen, erstellen Sie etwas, das als »Instanz« der Klasse bezeichnet wird. Die Instanz einer Klasse ist ein Objekt. Sie können so viele Instanzen einer Klasse erstellen, wie Sie benötigen. Das bedeutet, daß Sie so viele Objekte des gleichen Typs erstellen können, wie Sie brauchen. Wenn Sie eine Instanz einer Klasse anlegen, haben Sie die Klasse instantiiert.

Angenommen, Sie haben ein Dateiobjekt. Dieses Dateiobjekt erleichtert ihnen das Lesen und Schreiben aus einer/in eine beliebige Art von Datei. Wenn Ihre Applikation Daten aus einer Datei lesen muß, diese Daten verarbeitet und das Ergebnis dann in einer anderen Datei speichert, werden Sie vielleicht zwei Instanzen des Objekts »Datei« haben: die Eingabedatei und die Ausgabedatei.

Erstellen von Instanzen

Bis jetzt haben Sie etwas über Objekte, Klassen und Instanzen gehört. Werfen Sie nun einen Blick auf ein Stück VBA-Code, der einige dieser Konzepte vorführt.

Wie Sie bereits wissen, müssen Sie zur Erstellung eines Objekts die Instanz einer Klasse erzeugen. Um nahezu alles in VBA erstellen zu können, müssen Sie das Befehlswort Dim verwenden. Mit Dim teilen Sie VBA mit, daß Sie einen bestimmten Datentyp verwenden möchten und daß die Instanzen einen bestimmten Namen haben sollen.

Wenn Sie zum Beispiel den Text Dim X as Integer eingeben, teilen Sie VBA mit, daß Sie X dazu benutzen, Daten vom Typ Integer zu speichern. Der Buchstabe X ist eine Variable, was bedeutet, daß er dazu verwendet werden kann, jede Art von Daten zu repräsentieren, solange es sich, wie in diesem Beispiel, um Daten vom Typ Integer handelt. Sie können das Befehlswort Dim auch dazu verwenden, eine Objektvariable zu deklarieren:

Dim Objekt Objekttyp
Wenn Sie zum Beispiel eine Instanz der Klasse Datei mit dem Namen Arbeitsdatei erstellen wollen, kann ihr Programmcode so aussehen wie hier:

Dim Arbeitsdatei Datei
Sie können die Variable mit dem Namen Arbeitsdatei nun in ihrer Applikation verwenden und können nun jede Fähigkeit oder Funktion der Klasse Datei einsetzen. Die nächsten Abschnitte werfen einen näheren Blick auf die Dienste und Aufgaben von Objekten.

Grundlegendes zu Eigenschaften

Wenn Sie Objekte erstellen oder benutzen, haben Sie natürlich ein Interesse daran, das Objekt weiter einzusetzen. Die einfache Existenz eines Objekt alleine ist nicht besonders interessant. Das Interessante an einem Objekt sind seine Merkmale.

Kehren Sie zum Beispiel des Dateiobjekts zurück. Wenn die Applikation Daten aus einer Datei lesen muß, sind eventuell noch weitere Aspekte der Datei interessant. Dazu gehören zum Beispiel Informationen darüber, wo die Datei gespeichert ist, ob sie im erwarteten Format vorliegt und ob eventuell andere Benutzer oder Applikationen diese Datei bereits verwenden.

Diese Merkmale eines Objekt werden als Eigenschaften bezeichnet. Nahezu alle Objekte besitzen eine Anzahl von Eigenschaften. Die im vorherigen Abschnitt erwähnten Informationen der Datei können als Eigenschaften der Datei angesehen werden.

In VBA gibt es eine spezielle Syntax, um auf die Eigenschaften eines Objekt zuzugreifen. Das Zeichen ».« trennt ein Objekt von seiner Eigenschaft:

Objekt.Eigenschaft

Werfen Sie einen Blick auf einige der Eigenschaften im Objekt Datei. Die folgende Tabelle beschreibt die Eigenschaften und ihre Funktionen:

Eigenschaft

Verwendung

Name

Name der Datei

Beschreibungen

Beschreibung der Datei

WirdVerwendet

Gibt Auskunft darüber, ob die Datei bereits durch eine andere Applikation geöffnet wurde

Länge

Die Länge (in Bytes) der Datei

DatumZeit

Datum und Zeit an dem die Datei zuletzt modifiziert wurde

Hier sehen Sie, wie die Eigenschaften in dem Beispiel mit der Objektinstanz Arbeitsdatei verwendet werden:

Arbeitsdatei.Name
Arbeitsdatei.Beschreibung
Arbeitsdatei.WirdVerwendet
Arbeitsdatei.DatumZeit
Arbeitsdatei.Länge

Auslesen der Werte einer Eigenschaft

Die meisten Objekte, die Sie in einem VBA-Projekt verwenden, besitzen Eigenschaften. Einige dieser Eigenschaften werden Sie vielleicht dem Benutzer einer Applikation zeigen, wie zum Beispiel Datum und Zeit. Eigenschaften können aber auch dazu benutzt werden, die Ausführung einer internen Prozedur zu unterstützen. Egal wozu sie verwendet werden, Eigenschaften sind sehr nützlich und lassen sich in VBA-Code leicht identifizieren. Die folgenden Ausschnitte aus Programmteilen zeigen, wie Sie die Werte einiger der Eigenschaften von Arbeitsdatei auslesen:

MeinDateiName = Arbeitsobjekt.Name
MeineDateibeschreibung = Arbeitsobjekt.Beschreibung
WirdDieDateiVerwendet = Arbeitsobjekt.WirdVerwendet
LetzteDateiÄnderung = Arbeitsobjekt.DatumZeit
WieGroßIstDieDatei = Arbeitsobjekt.Länge


Der Wert einiger Eigenschaften wird in dem Moment festgelegt, in dem das Objekt erstellt wird. Andere Eigenschaften haben den Wert 0, bis sie entweder durch Eingabe des Benutzers der Applikation belegt oder durch eine interne Prozedur initialisiert werden. Das hängt davon ab, wie die Klasse ursprünglich angelegt ist.

Setzen eines Eigenschaftswertes

Zusätzlich zum Auslesen des Wertes einer Eigenschaft eines Objekts ist es sicherlich erforderlich, daß Sie aus verschiedenen Gründen Werte an die Eigenschaften eines Objekt übergeben müssen. Das bedeutet, Sie können einem Objekt Informationen über eines seiner eigenen Merkmale geben.

Die folgenden Ausschnitte zeigen Ihnen, wie Sie Werte an ein paar Eigenschaften der Arbeitsdatei übergeben.

Arbeitsdatei.Name = "Ergebnis.XLS"
Arbeitsdatei.Beschreibung = "Finanzergebnisse für die Gruppenbesprechung"

Grundlagen von Methoden

Der Grund für das Erstellen oder Benutzen eines Objekts ist nicht immer das Festlegen oder Abfragen seiner Eigenschaften. Meistens sind Sie daran interessiert, daß die Objekte Arbeiten für Sie erledigen. Methoden, die auch als Mitglieder-Funktionen bezeichnet werden, sind die Aktivitäten oder Aufgaben, die Sie vom Objekt durchführen lassen können.

Genau wie bei den Eigenschaften ist der ».« das Zeichen, das ein Objekt von seiner Methode trennt:

Objekt.Methode

Angenommen, das Dateiobjekt hat einige Methoden. Diese Tabelle beschreibt die Methoden in diesem Beispiel und ihre Verwendung:

Methode

Verwendung

Öffnen

Öffnet die Datei für die Benutzung durch die Applikation

WertSchreiben

Schreibt einen eigenen Datensatz in die Datei

Schließen

Schließt die Datei

Exportieren

Exportiert Daten aus der Datei in ein anderes Format

Löschen

Löscht die Datei

WertAuslesen

Liest einen Datensatz aus der Datei

Berechnen

Führt eine Berechnung auf den Daten in der Datei durch

Hier sehen Sie, wie einige der Methoden beispielsweise aussehen können, wenn sie mit der Instanz Arbeitsdatei des Objekts Datei verwendet werden.

Arbeitsdatei.Löschen
Arbeitsdatei.Schließen

Einige Methoden benötigen weitere Informationen, um ausgeführt werden zu können. Die Informationen, die Sie einer Methode übergeben, werden als Argumente oder Parameter bezeichnet. Um Parameter an die Methode eines Objekts zu übergeben, müssen Sie Code in folgender Form eintippen:

Objekt.Methode Parameter1, Parameter2,... ParameterN

Aus der Liste von Beispielmethoden benötigen vielleicht die Methoden WertSchreiben und Exportieren zusätzliche Informationen, um ausgeführt werden zu können:

Arbeitsdatei.Exportieren "C:\AlleDaten.ASC"

Arbeitsdatei.WertSchreiben 2, 4, 120


Wie bei den Eigenschaften gilt auch hier, daß die Methoden zu den Klassen gehören. Sie sollten also nicht erwarten, daß eine Methode, die mit einer Klasse funktioniert, auch mit einem Objekt einer anderen Klasse funktioniert. Sehen Sie im Zweifelsfall in der Dokumentation des Objekts nach, um die für Sie notwendigen Methoden herauszufinden.

Die Methode, die als nächstes betrachtet wird, liefert einen Wert an das Programm zurück. Manche Methoden führen eine Aktion durch und liefern dann eine Information zurück, die angibt, ob die Aktion erfolgreich war oder nicht. Andere Methoden liefern einfach einen Datenwert zurück.

Wenn Sie eine Methode verwenden, die Daten zurück liefert, müssen Sie eine Variable bereitstellen, in die der Rückgabewert der Methode gespeichert werden soll. Darüber hinaus muß die Variable vom gleichen Typ sein wie der Rückgabewert der Methode. Wenn die Methode zum Beispiel eine Zeichenkette zurück liefert, kann Ihre Variable nicht vom Typ Integer sein.

Rückgabewert = Objekt.Methode

Die letzte Art von Methoden, die hier gesprochen wird, kombiniert die Aspekte der vorherigen beiden Typen: sie erfordert Parameter und liefert einen Rückgabewert.

Rückgabewert = Objekt.Methode Parameter 1, Parameter2,... ParameterN

Aus der Liste von Beispielen benötigt die Methode WertAuslesen als Parameter die Zeile und die Spalte des Datums, das Sie auslesen wollen, und liefert als Rückgabewert den dort gespeicherten Dateninhalt. Angenommen, das gewünschte Datum befindet sich in Zeile 2 und Spalte 9. Außerdem wissen Sie, daß die zurückgelieferten Daten alle innerhalb des Datentyps Integer liegen:

Dim MeinWert as Integer
MeinWert = Arbeitsdatei.Berechnen (2, 9)

In diesem Beispiel übernimmt die Variable MeinWert den Inhalt des Datensatzes in Zeile 2 und Spalte 9.

Arbeiten mit dem VBA-Editor

Der VBA-Editor ist eine Applikation, mit der Sie VBA-Projekte erstellen. Auch wenn der VBA-Editor wie eine vollständig unabhängige Applikation aussieht, so arbeitet er doch innerhalb desselben Speicherbereichs wie die Applikation, zu der er gehört (wie zum Beispiel Word oder Excel) und ist sehr stark in diese Applikation integriert. In diesem Abschnitt lernen Sie die Merkmale des VBA-Editors kennen und wie Sie Programmcodes schreiben, Formulare erstellen und Ihre Applikation starten und testen.

Starten Ihres VBA-Projekts

Alle VBA-Projekte beginnen in einer Applikation, die VBA als Programmiersprache zur Verfügung stellt. Im Fall von Office 97 können Sie jede Applikation verwenden. Im Falle anderer Applikationen müssen Sie in der betreffenden Dokumentation des Programms nachsehen.

Auswahl der VBA-Basisapplikation

Wenn das Ziel ihres VBA-Projekts das Anpassen oder Automatisieren bestimmter Vorgänge in einer Applikation ist, dann ist es klar, welche Applikation Sie als Basis für Ihr VBA-Projekt wählen. Wenn Sie eine Lösung für mehrere Applikationen mit VBA schreiben möchten, dann sollten Sie die Basisapplikation sorgfältig auswählen. Hier sind zwei Dinge zu berücksichtigen:


Der Zugriff auf Objekte von anderen Applikationen benötigt eine beträchtliche Menge an Ressourcen und sollte so klein wie möglich gehalten werden.

Erstellen des VBA-Projekts

Es gibt drei Wege, ein VBA-Projekt zu erstellen und auf den VBA-Editor zuzugreifen:

  • Aufzeichnen eines Makros mit anschließender Bearbeitung. Diese Technik ist nützlich, wenn Sie einige Schritte aufzeichnen möchten und dann das Makro im VBA-Editor erweitern wollen. Um dies zu tun, zeichnen Sie ein Makro in der Basisapplikation auf. Als nächstes wählen Sie den Menüpunkt Extras/Makro/Makros. Suchen Sie dort das aufgezeichnete Makro aus, und wählen Sie die Schaltfläche Bearbeiten. Der VBA-Editor wird geöffnet und Ihr Makro-Code wird im minimierten Code-Fenster erscheinen. Öffnen Sie das Code-Fenster, um den Makro-Code zu sehen (siehe Bild 33.1).

Abbildung 33.1: Der VBA-Editor zeigt den erstellten Code, wenn Sie ein Makro aufzeichnen.

siehe Abbildung


Das Aufzeichnen eines Makros in der Basisapplikation ist eine einfache Methode, um herauszufinden, wie bestimmte Vorgänge programmiert werden müssen. Sie können die Schritte, die Sie ausführen lassen möchten, simulieren, indem Sie sie aufzeichnen. Bearbeiten Sie danach das gerade ausgezeichnete Makro, und benutzen Sie den Code als eine Schablone.
  • Erstellen eines Makros in der Basisapplikation und nachfolgendes Bearbeiten. Diese Vorgehensweise ist nützlich für das Öffnen des Code-Fensters und das Erstellen einer Schablone für den VBA-Code. Um so vorzugehen, wählen Sie aus dem Menü der Basisapplikation den Punkt Extras/Makro/Makros. Als nächstes geben Sie einen Namen für Ihr Makro ein und klicken auf Erstellen.
    Der VBA mit Editor wird nun geöffnet und zeigt das Code-Fenster an und die Eingabemarke steht auf einer leeren Routine mit dem Namen, den Sie angegeben haben.

Abbildung 33.2: Wenn Sie ein Makro in der Basisapplikation erstellen, wird das Skelett einer Funktion vorbereitet.

siehe Abbildung

  • Direktes Starten des VBA-Editors aus der Basisapplikation. Um VBA ohne Erstellen eines Makros zu starten, wählen Sie den Menüpunkt Extras/Makro/Visual Basic-Editor in der Basisapplikation.

Öffnen eines bestehenden Projekts

Ein Dokument in einer VBA-Basisapplikation kann eine beliebige Anzahl von benutzerdefinierten Formularen, Modulen, Makros und Klassenmodulen besitzen. Eine Zusammenstellung einer, einiger oder aller dieser Teile bildt zusammen Ihr VBA-Projekt. Sie könnten sogar eine ganze Anzahl von VBA-Lösungen in einem Dokument haben. Ein Projekt wird prinzipiell durch die Zusammenstellung von Formularen und Codes definiert, mit denen Sie verschiedene Probleme lösen. Falls noch weitere Formulare oder Programmcodes im Dokument vorhanden sind und nicht benutzt werden, hat das keine Auswirkung auf den Rest des Projektes. Um also ein existierendes Projekt zu öffnen, müssen Sie nur den VBA-Editor aus der VBA-Basisapplikation öffnen, wobei das Dokument, dessen VBA-Code oder dessen Formulare Sie ändern möchten, geladen ist.

Ein Überblick über die Elemente des VBA-Editors

Der VBA-Editor besitzt eine Anzahl verschiedener Werkzeuge, die auf dem Bildschirm angezeigt werden und Ihnen helfen, Applikationen zu erstellen und zu verwalten. Bild 33.3 zeigt die Werkzeuge, mit denen Sie die meiste Zeit arbeiten werden. Der folgende Abschnitt beschreibt, wie Sie diese Werkzeuge einzeln bei

Abbildung 33.3: VBA-unterstützt Sie bei der Entwicklung von Applikationen mit einer Anzahl unterschiedlicher Werkzeuge.

siehe Abbildung

Ihrer Arbeit einsetzen.

Verwenden des Projekt-Explorers

Der Projekt-Explorer ist ein spezielles Fenster im VBA-Editor, das jedes Element des VBA-Projekts zeigt. Die Elemente werden in einem Baumformat gezeigt, durch welches das Durchsuchen und Auswählen der gewünschten Elemente vereinfacht wird. Der Projekt-Explorer zeigt das mit jedem Dokument verbundene VBA-Projekt, und zwar für alle Dokumente, die Sie in der Basisapplikation geöffnet haben. Auf diese Weise können Sie einfach Code oder Formulare von einem Projekt in ein anderes kopieren.

Bild 33.4 zeigt den Projekt-Explorer in Excel, Bild 33.5 das Fenster des Projekt-Explorers in Word.

Abbildung 33.4: Der Projekt-Explorer in Excel zeigt Elemente wie zum Beispiel Mappen oder Tabellen, aber auch Module, Formulare und Klassenmodule.

siehe Abbildung

Abbildung 33.5: Der Projekt-Explorer in Word zeigt Elemente wie Dokumente und Formatvorlagen, aber auch Module, Formulare und Klassenmodule.

siehe Abbildung

Der Projekt-Explorer erleichtert Ihnen die Auswahl bestimmter Objekte, mit denen Sie arbeiten möchten. Nachdem Sie ein Objekt für die Bearbeitung gewählt haben, öffnet der VBA-Editor das passende Werkzeug. Wenn Sie zum Beispiel ein Formular gewählt haben, wird das Formular am Bildschirm angezeigt und der Zugriff auf die Werkzeugsammlung wird ermöglicht. Wenn Sie eine Tabelle gewählt haben, wird diese Tabelle aktiviert.

Es gibt zwei mögliche Wege, um ein Objekt im Projekt-Explorer auszuwählen und zu bearbeiten:

  • Führen Sie einen Doppelklick auf dem Objekt aus.
  • Wählen Sie das Objekt an, klicken Sie mit der rechten Maustaste darauf, und wählen Sie im Kontextmenü den Menüpunkt Objekt anzeigen oder Code anzeigen. Sie müssen diese Wahl treffen, weil einige der Objekte (typischerweise die Dokumente der entsprechenden Applikation – Word-Dokument, Excel-Arbeitsmappe usw.) sowohl über Programmcodes als auch über Schnittstellenelemente verfügen, die Sie betrachten können.

Verwenden des Eigenschaften-Fensters

Das Eigenschaften-Fenster (siehe Bild 33.6) wird verwendet, um die Eigenschaften eines Projektobjekts anzusehen oder zu setzen. Sie könnten das Eigenschaften-Fenster zum Beispiel für das Setzen und Überprüfen der Eigenschaften Ihrer Formulare benutzen, aber auch für Formatvorlagen in Word und Arbeitsmappen und Tabellen in Excel-Projekten. In diesem Fenster erscheinen nur die Eigenschaften, die für das gewählte Objekt relevant sind. Das Eigenschaften-Fenster ist in zwei Bereiche unterteilt. Die Eigenschaften, die mit dem gewählten Objekt verbunden sind, erscheinen in der linken Hälfte des Fensters. Die dazugehörigen Werte der Eigenschaften erscheinen im rechten Teil des Fensters.

Abbildung 33.6: Das Eigenschaften-Fenster gibt eine zentrale Möglichkeit, Eigenschaften für die meisten Elemente Ihrer Applikation zu setzen.

siehe Abbildung

Hier sind noch einige Punkte, die Sie bedenken müssen, wenn Sie das Eigenschaften-Fenster verwenden:

  • Um ein zu bearbeitendes Objekt auszuwählen, können Sie es in der Dropdown-Liste am oberen Ende des Eigenschaften-Fensters auswählen, oder Sie wählen das Objekt direkt aus dem Projekt-Explorer und kehren dann zum Eigenschaften-Fenster zurück.
  • Um eine Eigenschaft zu verändern, wählen Sie die gewünschte Eigenschaft im linken Fensterbereich und klicken dann in den rechten Fensterbereich, um den entsprechenden Wert zu verändern. Einige Eigenschaften lassen nur einen eingeschränkten Wertebereich zu. In solchen Fällen sehen Sie meistens in der rechten Hälfte eine Dropdown-Liste, in der die zulässigen Werte für die betreffenden Eigenschaftn aufgelistet sind.
  • Um die Eigenschaften entweder nach Ihren Kategorien oder in alphabetischer Reihenfolge sortiert zu sehen, wählen Sie die entsprechende Registerseite im Eigenschaften-Fenster.

Verwenden des Code-Fensters

Das Code-Fenster ist die Stelle, an der Sie jede Art von Code eingeben, der mit Ihrem VBA-Projekt verbunden ist. Dazu gehören auch Makro-Routinen, Code, der auf Benutzereingaben, die mit Ihren Formularen zusammenhängen, reagiert, und spezielle Hilfsroutinen, die Sie programmieren, um Ihre gesamte Applikation zu unterstützen.

Das Code-Fenster ist zu sehen, wenn Sie eine der folgenden Aktionen durchführen:

  • Aus dem Projekt-Explorer klicken Sie doppelt auf ein Code-Element in ihrer Applikation, wie zum Beispiel ein Modul oder ein Klassenmodul.
  • Sie führen einen Doppelklick auf irgendeinen Teil eines Formulars oder eines Steuerelements auf einem Formular durch.
  • Sie wählen im VBA-Editor-Fenster den Menüpunkt Code anzeigen. Wenn Sie den Code für ein spezielles Projektelement, wie zum Beispiel eine Tabelle, sehen möchten, stellen Sie sicher, daß Sie dieses Element zuerst im Projekt-Explorer markiert haben.
  • Sie bearbeiten in der Basisapplikation ein Makro.

Nachdem das Code-Fenster dargestellt wird, können Sie Ihren Code direkt in das Fenster eingeben. Hier sehen Sie ein paar Techniken, die Ihnen beim Hinzufügen von Code oder beim Bewegen durch das Fenster nützlich sind:

  • Um eine neue Unterroutine oder Prozedur hinzuzufügen, wählen Sie im VBA-Editor den Menüpunkt Einzufügen/Prozedur. Geben Sie dann dort den Namen der Prozedur an sowie den Typen und ob die Routine als Public oder als Private gilt. Klicken Sie danach auf OK.
  • Um schnell zu einer Routine zu gelangen, die Sie in dem Modul geschrieben haben, an dem Sie gerade arbeiten, wählen Sie in der linken Dropdown-Liste den Eintrag (General). Danach können Sie in der rechten Dropdown-Liste die entsprechende Prozedur auswählen.
  • Um schnell zu einer Ereignisroutine oder einer Methode für ein Bildschirmobjekt zu gelangen, wählen Sie den Namen des Objekts aus der Dropdown-Liste links und suchen dann in der rechten Dropdown-Liste nach der entsprechenden Methode oder dem gesuchten Ereignis.

Das Code-Fenster bietet eine Anzahl von Möglichkeiten, die Ihnen helfen, produktiv zu programmieren.

Syntax-Einfärbung

Verschiedene Teile ihres Codes können in verschiedenen Farben erscheinen. Das hilft ihnen dabei verschiedene Elemente zu identifizieren und zu überprüfen. Kommentare könnten zum Beispiel in rot dargestellt werden, Deklarationen (dim X as Integer) in Blau und markierter Text kann in Blau auf einem gelben Hintergrund dargestellt werden. Sie legen diese Farben im Optionsdialog im Register Editorformat fest. Der Dialog erscheint, wenn Sie den Menüpunkt Extras/Optionen auswählen.

Hilfe zu Objekten

Das Code-Fenster kann Ihnen beim Schreiben von Code mit Objekten helfen, wenn Sie eingebaute Routinen verwenden, die VBA kennt. Wenn das Code-Fenster den angegebenen Code erkennt, wird eine spezielle Nachrichtenbox angezeigt, die Ihnen hilft, die korrekte Syntax anzugeben.

Wenn Sie zum Beispiel folgendes eingeben:

Dim VariablenName as

wird der Editor automatisch eine Liste aller Objekte und Datentypen zeigen, die er kennt.

Abbildung 33.7: Das Code-Fenster zeigt eine Liste aller bekannten Objekte und Datentypen, wenn Sie versuchen, eine neue Variable zu deklarieren.

siehe Abbildung

Wie Sie in einem späteren Abschnitt noch sehen werden, müssen Sie eine Referenz zu Objekten einer anderen Applikation hinzufügen, wenn Sie vorhaben, eines der Objekte einer anderen Applikation in Ihrem VBA-Projekt zu benutzen. Wenn Sie eine solche Referenz eingefügt haben, wird VBA Ihnen die Objekte der anderen Applikation in der Objektliste zur Verfügung stellen.

Hilfe zu Programmroutinen

VBA unterstützt Sie bei der Verwendung der zur Verfügung gestellten Routinen, indem Sie die richtige Syntax der Routine angezeigt bekommen, wenn VBA vermutet, daß Sie mit dieser entsprechenden Funktion arbeiten. Wenn Sie den Namen einer Funktion oder Unterroutine eingeben, die von VBA zur Verfügung gestellt wird, erscheint ein Nachrichtenfenstern, das Ihnen die benötigten Parameter, ihre Datentypen und die richtige Reihenfolge der Parameter anzeigt. Dadurch wird es wesentlich schwieriger, Fehler beim Verwenden solcher Funktionen zu machen.

Bild 33.8 zeigt ein Beispiel, in dem VBA Ihnen hilft, die Funktion MsgBox (zeigt ein Benachrichtigungsfenster) zu verwenden.

Abbildung 33.8: Die Routine MsgBox benötigt eine bestimmte Anzahl von Parametern. Wenn Sie M S G B O X eingeben, öffnet VBA ein Fenster, das Ihnen die korrekte Syntax der Routine zeigt.

siehe Abbildung


Wenn Sie den Namen einer VBA-Routine im Code-Fenster eingeben, kann es sein, daß einer oder mehrere der angezeigten Parameter fett dargestellt werden. Diese Parameter sind erforderlich. Die nicht fett gedruckten Parameter sind optional, wie zum Beispiel der Parameter »Titel« in Bild 33.8. Beachten Sie, daß der Parameter »Prompt« (der Text, der im Nachrichtenfenster erscheint) der einzige Parameter ist, der fettgedruckt erscheint. Er ist also der einzige erforderliche Parameter.

Erstellen von Formularen

Wahrscheinlich wird Ihr VBA-Projekt das eine oder andere selbst definierte Formular benötigen. In VBA haben Sie eine Vielzahl von Möglichkeiten, solche Formulare zu erstellen. Die Formulare können eingesetzt werden, um entweder Daten vom Benutzer zu bekommen oder Daten für den Benutzer darzustellen.

Ein solches Formular kann genauso eingesetzt werden wie alle anderen Dialoge, die Sie aus anderen Office-Applikationen bereits kennen, wie zum Beispiel der Dialog Öffnen oder der Dialog Drucken.

Einfügen von Formularen in Ihr Projekt

Um ein Formular in Ihr Projekt einzufügen, müssen Sie die folgenden Schritte ausführen:

  • Wenn mehr als ein Projekt in VBA geöffnet ist, wählen Sie im Projekt-Explorer das Projekt, zu dem Sie ein Formular hinzufügen möchten.
  • Wählen Sie den Menüpunkt Einfügen/UserForm. Daraufhin erscheint ein leeres Formular und die Werkzeugsammlung auf dem Bildschirm.

Abbildung 33.9: VBA erzeugt ein leeres Formular, wenn Sie ein neues Formular in das Projekt einfügen.

siehe Abbildung

  • Aus dem Menü des VBA-Editors wählen Sie den Punkt Ansicht/Eigenschaftenfenster.
  • Geben Sie hier die Eigenschaften für ihr neues Formular an, wie zum Beispiel den Namen.

Anzeigen der Werkzeugsammlung

VBA stellt in der Werkzeugsammlung eine Gruppe von Steuerelementen zur Verfügung, die Sie in Ihren Formularen verwenden können. Wenn Sie die Werkzeugsammlung nicht auf dem Bildschirm sehen, wählen Sie den Menüpunkt Ansicht/Werkzeugsammlung. Die Werkzeugsammlung verschwindet immer dann, wenn Sie mit einem anderen Objekt als einem Formular arbeiten, zum Beispiel auch im Eigenschaftenfenster. Sie erscheint sofort wieder, wenn Sie auf ein Formular klicken.

Hinzufügen zusätzlicher Steuerelemente in die Werkzeugsammlung

Zusätzlich zu den Steuerelementen, die von VBA zur Verfügung gestellt werden, gibt es eine große Anzahl weiterer Steuerelemente, die für Ihre Arbeit zur Verfügung stehen. Sie haben vielleicht bereits zusätzliche Steuerelemente in Ihrem System. Es kann sein, daß Sie durch eine andere Applikation von Microsoft oder eines anderen Herstellers installiert wurden. Sie könnten auch zusätzliche Steuerelemente in Werbungen verschiedener Hersteller finden, die speziell für C++/Visual Basic erstellt wurden.

Um zu sehen, ob zusätzliche Steuerelemente zur Verfügung stehen, die Sie in Ihrem Projekt verwenden können, folgen Sie diesen Schritten:

  • Wählen Sie als aktives Objekt irgendein Formular in Ihrem Projekt. Dazu können Sie den Projekt-Explorer verwenden. Öffnen Sie den Projekt-Explorer, und führen Sie einen Doppelklick auf den Namen des Formulars aus.
  • Wählen Sie den Menüpunkt Extras/weitere Steuerelemente. Der Dialog Weitere Steuerelementen erscheint.

Abbildung 33.10: Sie können zusätzliche Steuerelemente in Ihre Werkzeugsammlung über den Dialog Weitere Steuerelemente einfügen. Durch die Auswahl zusätzlicher Werkzeuge können verschiedene Werkzeugsammlungen auch verschieden aussehen.

siehe Abbildung

  • Stellen Sie sicher, daß die Option Nur ausgewählte Elemente nicht aktiviert ist. Jedes der in Ihrem System registrierten Steuerelemente wird nun in der Liste auftauchen.
  • Wählen Sie das Steuerelement aus, das Sie in Ihrem Projekt verwenden möchten, indem Sie das Optionsfeld neben dem Namen des Objekts aktivieren.
  • Klicken Sie auf OK. Das Objekt wird nun in Ihrer Werkzeugsammlung auftauchen.

Plazieren von Steuerelementen auf Formularen

Nachdem Ihre Werkzeugsammlung über alle Steuerelemente verfügt, die Sie benötigen, ist es an der Zeit, damit zu beginnen, Steuerelemente in Ihre Formulare einzufügen. Führen Sie dazu nur diese Schritte durch:

  • Wählen Sie das Formular, welches Sie mit neuen Steuerelementen erweitern möchten.
  • Klicken Sie auf das Steuerelement in der Werkzeugsammlung, das Sie hinzufügen möchten, und klicken Sie danach irgendwo auf das Formular. Das Steuerelement wird nun im Formular auftauchen.
  • Klicken Sie auf das Steuerelement im Formular, und ziehen Sie es an die richtige Stelle.
  • Klicken Sie auf eine der Randlinien des Steuerelements, und ziehen Sie sie in die entsprechende Richtung, um das Steuerelement zu vergrößern oder zu verkleinern. Sie können dies auch mit dem Formular an sich durchführen.

Schreiben von Code für Steuerelemente auf dem Formular

Sie werden auf dem Formular Steuerelemente verwenden, um Eingaben des Benutzers aufzunehmen und um Informationen an den Benutzer zurück zu liefern. Das Plazieren von Steuerelementen auf dem Formular informiert VBA nur darüber, daß diese Elemente auf einem Formular in einem Projekt existieren. Jedes Objekt der Benutzerschnittstelle hat bestimmte Eigenschaften und Ereignisse, die mit ihm verknüpft sind. Es liegt an Ihnen, den Code zur Verfügung zu stellen, der abläuft, wenn ein solches Ereignis geschieht, und es ist Ihre Aufgabe, die richtige Einstellung der Eigenschaften vorzunehmen.

Hier sind ein paar Beispiele für Situationen, in denen Sie eventuell Programmcode mit einem bestimmten Ereignis verknüpfen oder in denen Sie spezielle Eigenschaften setzen möchten:

  • Beginn einer Berechnung, wenn der Benutzer auf die Schaltfläche OK klickt.
  • Schließen eines Dialogs, wenn der Benutzer auf die Schaltfläche Abbrechen klickt.
  • Abspeichern eines Elements in einer Liste, das der Benutzer ausgewählt hat.
  • Deaktivieren bestimmter Steuerelemente, die nicht einsetzbar sein sollen, wenn ein Benutzer eine bestimmte Option ausgewählt hat.

Das zur Verfügungstellen von Code, der mit einem Formularobjekt verknüpft ist, ist sehr einfach. Es gibt zwei grundsätzliche Methoden, um dies zu tun:

  • Führen Sie einen Doppelklick auf ein Steuerelement des Formulars aus. Das Code-Fenster erscheint, wobei es bereits auf das Steuerelement eingestellt ist, auf das Sie geklickt haben. Wählen Sie das Ereignis, auf das Sie reagieren möchten, aus der Dropdown-Liste rechts oben im Fenster. Geben Sie den Code in die Vorgabe für die Unterroutine ein (siehe Bild 33.11).
  • Klicken Sie einmal auf das Steuerelement, und wählen Sie im VBA-Editor den Menüpunkt Ansicht/Code. Wählen Sie das Ereignis, auf das Sie reagieren möchten, aus der rechten Dropdown-Liste. Geben Sie den Code in der Vorgabe für diese Unterroutine ein.

Abbildung 33.11: Das Formular zeigt eine Schaltfläche mit dem Namen MeineSchaltfläche. Die Beschriftung lautet OK. Im Eigenschaften-Fenster werden die Eigenschaften des Steuerelements angezeigt, und das Code-Fenster ist für das Click-Ereignis geöffnet.

siehe Abbildung

Formatieren Ihres Formulars

Mit dem VBA-Editor ist das Formatieren auf leichte Weise möglich, und er unterstützt generell das Erstellen eines strukturiert aussehenden Formulars. Mit VBA können Sie zum Beispiel Steuerelemente so ausrichten, daß sie nicht so aussehen, als seien sie auf zufälligen Positionen auf dem Formular verstreut. Bild 33.12 zeigt eine Reihe von Schaltflächen mit unterschiedlichen Größen, die beliebig auf einem Formular verteilt sind. Bild 33.13 zeigt, wie das Formular nach der Verwendung der Befehle Format/Größe angleichen/Beides und Format/Schaltflächen ausrichten/Rechts aussieht.

Abbildung 33.12: Die Schalflächen in diesem Dialog haben eine zufällige Größe und sind beliebig auf dem Formular plaziert.

siehe Abbildung

Abbildung 33.13: Nun ist die Anordnung und das Aussehen mit Hilfe des VBA-Editors verbessert worden.

siehe Abbildung

Um die Steuerelemente auf Ihrem Formular auszurichten, wählen Sie die Steuerelemente an, und suchen Sie danach den entsprechenden Befehl im Menü Format. Das Formatieren Ihrer Formulare erfordert häufig das gleichzeitige Markieren mehrerer Steuerelemente. Um mehrere Steuerelemente auszuwählen, klicken Sie auf das erste Steuerelement, und halten Sie dann die Taste (Umschalt) gedrückt, während Sie die anderen Steuerelemente auswählen. Solange Sie die (Umschalt)-Taste gedrückt halten, können Sie auch auf ein bereits gewähltes Steuerelement klicken, um dieses wieder zu deaktivieren. Sie können auch die Taste (Strg) gedrückt halten, um mehrere zufällig angeordnete Steuerelemente auszuwählen.

Hinzufügen eines Moduls zu Ihrem Projekt

Abhängig von der Größe und dem Entwurf Ihres Projektes werden Sie eventuell eine Anzahl von Hilfsroutinen in Ihrem Code entwickeln, die Sie an vielen Stellen Ihrer Applikation einsetzen. Eventuell speichern Sie diese Routinen separat vom Rest Ihrer Applikation. In einem anderen Szenario werden Sie Ihre Code-Elemente vielleicht in einige wenige Code-Module unterteilen, wobei jedes Modul zusammengehörige Routinen beinhaltet. VBA unterstützt diese Art von Arbeit, indem es ihnen erlaubt, Ihren Code in Module zu legen.

Um ein Modul zu Ihrem VBA-Projekt hinzuzufügen, führen Sie diese Schritte durch:

  • Wenn mehr als ein Projekt geöffnet ist, benutzen Sie den Projekt-Explorer, um den Namen des Projekts zu aktivieren, zu dem Sie ein Modul hinzufügen möchten.
  • Aus dem Menü des VBA-Editors wählen Sie den Punkt Einfügen/Modul. Ein leeres Code-Fenster erscheint auf dem Bildschirm.
  • Im Eigenschaften-Fenster legen Sie den Namen des Moduls fest.

Hinzufügen von Klassenmodulen

Wie Sie bereits vorher in diesem Kapitel gesehen haben, sind Objekte Instanzen von bestimmten Klassen. Sie haben auch gesehen, daß Objekte für die Programmierung sehr nützlich sein können, weil ihre Benutzung Ihren Code lesbarer gestaltet, die Wartung des Programms vereinfacht und weil Objekte oft durchdachter entwickelt sind.

VBA bietet ihnen Unterstützung beim Erstellen ihrer eigenen Objekte. Sie können das weiter oben benutzte Objektbeispiel »Arbeitsdatei« als Probebeispiel implementieren. Sie können auch die Eigenschaften und Methoden des Objekt dabei einrichten.

Der gesamte Programmcode, der verwendet wird, um ein Objekt zu erstellen, also auch der Code seiner Eigenschaften und seiner Methoden, ist in einem Klassenmodul gesammelt. Ein Klassenmodul benutzt den gleichen Namen, wie das Objekt, das in ihm erstellt wird. Wenn Ihr Objekt zum Beispiel den Namen WebSeite trägt, so würde dies im Klassenmodul WebSeite definiert. Alle Klassenmodule eines Projektes werden im Projekt-Explorer unter der Überschrift Klassenmodule angezeigt.

Klassenmodule werden auf die gleiche Weise programmiert wie die anderen Elemente ihres VBA-Projektes. Eine spezielle Syntax wird jedoch an den Stellen verwendet, an denen die Eigenschaften und Methoden eines Objekt festgelegt werden. Um ein Klassenmodul in Ihr Projekt einzufügen, wählen Sie den Menüpunkt Einfügen/Klassenmodul.

Umschalten zur Basisapplikation

Wenn Sie Ihr VBA-Projekt erstellen, möchten Sie vielleicht zur Basisapplikation zurückschalten, ohne Ihr Projekt oder die Applikation schließen zu müssen. Hier sind ein paar Wege aufgezeichnet, um dies zu tun:

  • Im Projekt-Explorer klicken Sie mit der rechten Maustaste auf das Objekt, das Sie sehen möchten, wie zum Beispiel ein Word-Dokument. Aus dem Kontextmenü wählen Sie dann den Punkt Objekt anzeigen.
  • Wählen Sie den Punkt Ansicht/Objekt aus dem Menü des VBA-Editors.
  • Wählen Sie im Menü des VBA-Editors den Punkt Ansicht, und wählen Sie dort den letzten Menüpunkt. Dies ist normalerweise die Basisapplikation.
    Nachdem Sie zur Basisapplikation geschaltet haben, möchten Sie eventuell zu ihrem VBA-Projekt zurückkehren. Auch dazu gibt es ein paar Möglichkeiten:
  • Wählen Sie den Menüpunkt Extras/Makros/Visual Basic Editor in der Basisapplikation.
  • Wählen Sie aus der Task-Leiste von Windows 95/NT Visual Basic aus.

Speichern Ihrer Arbeit

Der Programmcode, die Formulare und Module, die Sie mit VBA erstellt haben, sind mit einer speziellen Basisapplikation und einem Dokument innerhalb dieser Applikation verknüpft. Wenn Sie zum Beispiel einen bestimmten Assistenten entwickeln, der für spezielle Serienbrief-Funktionen nützlich ist, falls das Dokument von einer speziellen Formatvorlage erstellt wurde, dann ist das VBA-Projekt mit der Formatvorlage in Word verknüpft. Das Abspeichern des VBA-Projektes geschieht also nur, wenn Sie das Dokument in der Basisapplikation abspeichern.

Um ein Dokument von VBA aus zu speichern, wählen Sie den Menüpunkt Datei/Speichern. Dies sichert alle Änderungen, die Sie im Dokument vorgenommen haben, und alle Änderungen im VBA-Projekt.


Wenn Sie versuchen, aus VBA heraus zu speichern und dem Basisdokument noch keinem Namen gegeben haben (zum Beispiel, wenn Sie Excel starten und sofort VBA öffnen und mit der Programmierung beginnen), werden Sie in VBA nach einem Namen für das Basisdokument gefragt.

Arbeiten mit Applikationsobjekten

Bereits zu Beginn dieses Kapitels haben Sie gesehen was Objekte sind und wie sie in der Programmierung eingesetzt werden. VBA benutzt die OLE (Object Link and Embedding)-Technologie, um die Kommunikation und Integration verschiedener Office 97 Applikationen und auch die Anwendung anderer Applikationen mit OLE zu bewerkstelligen.

Sie können OLE auf zwei verschiedene Arten in Ihrem Projekt einsetzen:

  • VBA und OLE Server
  • VBA- und OLE-Automatisierung

VBA und OLE Server

Ein weiteres Element, das Sie in ihre VBA-Projekte integrieren können, sind einfügbare Objekte. Einfügbare Objekte sind eine Implementation von OLE. Durch die Möglichkeit einfügbarer Objekte können Ihre Office 97-Dokumente, wie zum Beispiel Excel-Arbeitsmappen oder Word-Dokumente, in fremden Applikationen auftauchen. Diese eingefügten Objekte erscheinen wie ein normaler Teil des Dokument, in das sie eingebettet sind. Wenn Sie zum Beispiel ein Dokument ausdrucken, das ein eingefügtes Objekt enthält, ist es normalerweise unmöglich, am Ausdruck zu erkennen, daß die Daten aus einem eingefügten Objekt stammen. Die eigentliche Stärke eines eingefügten Objekts wird dann offensichtlich, wenn Sie das Basisdokument in der Basisapplikation öffnen. Wenn Sie dann auf irgendeinen Teil des eingebetteten Objekts klicken, wird die mit dem eingebetteten Objekt verknüpfte Applikation gestartet und übernimmt die Kontrolle für die eigentliche Basisapplikation des Dokuments. Die Menüstruktur veränderte sich so, wie es die Basisapplikation für das eingebettete Objekt benötigt. Wenn eine Applikation innerhalb einer anderen Applikation als ein eingefügtes Objekt läuft, wird diese Applikation als OLE Server bezeichnet.

Um einfügbare Objekte zu Ihrem Projekt hinzuzufügen, folgen Sie diesen Schritten:

  • Wählen Sie irgendein Formular als das aktive Objekt in ihrem Projekt.
  • Wählen Sie den Menüpunkt Extras/Weitere Steuerelemente. Der Dialog Weitere Steuerelemente (siehe Bild 33.10) erscheint.
  • Achten Sie darauf, daß die Option Nur ausgewählte Elemente nicht aktiviert ist.
  • Wählen Sie nun das Objekt aus, das Sie zu Ihrem Projekt hinzufügen möchten, in dem Sie das Auswahlfeld neben dem Objektnamen aktivieren.
  • Klicken Sie auf OK. Das Objekt erscheint nun in der Werkzeugsammlung.

VBA- und OLE-Automatisierung

Viele der heutigen Applikationen kennen und nutzten die Vorteile von OLE. Das bedeutet, daß Sie sich selbst und Ihre Daten über die OLE-Automatisierung anderen Applikationen und Entwicklungsumgebungen zur Verfügung stellen. Wie funktioniert dies?

Wenn eine OLE-Applikation unter Windows 95 oder Windows NT installiert wird, registriert Sie sich selbst beim Betriebssystem. Die Liste der OLE Server, die auf einer Plattform installiert sind, ist für jede Applikation erreichbar. VBA zeigt eine Liste der registrierten Applikationen im Dialog Verweise.

Da ein VBA-Projekt immer zu einer bestimmten Applikation gehört, sind alle Verweise auf die Objekte der speziellen Applikation bereits automatisch zu jedem VBA-Projekt hinzugefügt. Wenn Sie zum Beispiel ein VBA-Projekt aus Word heraus erstellen, müssen Sie nichts weiter tun, um Word-Objekte benutzen zu können. Wenn Sie jedoch auf Objekte aus Outlook oder Excel zugreifen möchten, müssen Sie die entsprechenden Verweise auf die Applikationen hinzufügen.

Wenn Sie das tun, erlangt ihre Basisapplikation Kenntnis der Objekte in den anderen Applikationen. Die Verweise werden in einer Datei gespeichert, die als Typ-Bibliothek oder Objekttyp-Bibliothek bezeichnet wird. Diese Dateien enden meist mit der Dateierweiterung TLB oder OLB. Die Referenzen können auch in einer DLL oder einer EXE-Datei gespeichert werden.

Um eine Referenz zu einem OLE-Automatisierungsobjekt in ein VBA-Projekt einzufügen, führen Sie diese Schritte durch:

  • Wählen Sie den Menüpunkt Extras/Verweise. Der Dialog Verweise erscheint (siehe Bild 33.14).
  • Blättern Sie durch die Liste, um die gewünschte Referenz hinzuzufügen. Wählen Sie die Referenz aus, in dem Sie das Optionsfeld aktivieren.

Abbildung 33.14: Der VBA-Editor zeigt Ihnen eine Liste der verfügbaren Verweise.

siehe Abbildung

  • Wenn Sie die gesuchte Referenz nicht finden können, wählen Sie die Schaltfläche Suchen. Blättern Sie nun durch die Verzeichnisse Ihres Systems, um die Objektbibliothek mit den gewünschten Applikationsobjekten zu finden. Die Dateien haben für gewöhnlich die Erweiterungen OLB, TLL DLL oder EXE. Klicken Sie dann auf OK.
  • Wählen Sie die Schaltfläche OK im Dialog Verweise.

Wie Sie bereits früher gesehen haben, nutzt VBA die Vorteile der OLE-Automatisierung. Das bedeutet, Sie können Objekte von anderen Applikationen in Ihrem Projekt verwenden und dieses Projekt für andere Applikationen ausrichten. In Word 97 können Sie beispielsweise Daten aus Excel 97 manipulieren, indem Sie Excel-Objekte einsetzen. Natürlich unterscheidet sich die Aufmachung und die Struktur der Objekte, die von Excel zur Verfügung gestellt werden, stark von der anderer Applikationen, wie zum Beispiel PowerPoint. Das bedeutet, daß die Objekte, die von einer Applikation zur Verfügung gestellt werden, in ihrer Art der Interaktion so unterschiedlich sind, wie die eigentlichen Applikationen auch. Eine Excel-Arbeitsmappe beinhaltet zum Beispiel verschiedene Arbeitsblätter. Jedes dieser Arbeitsblätter kann von einem anderen Typ sein (Dialog, Arbeitsblatt, Diagramm). Es gibt keine vergleichbare Basis für die Objekte in Word, PowerPoint oder Visio, also müssen sich auch ihre Objektmodelle von denen der Excel-Objekte unterscheiden. Das Verständnis für die Objektmodelle hilft Ihnen dabei zu verstehen, wie Sie diese Applikationen programmtechnisch manipulieren, entweder von der Basisapplikation aus oder von einer anderen Applikation. Jede Applikation, die ihre Daten und Funktionalität über OLE-Automatisierung preisgibt, wird auch eine entsprechende Dokumentation zur Verfügung stellen, die beschreibt, wie die Objekte zusammenarbeiten. Diese Dokumentation wird entweder in gedruckter Form als Handbuch, als Online-Hilfe oder in Form einer Beispielapplikation oder jeder möglichen Kombination dieser Punkte vorliegen.

Reale Anwendungsprogrammierung mit VBA

Nachdem Sie nun eine Einführung in die Grundlagen von VBA bekommen haben, ist es an der Zeit zu zeigen, wie Sie dieses Werkzeug in realen Anwendungssituationen einsetzen können. In diesem Abschnitt wird VBA dazu verwendet, zwei verschiedene Arten von Applikationen zu erstellen:

  • Microsoft Excel
  • Die Win32 API

Diese beiden Applikationen unterscheiden sich so stark voneinander, daß Sie einen Begriff für die unterschiedlichen Arten von Lösungen, die Sie erstellen können, und die vielfältigen Anforderungen, die Sie erfüllen können, bekommen werden. Excel ist eine Applikation, die extrem viele Funktionen besitzt und dadurch sehr kompliziert ist. Außerdem ist sie einer der Kernpunkte des Microsoft-Office-Paketes. Zu lernen, wie Excel programmiert wird, gibt Ihnen einen guten Überblick für das Arbeiten mit anderen Applikationen, wie zum Beispiel Word oder der Office-Menüleiste. Das Verwenden der Win32 API ist eine gute Möglichkeit, leistungsstarke Funktionalitäten in Ihre VBA-Lösungen einfließen zu lassen. Sie sollten also auf jeden Fall von den Hinweisen und Strategien, die hier bezüglich der Programmierung der API gezeigt werden, profitieren. Natürlich ist hier nicht genügend Platz, um die Programmierung von Excel und der API bis ins Detail auszuführen, aber Sie bekommen sicherlich einen guten Eindruck davon, was alles möglich ist und wie Sie ähnlich gelagerte Aufgaben lösen können.

Programmieren von Microsoft Excel

Das Excel-Objektmodell ist groß, aber gut organisiert und einfach zu verwenden. Dieser Abschnitt führt Sie durch die Benutzung der wichtigen Objekte in dem Modell und zeigt Ihnen, wie Sie sie programmieren und integrieren und VBA-Lösungen für Excel-Applikationen erstellen.

Arbeiten mit dem Excel-Applikationsobjekt

Das Excel-Applikationsobjekt gibt ihn Zugriff auf die oberste Ebene von Objekten innerhalb der Excel-Klassenhierarchie. Sie können verschiedene Elemente der Applikation über dieses Objekt steuern, wie zum Beispiel das Darstellen der Statuszeile, der Funktionszeile, das Verhalten der Applikation, nachdem der Benutzer die (Eingabetaste)-Taste gedrückt hat, und auch Informationen über die Excel-Installation abrufen (Pfad- oder Versionsinformationen).

Der folgende Programmausschnitt zeigt, wie Sie die Excel-Applikation mit Hilfe des Objekts kontrollieren. Die ersten Zeilen des Ausschnitts erzeugen eine Instanz der Excel-Applikation. Dies geschieht mit dem Schlüsselwort CreateObjekt, um auf eine Objektklasse zu verweisen. In diesem Fall ist die Klasse eine Excel-Applikation.

Dim objExcelApp As Excel.Application
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.DisplayStatusbar = False
objExcelApp.DisplayFormulaBar = False
objExcelApp.MoveAfterReturn = True
MsgBox objExcelApp.Path
objExcelApp.Visible = True

Sie können das Applikationsobjekt dazu benutzen, bestimmte Aufgaben in der Applikation ablaufen zu lassen, wie zum Beispiel das Anzeigen eines Dialogs oder das einfache Herunterfahren der Applikation. Das folgende Code-Beispiel zeigt, wie eine Instanz von Excel gestartet und dem Benutzer angezeigt wird. Es wird der Dialog Öffnen dargestellt, die Applikation wird geschlossen, ohne Warnhinweise für den Benutzer auszugeben:

Dim objExcelApp As Excel.Application
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.FindFile
objExcelApp.DisplayAlerts = False
objExcelApp.Quit

Finden und Starten einer Excel-Applikation

Die Beispiele im vorherigen Abschnitt haben eine Instanz von Excel erzeugt, wenn sie gestartet wurden. Es kann aber gut sein, daß Excel bereits läuft, wenn Sie Ihr VBA-Projekt starten, unabhängig davon, ob dies automatisch oder durch den Benutzer geschieht. Wenn das VBA-Projekt durch eine andere Applikation als Excel ausgeführt wird, dann kann es sein, daß es erforderlich ist, ein Applikationsobjekt zu erstellen, das auf der bereits laufenden Instanz von Excel basiert, anstatt eine neue Instanz zu erstellen. Um ein Applikationsobjekt zu erstellen, das auf einer laufenden Instanz beruht, müssen Sie das Befehlswort GetObject verwenden. Hier sehen Sie ein Beispiel:

Dim objExcelApp As Excel.Application
Set objExcelApp = GetObject("", "Excel.Application")

Verwenden der Workbooks-Auflistung

Die Workbooks-Auflistung wird verwendet, um mit allen in Excel geöffneten Arbeitsmappen-Objekten (Workbooks) arbeiten zu können. Der folgende Ausschnitt aus einem Programmcode gibt den Namen von jedem geöffneten Workbook in der aktuellen Excel-Applikation im Direktfenster aus:

For Each X In Workbooks
Debug.Print X.Name
Next

Sie können das Workbook-Objekt auch dazu benutzen, ein neues Workbook in Excel zu erstellen, das der Benutzer sehen und benutzen kann:

Workbooks.Add

Um ein bestimmtes Workbook Objekt zu erfüllen, zum Beispiel eines, das unter einem bestimmten Dateinamen (wie »BUDGET.XLS«) gespeichert ist, können Sie folgende Zeile eingeben:

Workbooks.Open (Filename := "C:\BUDGET.XLS")

Wenn Sie die Gesamtanzahl der in Excel geöffneten Workbooks auslesen möchten, können Sie so vorgehen:

Dim iZähler As Integer
iZähler = Workbooks.Count

Eine der wichtigsten Aufgaben der Workbooks-Auflistung ist die Möglichkeit, auf Programmebene ein Workbook-Objekt zurückzuliefern, das Sie in ihrem VBA-Code benutzen können. Wie das genau geschieht, werden Sie in Kürze sehen, aber zunächst soll noch einmal herausgestellt werden, warum ein Workbook-Objekt so wichtig ist.

Verwenden eines Workbook-Objekts

Das Workbook-Objekt gibt Ihnen Zugriff auf jede Art von Daten in einem Workbook. Das bezieht sich sowohl auf die Tabellen und Diagramme als auch auf andere Arten von Workbook-Komponenten, die in Office 97 erlaubt sind. Dazu gehören auch Excel-Version 4.0-Makros und Excel-Version 5.0-Dialoge. Am häufigsten werden Sie ein Workbook-Objekt jedoch für die folgenden Aufgaben verwenden:

  • Hinzufügen einer Tabelle oder eines Diagramms
  • Zugriff auf eine bestimmte Tabelle oder ein bestimmtes Diagramm
  • Löschen einer bestimmten Tabelle oder eines bestimmten Diagramms

Zusätzlich dazu bietet Ihnen das Workbook-Objekt noch nützliche Methoden, die nicht im Zusammenhang mit Diagrammen oder Tabellen stehen, wie zum Beispiel AddToFavourites. Dadurch wird ein Workbook zu der Liste der Favoriten-Dokumente in Windows 95 oder NT hinzugefügt. Außerdem können Sie auf einige der Mailing-Funktionen von Office-Applikationen zugreifen und natürlich auf die Funktionen Speichern, Speichern unter und Drucken.

Erstellen eines neuen Workbooks

Ihr VBA-Projekt erfordert vielleicht, daß ein neues Workbook erstellt werden muß. Vergessen Sie dabei nicht, daß Sie auch nur eine neue Tabelle in einem existierenden Workbook erstellen können, falls Sie nicht unbedingt ein komplett neues Workbook brauchen. Diese Funktion hilft Ihnen, den zusätzlichen Aufwand, der beim Erstellen eines neuen Workbooks entsteht, zu sparen. Wenn Sie aber wirklich ein neues Workbook benötigen, können Sie eines mit der Workbooks-Auflistung erzeugen. Rufen Sie die Methode Add des Workbooks-Objekts auf, um ein neues leeres Workbook zu erstellen:

WorkbookObjekt = WorkbooksAuflistungsObjekt.Add()

Im folgenden Beispiel können Sie sehen, wie die Methode Add im Code auftaucht, wenn Sie sie mit der Workbooks-Auflistung verwenden:

Dim objExcelApp As Excel.Application
Dim wbMeinWorkbook As Workbook
Set objExcelApp = Excel.Application
Set wbMeinWorkbook = objExcelApp.Workbooks.Add

Die Add-Methode erzeugt nicht nur ein neues Workbook-Objekt für Sie, um damit zu arbeiten, sondern auch ein neues Workbook in der Applikation. Wenn die Eigenschaft Visible der Applikation auf True gesetzt ist, wird der Benutzer dieses Workbook direkt auf dem Bildschirm sehen.

Öffnen eines existierenden Workbooks

Es kann in Ihrem Excel-VBA-Projekt vorkommen, daß Sie ein bereits bestehendes Workbook öffnen müssen. Dabei kann dieses Workbook vielleicht schon in Excel durch den Benutzer geladen worden sein, oder es ist irgendwo auf einer Festplatte gespeichert. Benutzen Sie die Eigenschaft ActiveWorkbook, um auf das aktive Workbook in der aktuellen Excel-Applikation zu verweisen. Fast jede Eigenschaft, Methode oder jedes Ereignis, das auch bei einem beliebigen Workbook-Objekt verwendet werden kann, läßt sich auch mit dem ActiveWorkbook verwenden. Der folgende Programmcode zeigt die Verwendung von ActiveWorkbook. Wenn der Code ausgeführt wird, fügt er eine neue Tabelle zum gerade aktiven Workbook hinzu (mit dem Namen »Zitrone«). Danach wird das komplette Workbook unter dem Namen »Früchte.XLS« gespeichert.

ActiveWorkbook.Sheets.Add
ActiveWorkbook.ActiveSheet.Name = "Zitrone"
ActiveWorkbook.SaveAs ("C:\Früchte.XLS")

Das Workbook, das Sie verwenden möchten, könnte aber eventuell noch nicht in Excel geladen sein. Wenn dies der Fall ist, müssen Sie es öffnen, indem Sie die Methode Open verwenden. Der folgende Code-Ausschnitt zeigt, wie Sie alle Workbooks in der gerade laufenden Instanz von Excel nach einem bestimmten Workbook durchsuchen, und wenn Sie nicht fündig werden, wie Sie dieses Workbook in Excel laden:

Public Function SucheWorkbook(sDateiname As String) As Boolean
If (Right$(sDateiname, 4) <> ".xls") Then
sDateiname = sDateiname + ".xls"
End If
SucheWorkbook = False
For Each wb In Workbooks
If wb.Name = sDateiname Then
SucheWorkbook = True
End If
Next
End Function
Public Sub SucheUndÖffne(sDateiname As String)
Dim objExcelApp As Excel.Application
Set objExcelApp = Excel.Application
If (SucheWorkbook(sDateiname) = False) Then
objExcelApp.Workbooks.Open (sDateiname)
End If
End Sub

Arbeiten mit existierenden Tabellen

Nachdem Sie das gewünschte Workbook nun entweder geöffnet oder erzeugt haben, wollen Sie wahrscheinlich mit Tabellen (Worksheets) in diesem Workbook arbeiten. Die Tabelle ist wahrscheinlich die wichtigste Komponente von Excel, weil sie diejenige Komponente ist, die Sie verwenden müssen, um mit Daten zu arbeiten. Wie Sie wahrscheinlich wissen, beinhaltet ein Workbook Tabellen, also müssen Sie die gewünschte Tabelle festlegen oder eine neue erstellen.

Wie bei den Workbooks gibt es verschiedene Möglichkeiten, eine Tabelle anzugeben. Die erste Methode, die hier betrachtet wird, ist die Worksheets-Auflistung und der Index der Worksheets:

Worksheets (Index)

Der Index gibt die Nummer des Worksheets an. Der Index korrespondiert mit der Reihenfolge, in der die Namen der Tabellen am unteren Ende des Workbooks auftauchen. Im folgenden Beispiel legen Sie den Namen »Zitrone« als Namen für die zweite Tabelle im aktuellen Workbook fest:

ActiveWorkbook.Worksheets(2).Name = "Zitrone"

Sie können auf ein Worksheet auch über den Namen zugreifen. Da der Name eines Worksheets eine Zeichenkette ist, müssen Sie den Namen in Anführungszeichen angeben, wenn Sie sich darauf beziehen:

Worksheets("Früchte")
Worksheets("Nüsse")

Da das Worksheets-Objekt auch ein Sammelobjekt ist, können Sie einfach durch alle Worksheets in einem Workbook blättern, um ein spezielles Worksheet zu finden:

For Each ws In Worksheets
If ws.Name = "SALAT" Then
Debug.Print "Worksheet gefunden"
End If
Next

Hinzufügen einer neuen Tabelle

Sie können vom Programmcode aus ein neues Worksheet hinzufügen, indem Sie die Methode Add der Worksheets-Auflistung verwenden. Sie können dabei auch die Anzahl der Worksheets angeben, die hinzugefügt werden sollen, sowie ihre Position. Hier sehen Sie die Syntax der Add-Methode:

Worksheets.Add (


[type:= sheet_type])

Die Parameter Before und After geben die Plazierung des neuen Worksheets an. Dabei können Sie hier entweder die Nummer eines Worksheets oder den Namen des Worksheets angeben. Das werden Sie später noch in einem Programmbeispiel sehen. Wenn Sie keinen der Parameter angeben, wird das neue Worksheet vor dem gerade aktiven Worksheet eingefügt. Der Parameter Count kann dazu verwendet werden, die Anzahl der hinzuzufügenden Worksheets festzulegen. Standardmäßig wird hier eine 1 angenommen. Der Parameter Type wird verwendet, um die Art des Worksheets festzulegen. Mögliche Werte sind xlWorksheet, xlExcel4MacroSheet und xlExcel4IntlMacroSheet.

Das folgende Beispiel fügt ein neues Worksheet vor dem aktuellen Worksheet ein:

Worksheets.Add

Dieses Beispiel fügt ein neues Worksheet nach dem Worksheet mit dem Namen »Nüsse« ein:

Worksheets.Add after: Worksheets("Nüsse")

Bei diesem Beispiel wird ein neues Worksheet ganz am Ende hinter dem zur Zeit letzten Worksheet angehängt:

Worksheets.Add after:Worksheets(Worksheets.Count)

Dieses Beispiel fügt drei neue Worksheets vor dem ersten Worksheet des Workbooks ein:

Worksheets.Add Count: 3

Verschieben eines Worksheets

Es gibt Situationen, in denen Sie die Reihenfolge der Worksheets in einem Workbook verändern möchten. Das hat Einfluß auf die Reihenfolge, in denen die Worksheets am unteren Ende des Workbooks angezeigt werden. Zum Verschieben eines Worksheets verwenden Sie die Methode Move, wobei Sie entweder den Parameter After oder Before verwenden müssen, um anzugeben, wo das Ziel des Worksheets ist. Der folgende Code bewegt das zweite Worksheet vor das erste:

Worksheets(2).Move (Before:Worksheets(1))

Das nächste Beispiel bewegt das Worksheet mit dem Namen »Früchte« hinter das Worksheet mit dem Namen »Nüsse«:

Worksheets("Früchte"). Move (After:Worksheets("Nüsse"))


Sie müssen zwischen dem Worksheets-Auflistungsobjekt und dem Sheets-Ausflistungsobjekt unterscheiden. Die Worksheets-Auflistung liefert alle Worksheets in einem Workbook zurück. Die Sheets-Auflistung liefert alle Sheets in einem Workbook zurück; das umfaßt sowohl Diagramme als auch Worksheets. Um mit allen möglichen Typen von Sheets in einem Workbook arbeiten zu können, müssen Sie die Sheets-Auflistung verwenden.

Festlegen von Zellen in einem Worksheet mit dem Range-Objekt

Nachdem Sie nun wissen, wie Sie vom Programmcode aus auf Excel zugreifen können und wie Sie ein Workbook und ein Worksheet angeben, mit dem Sie arbeiten möchten, ist es nun an der Zeit, einen Blick auf das Navigieren durch die Zellen eines Worksheets zu werfen. Immer, wenn Sie mit mehr als einer Zelle auf einem Worksheet arbeiten, werden Sie ein Bereichsobjekt (Range-Objekt) verwenden. Ein Range-Objekt wird benutzt, um entweder eine Zelle, eine Auswahl von Zellen, eine Zeile, eine Spalte oder alle Zellen eines Worksheets festzulegen. Das Range-Objekt benötigt einen Parameter, der die Zellen, die zu dem Bereich gehören, beschreibt.

In diesem Beispiel zeigt das Range-Objekt nur auf eine einzelne Zelle des Worksheets. Genauer gesagt, handelt es sich um die Zelle, die durch Zeile 2 und Spalte B festgelegt wird:

Range ("B2")

Ein Bereich kann natürlich auch mehr als eine Zelle umfassen. Das folgende Beispiel zeigt, wie Sie einen Bereich von 25 Zellen festlegen:

Range ("A1:E5")

Eine weitere Möglichkeit, einen Bereichs von Zellen mit einem Range-Objekt anzugeben, ist, die Bereichsgrenzen durch ein Komma abzutrennen. Dadurch können Sie die Dimension eines Bereichs, ohne die R1C1-Konvention anzugeben, festlegen. Im folgenden Beispiel verweist x auf die Zelle A1 und y auf die Zelle F4. Jeder dieser hier durch Range-Objekte dargestellten Bereiche ist identisch:

Range("A1","F4")
Range("A1:F4")
Range(x,y)

In Excel können Bereiche auch einen vom Benutzer festgelegten Namen haben. Sie können diese Namen auch im Programm verwenden. Der folgende Ausschnitt zeigt, wie Sie einen mit Namen versehenen Bereich spezifizieren:

Range("BudgetBereich")


In den vorherigen Beispielen wurde das Range-Objekt jeweils ohne ein weiteres zusätzliches Objekt dargestellt (wie zum Beispiel Worksheet (2)). Immer wenn Range alleine eingesetzt wird, ist das aktive Worksheet der Kontext. Wenn Sie die Range-Eigenschaft für einen Bereich verwenden möchten, der auf einem anderen als dem aktiven Worksheet liegt, müssen Sie dieses Objekt zuerst angeben, wie zum Beispiel:

Workbooks(2).Worksheets("Budget").Range("A2")

Festlegen von Zellen auf einem Worksheet mit der Eigenschaft Cells

Eine weitere Methode für das Arbeiten mit Zellen auf einem Worksheet ist die Eigenschaft Cells des Applikationsobjekts. Cells erwartet als Parameter die Zeilennummer der Zelle und die Spaltennummer der Zelle.

Die folgende Verwendung der Eigenschaft Cells bezieht sich auf die Zelle A1:

Worksheet (1).Cells (1,1)

Im folgenden Beispiel wird die Zelle E5 zurückgeliefert:

Worksheets (1). Service (5,5)

Die Cells-Eigenschaft kann auch dazu verwendet werden, sich durch alle Zellen eines Bereiches (Range) zu bewegen. Bereits früher in diesem Kapitel haben Sie das For Each-Konstrukt gesehen, mit dem Sie sich durch alle Objekte einer Auflistung bewegen konnten. Im folgenden Beispiel wird das For Each-Konstrukt dazu verwendet, die Werte von allen Zellen in einem Range im Direktfenster auszugeben.

For Each X In Worksheets(1).Range("A1:E5").Cells
Debug.Print X.Value
Next

Arbeiten mit Zellen in einem Range

Im vorherigen Abschnitt haben Sie gesehen, wie Sie sich durch einen Bereich von Zellen bewegen. Sie können dies mit der Cells-Eigenschaft oder einem Range-Objekt tun. Solange Sie eine korrekte Referenz auf jede Zelle in einem Bereich haben, können Sie mit dieser Zelle machen, was Sie möchten. Im folgenden Programmbeispiel wird jede Zelle des Bereichs so formatiert, daß sie Dezimalzahlen mir vier Stellen Genauigkeit anzeigt.

For Each X In Worksheets(1).Range("A1:E5").Cells
X.NumberFormat = "0.0000"
Next

Nahezu jeder Vorgang, den Sie mit einer Zelle manuell durchführen können, kann auch im Programmcode durchgeführt werden. Das beinhaltet das Ändern der Werte von Zellen, das Kopieren der Werte, das Formatieren oder das Ausführen einer Funktion auf die Daten.

Hier sind einige weitere Beispiele, wie Sie den Wert eines Zelleninhaltes bestimmen können.

Im ersten Beispiel setzen Sie den Wert einer Zelle auf den Wert 200:

Worksheets(3).Range("E3").Value = 200

Das nächste Beispiel zeigt, wie Sie einen jeweils um 1 erhöhten Wert für alle 25 Zellen festlegen. Außerdem wird jeweils abwechselnd eine der Zellen im Range fett formatiert:

Dim iZähler As Integer
Dim bFettDruck As Boolean
iZähler = 1
bFettDruck = True
For Each MeineZelle In Range("A1:E5")
MeineZelle.Value = iZähler
MeineZelle.Font.Bold = bFettDruck
iZähler = iZähler + 1
If bFettDruck Then
bFettDruck = False
Else
bFettDruck = True
End If
Next

Im letzten Beispiel sehen Sie, wie Sie eine Formel in eine Zelle einfügen, indem Sie die Formula-Eigenschaft eines Range-Objekts verwenden:

Worksheets(2).Range("E5").Formula = "-MITTELWERT(E1:E4)"

Hilfe für weitergehende Untersuchungen

Natürlich gibt es für die Programmierung von Excel wesentlich mehr Objekte, die allerdings den Rahmen dieses Buches sprengen würden. Sie haben in diesem Kapitel aber nicht nur erfahren, wie Sie mit Workbooks, Worksheets und Ranges arbeiten. Das Kapitels sollte vielmehr auch ein Grundverständnis für die Arbeit mit dem Applikationsobjekten vermitteln und zeigen, wie Objekte miteinander interagieren. Auf ähnliche Weise, wie Sie es hier am Beispiel von Excel gesehen haben, funktioniert es auch mit Access-, Word- oder PowerPoint-VBA. Die Objekte sind zwar nicht die gleichen, aber die Idee, die hinter dem Erstellen von Objekten steht, ist gleich.

Außerdem werden Sie herausfinden, daß die Objekt-Bibliotheken vieler VBA-Applikationen, dazu gehören auch Word, PowerPoint und Access, viele umfangreiche Objekte zur Verfügung stellen, wie es Excel mit seinen Workbooks, Worksheets und Ranges tut. Der beste Rat für das Arbeiten mit VBA in anderen Applikation ist das Studium der Objekt-Bibliothek. Die Objekt-Hierarchie ist normalerweise in irgendeiner Weise in der VBA-Hilfedatei zur entsprechenden Applikation vorhanden. Mit einem Verständnis dafür, wie die Objekte aufgebaut sind und wie sie funktionieren, fällt Ihnen das Erstellen einer eigenen VBA-Lösung viel leichter.

Verwenden der Win32 API mit VBA

Obwohl VBA ein großes Spektrum an Funktionen und Merkmalen bietet, die Sie dabei unterstützen, Probleme in einem VBA-Programm zu lösen, kann VBA nicht den kompletten Bereich der Funktionen der Win32 API abdecken. Durch den Einsatz von Win32-API-Diensten können Sie die Funktionalität und die Merkmale Ihres VBA-Programms erweitern und verbessern. Das bedeutet, daß Sie in Ihrem Programm dieselben Dienste und Funktionen verwenden können, die auch andere Windows-Programme einsetzen, und sogar Windows 95 und Windows NT selbst nutzen die Vorteile der API. Diese zusätzliche Leistungsfähigkeit beinhaltet jedoch auch ein paar Gefahren. Das Verwenden dieser Funktionen erfordert eine erhöhte Sorgfalt. Bei einem falschen Aufruf einer API-Funktion können Sie leicht Ihre VBA-Applikation oder sogar Windows selbst zum Absturz bringen. Im folgenden wird die Verwendung der Win32 API in Ihrem Projekt näher betrachtet.

Grundlagen der Win32 API

Um zur Win32 API überzugehen, ist es sinnvoll, sich zunächst einmal das Kürzel API näher anzusehen. API ist ein Akronym und steht für »Application Programming Interface«. Eine API steht immer in Verbindung mit einer Applikation. Microsoft Excel hat zum Beispiel eine API, aber auch Lotus Organizer und viele andere Applikationen. Software-Entwickler erwerben keine APIs für ihre Produkte, sondern erstellen sie selbst. Eine API wird dazu verwendet, einem externen Programm Zugang zu dem Programm zu verschaffen, das die API anbietet. Das bedeutet, daß Sie die Funktionalität eines Programms aus einem anderen Programm heraus über die API verwenden können. Dadurch, daß eine API zur Verfügung gestellt wird, erlaubt der Software-Entwickler anderen Entwicklern, die Dienste und Funktionalitäten seines Programms zu nutzen, ohne daß dafür die Benutzerschnittstelle (Programmoberfläche) verwendet werden muß.

Eine API wird jedoch nicht ausschließlich von externen Applikationen verwendet. Viele große Applikationen benutzten eine API, um einem Teil des Programms die Kommunikation mit einem anderen Teil zu ermöglichen. Wenn ein Teil von Service- oder Hilfsfunktionen als Kern von großen Applikationen errichtet worden ist, wird normalerweise für diese Funktionen eine API erstellt, um die Entwicklung des Rests der Applikation zu erleichtern. Diese API kann dann vielleicht auch für externe Applikationen zur Verfügung gestellt werden.

Sie haben schon gesehen, wie eine API benutzt wird, aber Sie brauchen nun ein größeres Verständnis dafür, was genau eine API ist. Normalerweise ist eine API nicht mehr als eine Menge von Funktionen, die den Zugriff auf verschiedene Operationen und Dienste eines Programms ermöglichen. Die Win32 API liefert Ihnen den Zugriff auf nahezu alle möglichen Windows-Funktionen. Die Win32 API unterstützt Windows 95 und Windows NT beim Verwalten des Speichers, beim Zugriff auf Geräte, wie zum Beispiel auf den Drucker, reagiert auf das Klicken mit der Maustaste durch den Anwender, zeichnet Listen und Schaltflächen auf den Bildschirm usw. Damit entspricht die Win32 API dem Typ von API, der im vorigen Absatz besprochen wurde und eine Applikation bei Ihren Funktionen unterstützt und auch den Zugriff durch andere Applikationen zuläßt.

Dynamic Link Libraries (DLL)

Die Win32 API liegt in Form von DLLs vor. Diese Bibliotheken beinhalten alle Funktionen und Dienste, die Windows NT und Windows 95 für weitere Applikationen zur Verfügung stellen. Dynamic Link Libraries erhalten ihren Namen von der Eigenschaft, daß sie während der Laufzeit eines Programms geladen und benutzt werden können. Im Gegensatz dazu werden Static Linked Libraries beim Kompilieren des Programms fest mit dem Programm verbunden, und die Funktionen in den Bibliotheken (und ihre APIs) bleiben somit nach außen hin unbekannt. Ein Software-Entwickler kann bereits ein Programm schreiben, das auf die Verwendung von DLLs angelegt ist, ohne daß es diese DLL bereits geben muß.

Sobald das aufrufende Programm den Namen der Funktion kennt, die Bibliothek, in der die Funktion enthalten sein wird und die Parameter, die für die Funktion notwendig sind, kann das Erstellen eines Programms, das auf die DLL zugreifen wird, beginnen.

DLLs gibt es in verschiedenen Arten. Viele DLLs haben die Dateiendung »DLL«. Andere haben die Endung »EXE«. In den folgenden Dateien steckt die überwiegende Anzahl der Win32-API-Funktionen: Comdlg32.dll, Dlllz32.dll, Gdi32.dll, Kernel32.dll, User32.dll und Version.dll.

Wenn Sie VBA verwenden, um mit der Win32 API zu programmieren, werden Sie mit Funktionen arbeiten, die sich in dieser Datei befinden. Zuvor müssen Sie sich jedoch noch nicht um die Namen der Dateien kümmern.

Der große Vorteil der Win32 API liegt darin, daß Sie mit ihr die Möglichkeiten ihres Programms über den Rahmen von VBA oder der Basisapplikation für Ihr VBA-Programm übersteigen können. Sie sind dann in der Lage, in Ihrem VBA-Projekt dieselben Dienste zu benutzen, die auch Windows 95 oder Windows NT verwenden. Diese Dienste reichen von der Speicherverwaltung und dem Erstellen von Fenstern bis zur Änderung der Systemzeit. Vielleicht halten Sie jetzt nur 1 Prozent aller Funktionen aus der Win32 API nützlich für Ihr VBA-Projekt, aber denken Sie daran, daß Ihnen fast 100 Prozent der Funktionen der API zur Verfügung stehen. Es bleibt Ihnen also noch ein großer Spielraum für Erweiterungen.

Deklarationen einer Routine

Bevor Sie eine Win32-API-Funktion oder -Routine verwenden können, müssen Sie diese deklarieren. Deklarationen werden in den allgemeinen Teil von Modulen eingefügt. Sie können ein separates Modul erstellen, nur um die Deklarationen darin unterzubringen. Es kann auch nützlich sein, alle verwendeten Deklarationen wieder in Gruppen aufzuteilen oder alle erforderlichen Datentyp-Festlegungen und Konstanten für deklarierte Funktionen in einem Modul zusammenzufassen.

Wenn Sie eine Funktionen deklarieren, müssen Sie VBA drei Informationen geben:

  • Die DLL, in der die Funktion gespeichert ist
  • Die Parameter und die Typen der Parameter, die VBA an die Funktion übergeben muß
  • Den Typ des Wertes einer Funktion, die einen Wert an VBA zurückliefert

Es ist von größter Wichtigkeit, daß Sie die Routinen der API korrekt deklarieren. Wenn Sie auf eine Funktion einer DLL außerhalb ihrer VBA-Basisapplikation zugreifen, sind Sie sogar in der Lage, Speicher zu verändern oder zu benutzen, der eigentlich von einer anderen Applikation verwendet wird oder sogar für das Betriebssystem reserviert ist. Wenn Sie das bedenken, wird es klar, daß Fehler zu einem breiten Spektrum von unvorhersehbaren Reaktionen führen können. Das reicht vom Erscheinen einer Fehlernachricht bis zum Absturz des Betriebssystems.

Der folgende Programmausschnitt zeigt Beispiele für einige der Win32-API-Funktionsdeklarationen:

Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long


Sie können sich selbst viel Zeit bei der Deklaration sparen, wenn Sie sich die Datei Win32API.TXT besorgen. Diese Datei beinhaltet alle Deklarationen der Win32-API-Funktionen für Visual Basic. Sie können diese Datei an vielen Stellen vorfinden. Normalerweise wird sie mit Visual Basic ausgeliefert. Außerdem gehört sie zum Office 97 Ressource Kit. Diese Datei beinhaltet auch jede Art von Datenstruktur oder Konstanten, die die API-Funktionen benötigen. Allerdings ist diese Datei zu groß, um sie vollständig in jedes VBA-Projekt einzubinden. Deshalb müssen Sie die notwendigen Deklarationen und die dazugehörigen Datentypen und Konstanten herauskopieren.

Detailwissen über Deklarationen

Um eine Deklaration korrekt in Ihrem VBA-Projekt anwenden zu können, müssen Sie verstehen, was die unterschiedlichen Teile einer Deklaration bedeuten. Hier sehen Sie die Struktur einer Win32-API-Deklaration:

Declare Function|Sub name Lib "Bibliotheksname" [Alias "Aliasname"] (argumente) [As rückgabetyp]

In den nächsten Abschnitten wird jeder Teil der Struktur näher erläutert.

Funktionen und Subroutinen

Die Win32 API beinhaltet sowohl Funktionen als auch Subroutinen. Abhängig davon, welche Art von Routine in der Win32 API Sie ansprechen möchten, müssen Sie sie als Subroutinen oder als Funktion deklarieren. Der folgende Code-Ausschnitt zeigt zwei Win32-API-Prozedur-Deklarationen. Die erste ist eine Subroutine, die zweite ist eine Funktion.

Declare Sub GetSystemTime Lib "kernel32" Alias "GetSystemTime" (lpSystemTime As SYSTEMTIME)
Declare Function VerLanguageName Lib "kernel32" Alias "VerLanguageNameA" (ByVal wLang As Long, ByVal szLang As String, ByVal nSize As Long) As Long

Beachten Sie, daß die erste Deklaration das Schlüsselwort Sub nach dem Schlüsselwort Declare verwendet. Das bedeutet, daß die Funktion keinen Rückgabewert liefert.

In der zweiten Deklaration finden Sie das Wort Function hinter dem Schlüsselwort Declare. Das bedeutet, daß diese Prozedur einen Wert zurückliefert. Am Ende der zweiten Deklaration sehen Sie noch den Zusatz As Long. Das weist darauf hin, daß die Funktion einen Wert vom Datentypen Long liefert. Jede Funktion legt einen Rückgabetyp fest, und wenn Sie die Funktion aufrufen, sollten Sie diesen Rückgabewert einer Variable mit einem passenden Datentypen zuweisen.

Ein wichtiger Teil der Deklaration für eine Win32-API-Routine ist auch die Angabe der Bibliothek, in der die Routine gespeichert ist. Diese Bibliothek ist nichts weiter als eine DLL, in der die Prozedur vorliegt. Normalerweise müssen Sie nur den entsprechenden Namen in Anführungszeichen hinter dem Schlüsselwort Lib angeben. Dabei ist es normalerweise nicht erforderlich, die Dateierweiterung oder den Pfad zur DLL mit anzugeben. Wenn Sie die oben erwähnte Datei Win32API.TXT verwenden, müssen Sie sich über die korrekte Angabe der Datei keine Sorgen mehr machen.


Wenn Sie eine Win32-API-Funktion aufrufen, sieht VBA zunächst in dem Verzeichnis nach, in dem die Applikation läuft, um die Bibliothek zu finden. Danach schaut sie im System-Verzeichnis von Windows nach (bei Windows NT im System32). Kann die Bibliothek auch in diesem Verzeichnis nicht gefunden werden, wird als nächstes im Hauptverzeichnis von Windows nachgesehen. Deshalb müssen Sie sich keine Gedanken über den Speicherort dieser Dateien machen, solange Sie die Dateien nicht aus dem Windows-Verzeichnis heraus bewegen, was jedoch auf gar keinen Fall anzuraten ist.

Parameterübergabe mit »By Reference« und »By Value«

Der wohl komplizierteste und kritischste Punkt bei der Deklaration einer Win32-API-Funktion ist die Festlegung der Parameterübergabe. Diese Schnittstelle ist eigentlich primär für die Verwendung aus der Programmiersprache C heraus konzipiert. Deshalb müssen Sie bei der Verwendung aus Basic heraus bestimmte Vorkehrungen treffen. Der erste Punkt ist eine nähere Betrachtung der Deklaration von Parametern By Reference oder By Value.

Die meisten API-Prozeduren, die Sie von VBA aus aufrufen können, erfordern die Übergabe von Argumenten. Normalerweise werden diese Parameter an die DLL By Reference übergeben. Das bedeutet, daß der Prozedur keine Kopie der Variablen zur Verfügung gestellt wird, sondern VBA übergibt die 32-Bit-Adresse der Variablen im Speicher. Mit der Adresse der Variablen kann die Prozedur auf diese Variable zugreifen und sie modifizieren, ohne eine Kopie davon zu erstellen. Im Gegensatz dazu erfordert die API gemäß der Sprachkonvention für C-Funktionen die meisten Parameter durch eine Übergabe By Value. Das bedeutet, daß eine DLL-Prozedur standardmäßig den Parameter als Wert und nicht als Adresse erwartet. Dies gilt normalerweise für Parametertypen außer Zeichenketten und Arrays, welche immer By Reference an eine DLL übergeben werden.

Die folgende Deklaration zeigt, wie verschiedene Parameter mit verschiedenen Methoden übergeben werden:

Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long

Diese beiden Möglichkeiten der Parameterübergabe erfordern von Ihnen eine vorsichtige Festlegung der Parameterliste beim Deklarieren einer Prozedur.

Festlegung von Zeichenketten als Parameter einer Deklaration

Die Übergabe von Zeichenketten als Parameter ist ein wenig komplizierter. Wie bereits erwähnt, erfordern DLLs Zeichenketten als Referenzparameter. Diese Referenz zeigt auf die Speicheradresse des ersten Zeichens der Zeichenkette. Obwohl dies so ist, deklarieren Sie eine Zeichenketten-Variable durch das Schlüsselwort ByVal. Wenn VBA diese Zeichenketten-Referenz an eine DLL-Funktion weitergibt, konvertiert es diese Zeichenkette in eine Form, die eine C-Funktion verwenden kann, das heißt in eine Zeichenkette, die mit einem Nullzeichen endet. Der folgende Ausschnitt zeigt eine typische Win32-API-Funktion mit Zeichenketten als Parametern.

Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Testen der Deklaration

Wenn Sie die Deklaration abgeschlossen haben, sollten Sie sie testen. Dazu müssen Sie einfach eine Routine in dem Modul, in dem die Deklaration enthalten ist, ausführen. Dadurch werden eventuelle Probleme mit der Deklaration erkannt und auch eventuell fehlende Konstanten aufgedeckt, die für die Festlegung der Deklaration erforderlich sind. Die auszuführende Routine muß nicht unbedingt eine Routine sein, die Sie später in Ihrer Applikation verwenden möchten. Es genügt schon, wenn die Routine nur den Wert einer Variablen setzt, wie im folgenden Ausschnitt gezeigt wird. Diese Routine hat als einzigen Zweck das Testen von Deklarationen.

Public Sub TesteDeklarationen()
X = 1
End Sub

Aufruf einer Win32-API-Routine

Nachdem Sie die Deklaration für eine gewünschte Win32-API-Routine eingetragen haben, brauchen Sie ein Programm, das diese Routine aufruft. Der Aufruf einer Funktion aus der Win32 API ist nicht komplizierter als der Aufruf einer Funktion oder von Subroutinen, die Sie selbst geschrieben haben. Die wichtigsten Überlegungen sind dabei immer:

  • korrekt deklarierte Variablen für die Verwendung in der Routine
  • korrekte Verarbeitung der Werte, die von der Funktion zurückgeliefert werden.

Das folgende Programmbeispiel zeigt den korrekten Aufruf einer Funktion:

' GetDriveType Rückgabewerte
Public Const DRIVE_REMOVABLE = 2
Public Const DRIVE_FIXED = 3
Public Const DRIVE_REMOTE = 4
Public Const DRIVE_CDROM = 5
Public Const DRIVE_RAMDISK = 6
Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Public Sub ZeigeLaufwerkstyp()
Dim sLaufwerksbuchstabe As String
Dim lLaufwerkstyp As Long
sLaufwerksbuchstabe = "E:\"
lLaufwerkstyp = GetDriveType(sLaufwerksbuchstabe)
Select Case lLaufwerkstyp
Case DRIVE_REMOVABLE
Debug.Print "Laufwerk ", sLaufwerksbuchstabe, " ist auswechselbar."
Case DRIVE_FIXED
Debug.Print "Laufwerk ", sLaufwerksbuchstabe, " ist ein festes Laufwerk."
Case DRIVE_REMOTE
Debug.Print "Laufwerk ", sLaufwerksbuchstabe, " ist ein entferntes Laufwerk."
Case DRIVE_CDROM
Debug.Print "Laufwerk ", sLaufwerksbuchstabe, " ist ein CD-ROM."
Case DRIVE_RAMDISK
Debug.Print "Laufwerk ", sLaufwerksbuchstabe, " ist eine RAM-Disk."
Case Else
Debug.Print "Probleme beim Funktionsaufruf!"
End Select
End Sub

Was Sie aus diesem Beispiel-Code unbedingt beachten sollten, ist folgendes:

  • Eine Zeichenkette wird korrekt an eine Funktion übergeben.
  • Eine Variable vom Typ Long wird dimensioniert, um den Rückgabewert der Funktion aufzunehmen.
  • Das Select Case-Konstrukt interpretiert alle möglichen Rückgabewerte auf der Basis der Konstantendefinition, einschließlich einer Fehlermöglichkeit.

Verwenden von Zeichenketten als Rückgabeparameter

Zeichenketten sind wirklich einer der kritischsten Aspekte, wenn Sie mit der Win32 API arbeiten. Weiter oben haben Sie schon gesehen, wie Sie Zeichenketten als Parameter übergeben. Einige Win32-API-Funktionen liefern jedoch auch Zeichenketten als Funktionsergebnis zurück. Dabei wird das Ergebnis in der Zeichenkettenvariable zurückgeliefert, die Sie schon als Parameter übergeben haben. Das bedeutet, daß Sie eine Zeichenkette als Parameter übergeben und die Funktion selbst den Wert dieser Zeichenkette setzt.

Als Beispiel für eine solche Funktion kann die Routine GetTempPath dienen. Diese Funktion wird dazu verwendet, um das Verzeichnis zu ermitteln, in dem Windows seine temporären Daten speichert. Alle Windows 95- und Windows NT-Installationen erfordern ein temporäres Verzeichnis. Der Aufruf der Funktion GetTempPath sollte so aussehen:

Rückgabe = GetTempPath(PfadLänge, Pfad)

Beim Aufruf dieser Funktion wird die Variable, die Sie als Pfad-Parameter übergeben, mit dem Namen des aktuellen temporären Pfads gefüllt. Wenn Sie das folgende Beispiel ausführen, wird der aktuelle Pfad im Direktfenster ausgegeben:

lResultat = GetTempPath(Len(sPfadName), sPfadName)
Debug.Print sPfadName

Was Sie an diesem Beispiel jedoch noch nicht sehen können, ist der wichtigste Punkt bei der Übergabe von Zeichenketten an Funktionen, die dort mit Werten gefüllt werden sollen. Sie müssen bereits im voraus die Größe der Zeichenkette festlegen, die den Wert übernehmen soll. Das verhindert, daß die Funktion andere wichtige Speicherbereiche mit dem Wert für Ihre Zeichenkette überschreibt. Wenn Sie das nicht beachten, kann das zum Absturz ihrer Applikation oder sogar des gesamten Betriebsystems führen. Wenn Sie die Größe der Zeichenkette vorgeben, wird die Funktion nur so viele Daten hineinschreiben, wie die Variable aufnehmen kann. Die folgende Beispielroutine zeigt, wie Sie eine Zeichenkettenvariable vorbelegen, damit eine Funktion einen Wert hineinschreiben kann:

Public Sub ErmittleTempPfad()
Dim sPfadName As String
Dim iPfadLänge As Long
Dim lResultat As Long
iPfadLänge = 256
sPfadName = String$(iPfadLänge, 0)
lResultat = GetTempPath(iPfadLänge, sPfadName)
End Sub

Rückgabewerte einer Win32-API-Funktion

Die meisten der Routinen in der Win32 API sind Funktionen. Das bedeutet, daß Sie einen Wert zurückliefern. Dieser Rückgabewert kann eine spezielle Informationen sein, die Sie von der Funktion haben möchten, wie zum Beispiel bei der bereits gezeigten Funktion GetDriveType. In anderen Fällen kann dieser Funktionswert aber auch nur dazu benutzt werden anzuzeigen, ob eine Operation erfolgreich abgeschlossen werden konnte. Als Beispiel für eine solche Funktion können Sie die Funktion SetCurrentDirectory betrachten, die das aktuelle Verzeichnis setzt:

Dim lResultat As Long
lResultat = SetCurrentDirectory("C:\Daten")

Wenn die Funktion in der Lage war, zum Verzeichnis C:\Daten zu verzweigen, enthält die Variable lResultat einen von 0 verschiedenen Wert. Wenn der Versuch des Verzeichniswechsels fehlgeschlagen ist, weil dieses Verzeichnis vielleicht nicht existiert, dann wird der Wert 0 im Resultat zurückgegeben.


Einige Funktionen der Win32 API liefern den Wert 0, wenn sie erfolgreich abgeschlossen wurden, andere liefern den Wert 0 im Falle eines Fehlers. Für eine Erklärung der möglichen Rückgabewerte einer Win32-API-Funktion müssen Sie in die Dokumentation des Win32 SDK schauen.

Die letzte Art von Rückgabeform tritt bei Funktionen auf, die beide der bereits bekannten Rückgabeformen verwenden. Einige Funktionen schreiben Werte in Parameter, die Sie übergeben, und liefern zusätzlich noch wichtige Informationen als Rückgabewerte. Ein Beispiel für eine solche Routine ist die Funktion GetPrivateProfileString. Diese Funktion wird dazu verwendet, Informationen aus einer INI-Datei zu lesen, die in einer 16-Bit-Windows-Umgebung für das Speichern von Applikationskonfigurationen verwendet wird:

Dim lGröße As Long
Dim lStringGröße As Long
Dim sStringWert As String
lStringGröße = 256
sStringWert = String$(lStringGröße, 0)
lGröße = GetPrivateProfileString("DieApplikation", "Applikationspfad", "", sStringWert, lStringGröße, "C:\WIN95\APPINI.INI")

Diese Funktion holt den Wert des Schlüssels »Applikationspfad« aus dem Abschnitt »Die Applikation« und übergibt diesen Wert an die Variable sStringWert. Gleichzeitig bekommt die Variable lGröße die tatsächlich übertragene Länge der Zeichenkette in sStringWert. Die Funktion ist fehlgeschlagen, wenn lGröße den Wert 0 erhält.

Arbeiten mit Handles

Eines der Elemente, die Sie häufig eintreffen werden, wenn Sie mit der Win32 API arbeiten, ist das Handle. Ein Handle ist eine 32 Bit große Integer-Zahl, die ein bestimmtes Element, mit dem Sie arbeiten möchten, eindeutig identifiziert. Falls Sie mit Elementen wie Dialogen, Steuerelementen in Dialogen, Fenstern, Bitmaps, Pinseln zum Zeichnen auf dem Bildschirm, Hardware usw. arbeiten möchten, müssen Sie zuerst ein Handle auf dieses Element einrichten. Danach können Sie über das Handle mit dem Element arbeiten. In der Deklaration einer Win32-API-Funktion erkennen Sie die Verwendung von Handles an dem vorangestellten »h« an einem Parameternamen. In der folgenden Deklaration ist der zweite Parameter hWnd dafür zuständig, ein Handle auf ein Fenster zu übernehmen:

Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long

Der erste Parameter der folgenden Deklaration, hDevice, wird dazu verwendet, ein Handle auf einen Device-Kontext zu übernehmen:

Declare Function DeviceIoControl Lib "kernel32" Alias "DeviceIoControl" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As OVERLAPPED) As Long

Als VBA-Programmierer müssen Sie kein spezielles Wissen über ein Handle besitzen, außer wie Sie es benutzen. Sie werden normalerweise eine Funktion verwenden, die Ihnen ein Handle auf ein Element liefert, das Sie dann verwenden können, um in anderen Funktionen mit diesem Element über das Handle zu arbeiten.


(c) 1997 Que
Ein Imprint des Markt&Technik Buch- und Software- Verlag GmbH
Elektronische Fassung des Titels: Special Edition: Office 97, ISBN: 3-8272-1018-6

Previous Page Page Top TOC Index Next Page See Page