Visual Basic for Applications

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Visual Basic for Applications (VBA) ist eine zu den Microsoft-Office-Programmen gehörende Skriptsprache. Sie wurde aus dem von Microsoft entwickelten BASIC-Dialekt Visual Basic (VB) abgeleitet und wurde zur Steuerung von Abläufen innerhalb der Microsoft-Office-Programme entwickelt. VBA ist seit Mitte der 1990er Jahre der Nachfolger der bis zu diesem Zeitpunkt in den Microsoft-Office-Anwendungen enthaltenen verschiedenen Makro-Sprachen.

Inhaltsverzeichnis

[Bearbeiten] Verfügbarkeit

Derzeit ist VBA in den Microsoft-Office-Programmen Word (seit Version 97), Excel (seit Version 95), Access (seit Version 95), Project, PowerPoint, FrontPage, Visio (seit Version 2000) und Outlook verfügbar. Darüber hinaus wird VBA von der Corel Corporation lizenziert und ist in Corel Draw und Corel Photo-Paint sowie der iGrafx Produktpalette verfügbar. VBA wird auch als Makrosprache in AutoCAD, ArcGIS, ARIS, CATIA, Solid Works, MindManager und vielen anderen Anwendungen eingesetzt. Microsoft Office 2008 für den Apple Macintosh bot keine VBA-Unterstützung, diese ist jedoch in der Version 2011 wieder integriert.

[Bearbeiten] Sprache

VBA gilt als leistungsfähige Skriptsprache und ist die am stärksten verbreitete Möglichkeit, auf Microsoft-Office-Anwendungen (Excel, Word, Access etc.) basierende Programme zu erstellen. VBA ist eine interpretierte Programmiersprache, deren Syntax der von Visual Basic entspricht. Die Möglichkeiten und die Leistungsfähigkeit von VBA sind allerdings gegenüber Visual Basic deutlich reduziert. Beispielsweise wird ein VBA-Skript zwar vorkompiliert, um Variablen- und Konstantentabellen aufzubauen und syntaktische Überprüfungen durchzuführen, ein Kompilieren bis hin zu ausführbarem Maschinencode ist jedoch nicht möglich.

VBA ist vor allem für prozedurale Programmierung konzipiert. Klassen und Objekte können zwar syntaktisch dargestellt und implementiert werden, unterliegen jedoch den auch in Visual Basic Classic bestehenden Einschränkungen (fehlende Implementierungsvererbung); andere Merkmale wie Datenkapselung, Interface-Vererbung und Laufzeitpolymorphie können hingegen verwendet werden.

Der Zugriff über VBA auf das jeweilige Wirtsprogramm (Word, Excel etc.) erfolgt über eine meist gut dokumentierte Programmierschnittstelle. In den jeweiligen Anwendungen stehen neben dem VBA-Kern (Kontrollstrukturen, Datentypen, mathematische Funktionen, Dateisystem) spezielle Objekte des Wirtsprogramms zur Verfügung. Diese Objekte ermöglichen es, Abläufe des jeweiligen Wirtsprogramms zu automatisieren. Da diese Schnittstelle über das Component Object Model (COM) realisiert wird, kann eine VBA-Anwendung auch auf andere COM-Komponenten als die vom Wirtsprogramm zur Verfügung gestellten zugreifen.

[Bearbeiten] Kompatibilität zu VB.NET

Bis zur Visual-Basic-Version 6.0 ist es problemlos möglich, Module und Formulare zwischen VBA und VB auszutauschen. Seit der Umstellung von Visual-Basic auf das .NET-Framework ist es nicht mehr möglich, Module und Formulare direkt auszutauschen, da sich das Dateiformat geändert hat. Allerdings können Module (also Quelltext-Dateien) durch Umbenennung und gezielte Anpassungen an die .NET-Datenstrukturen überführt werden. Bei Formularen ist dies nicht möglich, sie müssen komplett neu erstellt werden. Allerdings gibt es die Möglichkeit, in Visual Studio.NET mit den Visual Studio Tools for Office System (VSTO) Add-Ins für MS Office zu entwickeln, die die gleichen Aufgaben übernehmen können wie klassische Makros.

[Bearbeiten] Sicherheit

Die Anwendungsmöglichkeiten von VBA sind nicht nur auf die Automatisierung der Wirtsanwendungen beschränkt. Der Leistungsumfang von VBA umfasst auch wesentliche Funktionen von Visual Basic und alle auf COM basierten Anwendungen des ausführenden PC. Daher können VBA-Anwendungen, ebenso wie alle anderen Windows-Anwendungen, schädlichen Code enthalten.

Statt eines A-priori-Sicherheitskonzeptes, bei dem möglicherweise gefährliche Funktionen schon beim Sprachentwurf eingeschränkt oder die Makroausführung mittels einer Sandbox vom restlichen System abgeschirmt wird, stellt Microsoft-Office lediglich im Nachhinein Methoden zur Absicherung der Programmausführung wie etwa eine Prüfungsmöglichkeit eventuell vorhandener Makrozertifizierung zur Verfügung. Diese Faktoren, kombiniert mit der leichten Erlernbarkeit von VBA, führten zur Verbreitung von Makroviren. Neuere MS-Office-Versionen fragen vor der Ausführung von VBA-Programmen nach und empfehlen, nur vertrauenswürdige und mit überprüfbaren Zertifikaten ausgestattete Makros zuzulassen. Zum Schutz vor Einsichtnahme kann der VBA-Code durch ein Kennwort geschützt werden. Dieser Schutz konnte in der Vergangenheit teilweise recht einfach ausgehebelt werden, z. B. durch Import in die äquivalente Anwendung des OpenOffice.org-Paketes.

[Bearbeiten] Verbreitung

VBA wertet die Nutzbarkeit der mit damit verknüpften Anwendungen durch seine Erweiterbarkeit mit anwenderspezifischen Funktionen erheblich auf. In den industriellen Bereichen von mittelständischen und Großunternehmen wird VBA häufig verwendet, um schnell kleinere IT-Lösungen zu realisieren oder um Prototypen für spätere native Softwareanwendungen zu evaluieren.

Zahlreiche Websites und Newsgroups beschäftigen sich mit VBA. Durch seine Verbreitung gibt es eine Reihe von freien Programmsammlungen, Literatur und kommerziellen Angeboten. Da sich die Programme in eigenen Add-Ins kapseln lassen, können sie nach Bedarf zur Anwendung dazugeladen werden.

[Bearbeiten] Nachteile

Wird die Schaffung einer sauberen und langfristig nutzbaren Programmierung angestrebt, ist sinnvoll dass die mit VBA entwickelten Skripte bzw. Makros und deren Struktur den Standards der Software-Entwicklung entsprechen. Aus diesem Grund ist es notwendig, VBA-Projekte genauso zu konzipieren wie andere Softwareprojekte und den sonst bei Makros üblichen Ad-hoc-Programmierstil zugunsten eines gut geplanten Softwareentwurfes abzulegen.

Zum anderen erschweren die vorhanden Einschränkungen in VBA auch für erfahrene Entwickler den Einsatz moderner Programmier- und Entwurfstechniken, wie sie in VB.net möglich sind. Nach einiger Zeit können in der Praxis deshalb häufig mit VBA Softwaresysteme entstehen, die schlicht nicht mehr sinnvoll weiterentwickelt werden können, da ihre Struktur zu komplex und kaum durchschaubar ist.

[Bearbeiten] Beispiel

Beispiel für eine benutzerdefinierte Funktion in Excel, welche den vorherigen Geschäftstag zurückliefert.

[Bearbeiten] VBA ab Office 97

' Beispiel unter Verwendung von If/Then/Else
Public Function VorherigerGeschaeftstag(dt As Date) As Date
 
    Dim wd = Weekday(dt)         ' Weekday liefert 1 für Sonntag, 2 für Montag usw.
    If wd = 1 Then
        ' Auf Sonntag wird Datum vom letzten Freitag zurückgegeben
        VorherigerGeschaeftstag = dt - 2
    ElseIf wd = 2 Then
        ' Auf Montag wird Datum vom letzten Freitag zurückgegeben
        VorherigerGeschaeftstag = dt - 3
    Else
        ' Andere Tage: vorheriger Wochentag wird zurückgegeben
        VorherigerGeschaeftstag = dt - 1      
    End If
 
End Function
'
'
' Beispiel unter Verwendung von Select Case
Public Function VorherigerGeschaeftstag(dt As Date) As Date
 
    Dim wd = Weekday(dt)         ' Weekday liefert 1 für Sonntag, 2 für Montag usw.
    Select Case wd 
        Case 1
            ' Auf Sonntag wird Datum vom letzten Freitag zurückgegeben
            VorherigerGeschaeftstag = dt - 2
        Case 2 
            ' Auf Montag wird Datum vom letzten Freitag zurückgegeben
            VorherigerGeschaeftstag = dt - 3
        Case Else
            ' Andere Tage: vorheriges Datum wird zurückgegeben
            VorherigerGeschaeftstag = dt - 1      
    End Select
 
End Function

[Bearbeiten] VBA unter Office 95

VBA wurde in Excel 95 lokalisiert, das Codebeispiel auf einer deutschsprachigen Installation von Excel 95 würde so aussehen:

' Beispiel unter Verwendung von Wenn/Dann/Sonst
Funktion VorherigerGeschaeftstag(dt Als Datum) Als Datum
 
    Dim wd = Wochentag(dt)         ' Wochentag liefert 1 für Sonntag, 2 für Montag usw.
    Wenn wd = 1 Dann
        ' Auf Sonntag wird Datum vom letzten Freitag zurückgegeben
        VorherigerGeschaeftstag = dt - 2
    SonstWenn wd = 2 Dann
        ' Auf Montag wird Datum vom letzten Freitag zurückgegeben
        VorherigerGeschaeftstag = dt - 3
    Sonst
        ' Andere Tage: vorheriger Wochentag wird zurückgegeben
        VorherigerGeschaeftstag = dt - 1      
    Ende Wenn
 
Ende Funktion
'
'
' Beispiel unter Verwendung von Prüfe Fall
Funktion VorherigerGeschaeftstag(dt Als Datum) Als Datum
 
    Dim wd = Wochentag(dt)       ' Wochentag liefert 1 für Sonntag, 2 für Montag usw.
    Prüfe Fall wd
        Fall 1
            ' Auf Sonntag wird Datum vom letzten Freitag zurückgegeben
            VorherigerGeschaeftstag = dt - 2
        Fall 2
            ' Auf Montag wird Datum vom letzten Freitag zurückgegeben
            VorherigerGeschaeftstag = dt - 3  
        Fall Sonst
            ' Andere Tage: vorheriges Datum wird zurückgegeben
            VorherigerGeschaeftstag = dt - 1      
    Ende Prüfe
Ende Funktion

[Bearbeiten] Literatur

  • Axel Buhl, Petra Strauch: Grundkurs VBA. Einführung in die Programmentwicklung mit Visual Basic for Applications in Excel. 2005. ISBN 978-3-486-57889-8
  • Bernd Held: Excel VBA. Kompendium mit über 1000 Makros Verlag: Markt + Technik ISBN 978-3-8272-4117-7
  • Andreas Janka, " VBA in Word ", Galileo Press 2004, ISBN 3-89842-469-3

[Bearbeiten] Siehe auch

[Bearbeiten] Weblinks

Wikibooks Wikibooks: VBA in Excel - Grundlagen – Lern- und Lehrmaterialien
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Mitmachen
Drucken/exportieren
Werkzeuge
In anderen Sprachen