Visual Basic for Applications (VBA)

Eintrag zuletzt aktualisiert am: 06.06.2007

Visual Basic for Applications (VBA) ist Light-Version von Visual Basic, die als Makro-Sprache für Microsoft Office u.a. Anwendungen eingesetzt wird. VBA besteht aus der Programmiersprache und einer Entwicklungsumgebung, die Visual Studio 6.0 sehr ähnlich ist.

Visual Basic for Applications (VBA) ist eine Interpretersprache zur Automatisierung der Bedienung einer Anwendung und ersetzt in vielen Fällen die früheren Makrosprachen der Anwendungen. Ein VBA-Programm läuft stets innerhalb eines VBA-Host. Dieser ist eine VBA-fähige Anwendung. Vorreiter bei der Integration von VBA in Anwendungen ist Microsoft mit seiner Office-Produktfamilie. Darüber hinaus unterstützen aber auch noch viele andere Anwendungen VBA:
  • WordPerfect Office
  • CorelDraw ab Version
  • AGRESSO
  • TurboCAD Professional
  • IntelliCAD
  • Micrografx iGrafx Professional
  • Psipenta
  • Rational Rose

VBA und Microsoft Office

In früheren Versionen der Microsoft Office-Produktfamilie hatten die Kernprodukte ihre eigenen Basic-Dialekte: Excel VBA, Word Basic, Access Basic. Mit Microsoft Office 97 erfolgte eine Vereinheitlichung hinsichtlich der Sprachsyntax. Außerdem wurde Powerpoint ebenfalls VBA-fähig. Uneinheitlich blieb jedoch die Entwicklungsumgebung. Die Funktionen der VBA-Entwicklungsumgebung werden im Rahmen der fortgeschrittenen Techniken besprochen.

Grundsätzlich gilt, dass VBA interpretiert wird. Während es in Office 97 keine Möglichkeit gab, VBA zu kompilieren, ist dieser Grundsatz ab Office 2000 in einigen Fällen aufgeweicht worden. Mit VBA können nun in zwei abgegrenzten Fällen COM-DLLs erstellt werden: zum einen bei der Erstellung von COM-Add-ins, zum anderen bei der Erstellung von so genannten Datenumgebungen.

VBA und Scripting

Visual Basic for Applications (VBA) ist kein Active Scripting Host. Dennoch sind die VBA-fähigen Anwendungen eine überlegenswerte Plattform für Automatisierungslösungen, da diese weitestgehend kompatibel ist zu VBScript.

Bei VBA nennt man die Anwendung, in der das VBA-Programm abläuft, einen VBA-Host. Beispiele für VBA-Hosts sind Microsoft Word, Excel, Powerpoint, Access und Visio. Auch wenn in Zusammenhang mit VBA von Kompilierung die Rede ist – mit VBA können keine eigenständig ausführbaren Anwendungen erstellt werden. Es ist immer ein VBA-Host nötig, wobei es je nach Anwendungsfall mehr oder weniger schnell möglich ist, ein VBA-Programm von einem VBA-Host in einen anderen zu portieren.

Für die Portierung von Programmcode von VBA zu Scriptcode gelten die gleichen Regeln wie für die Portierung aus der Visual Basic-Vollversion. VBA und VB 6.0 sind sich viel ähnlicher als VBA und VBScript.

VBA-Projekte

VBA arbeitet ebenso wie das große VB mit Projekten, die aus verschiedenen Elementen (Modulen, Formularen, Klassenmodulen) bestehen. Im Unterschied zu VB 6.0 werden jedoch die einzelnen Elemente nicht in getrennten Dateien, sondern allesamt innerhalb einer einzigen Dokumentendatei des jeweiligen VBA-Host gespeichert (beispielsweise in Microsoft Word in einer .doc- oder .dot-Datei). Ein VBA-Projekt entspricht also einer Dokumentendatei.

Die Elemente sind komplett in die Datei integriert und können von außen nicht einzeln angesprochen werden. Die VBA-IDE erlaubt jedoch den Export eines Elements in eine separate Datei, die hinsichtlich der Dateierweiterungen den Dateien in VB 6.0 entspricht (.frm, .cls und .mod).

VBA verfügt seit Office 2000 auch über die Möglichkeit, komplette VBA-Projekte unabhängig von einer Office-Datei zu speichern. VBA-Projektdateien besitzen die Erweiterung .vba. Sie gehorchen einem gänzlich anderen Prinzip als VB 6.0-Projektdateien: Während ein VB 6.0-Projekt aus einer Textdatei für das Projekt sowie aus einer Textdatei für jedes enthaltene Formular bzw. Modul oder für jede enthaltene Klasse besteht, sind in einer VBA-Projektdatei alle Bausteine in einer binären Datei abgelegt.

VBA-IDE

Die VBA-IDE ist der VB6-IDE sehr ähnlich. Bildschirmfenster und Menüs sind fast die gleichen. Der Projekt-Explorer zeigt allerdings nicht nur das aktuelle Projekt, sondern alle geöffneten Dokumentendateien. Dabei ist nicht nur ein einfacher Austausch von Programmcode per Cut&Paste möglich, sondern auch das Kopieren von ganzen Modulen oder Formularen per Drag&Drop.

Sie erreichen die VBA-Entwicklungsumgebung in Word, Excel und Powerpoint, indem Sie das Menü EXTRAS/MAKRO/VISUAL BASIC EDITOR anwählen oder aber unter EXTRAS/MAKRO/MAKROS ein bestehendes Makro bearbeiten.

Die Host-Anwendung hat auf ein VBA-Projekt immer noch eine aus der früheren Makrowelt geprägte Sicht. Was Word & Co. als Makro bezeichnen, ist in Wirklichkeit eine öffentliche (also nicht mit Private deklarierte) Unterroutine.

Bereits Office 97 sollte die VBA-Entwicklungsumgebungen der vier Office-Produkte komplett vereinheitlichen. Access ging aber einen Sonderweg. In Office 2000 ist positiv, dass die Entwicklungsumgebung von Access endlich auch der der anderen Office-Produkte entspricht – mit dem typischen Projekt-Explorer, der alle Codebestandteile anzeigt. Auch der in Formularen hinterlegte „Code behind Forms“ (CBF) wird unter dem Oberbegriff „Microsoft Access Klassenobjekte“ aufgelistet. Access hat innerhalb der Office-Produktfamilie hinsichtlich der Anwendungsentwicklung immer eine Sonderrolle gespielt und spielt diese auch mit Office 2000 noch.

Makrorekorder: VBA-Programme aufzeichnen

Word, Excel und Powerpoint bieten einen Makrorekorder an, der sehr hilfreiche Dienste leistet: Sie können bestimmte Aktionen in den jeweiligen Anwendungen vormachen und der VBA-Host setzt die Aktionen dann in VBA-Befehle um. Diese sind zwar nicht optimal, aber eine hervorragende Referenz für den VBA-Programmierer. Ein Makro mit dem Makrorekorder aufzuzeichnen, führt wesentlich schneller zu den gewünschten Befehlen als die Suche in der Hilfe. Leider gibt es diesen Makrorekorder nicht in Access – auch nicht in Access 2007.