| Visual Basic for Applications | |
|---|---|
| Basisdaten | |
| Paradigmen: | prozedural,objektorientiert |
| Erscheinungsjahr: | 1993 |
| Entwickler: | Microsoft |
| Aktuelle Version: | 7.1 (Office 2021) () |
| Standardisierungen: | MS-VBAL[1] |
| Beeinflusst von: | Visual Basic |
| learn.microsoft.com/en-us/office/vba | |
Visual Basic for Applications (VBA) ist eineSkriptsprache, die ursprünglich für die Steuerung von Abläufen derMicrosoft-Office-Programmfamilie entwickelt wurde. Sie wurde aus dem vonMicrosoft entwickeltenBASIC-DialektVisual Basic (VB) abgeleitet.
Derzeit ist VBA in den Microsoft-Office-ProgrammenWord (ab Version 97),Excel (ab Version 5.0)[2],Access (ab Version 95),Project,PowerPoint,FrontPage,Visio (ab Version 2000) undOutlook verfügbar. VBA löste seit Mitte der 1990er Jahre die untereinander inkompatiblenMakro-Sprachen der einzelnen Microsoft-Office-Programme ab.[3]Darüber hinaus wird VBA von derCorel Corporation lizenziert und ist inCorel Draw undCorel Photo-Paint sowie der iGrafx Produktpalette verfügbar. VBA wird auch als Makrosprache inAutoCAD,ArcGIS,ARIS,CATIA,SolidWorks,MindManager und vielen anderen Anwendungen eingesetzt. Microsoft Office 2008 für denApple Macintosh bot keine VBA-Unterstützung, diese ist jedoch in der Version 2011 wieder integriert.[4]
VBA gilt als leistungsfähige Skriptsprache und ist die am weitesten verbreitete Möglichkeit, auf Microsoft-Office-Anwendungen (Excel, Word, Access etc.) basierende Programme zu erstellen. VBA ist eineinterpretierte Programmiersprache, derenSyntax der von Visual Basic (sowohlVisual Basic Classic als auchVisual Basic .NET) 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, einKompilieren bis hin zu ausführbaremMaschinencode ist jedoch nicht möglich.
VBA ist vor allem fürprozedurale Programmierung konzipiert.Klassen undObjekte können zwar syntaktisch dargestellt und implementiert werden, unterliegen jedoch den auch in Visual Basic Classic bestehenden Einschränkungen (fehlendeImplementierungsvererbung); andere Merkmale wieDatenkapselung,Interface-Vererbung undLaufzeitpolymorphie können hingegen verwendet werden.
Der Zugriff aus VBA auf das jeweilige Wirtsprogramm (Word, Excel etc.) erfolgt über eineProgrammierschnittstelle. 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 dasComponent Object Model (COM) realisiert wird, kann eine VBA-Anwendung auch auf andere COM-Komponenten als die vom Wirtsprogramm zur Verfügung gestellten zugreifen.
Im Gegensatz zu Visual Basic 6.0 undVisual Basic Script (VBS) besitzt VBA seit der Version 7.0 zusätzliche64-Bit-Datentypen undPräprozessoranweisungen zurFallunterscheidung von32-Bit-Systemen und 64-Bit-Systemen.[5]
Bis zur Visual-Basic-Version 6.0 ist es problemlos möglich, Module undFormulare zwischen VBA und VB auszutauschen. Seit der Umstellung von Visual-Basic auf das.Net-Framework ist dies nicht mehr möglich, da sich dasDateiformat geändert hat. Allerdings können Module (alsoQuelltext-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. Alternativ gibt es die Möglichkeit, inVisual Studio.NET mit denVisual Studio Tools for Office System (VSTO) Add-Ins für die Windows-Version von MS Office zu entwickeln, die die gleichen Aufgaben übernehmen können wie klassische Makros.
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 viele andere 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 einerSandbox vom restlichen System abgeschirmt wird, stellt Microsoft-Office lediglich im Nachhinein Methoden zur Absicherung der Programmausführung wie etwa eine Prüfungsmöglichkeit eventuell vorhandenerMakrozertifizierung zur Verfügung. Diese Faktoren, kombiniert mit der leichten Erlernbarkeit von VBA, führten zur Verbreitung vonMakroviren. 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 desOpenOffice.org-Paketes.
In 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.
Wird die Schaffung einer sauberen und langfristig nutzbaren Programmierung angestrebt, dann ist es 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.
Die vorhandenen Einschränkungen in VBA erschweren auch für erfahrene Entwickler den Einsatz moderner Programmier- und Entwurfstechniken, wie sie inVB.net möglich sind. Nach einiger Zeit können mit VBA in der Praxis deshalb Softwaresysteme entstehen, die kaum mehr sinnvoll weiterentwickelt werden können, da ihre Struktur zu komplex und kaum durchschaubar ist.
Beispiel für eine benutzerdefinierte Funktion in Excel, welche den vorherigen Geschäftstag zurückliefert.
PublicFunctionVorherigerGeschaeftstag(dtAsDate)AsDateDimwdAsIntegerwd=Weekday(dt)' Weekday liefert 1 für Sonntag, 2 für Montag usw.SelectCasewdCase1' Auf Sonntag wird Datum vom letzten Freitag zurückgegebenVorherigerGeschaeftstag=dt-2Case2' Auf Montag wird Datum vom letzten Freitag zurückgegebenVorherigerGeschaeftstag=dt-3CaseElse' Andere Tage: vorheriges Datum wird zurückgegebenVorherigerGeschaeftstag=dt-1EndSelectEndFunction
VBA wurde in Excel 95 lokalisiert, das Codebeispiel auf einer deutschsprachigen Installation von Excel 95 würde so aussehen:
FunktionVorherigerGeschaeftstag(dtAlsDatum)AlsDatumDimwdAlsintegerwd=Wochentag(dt)' Wochentag liefert 1 für Sonntag, 2 für Montag usw.PrüfeFallwdFall1' Auf Sonntag wird Datum vom letzten Freitag zurückgegebenVorherigerGeschaeftstag=dt-2Fall2' Auf Montag wird Datum vom letzten Freitag zurückgegebenVorherigerGeschaeftstag=dt-3FallSonst' Andere Tage: vorheriges Datum wird zurückgegebenVorherigerGeschaeftstag=dt-1EndePrüfeEndeFunktion