en / de
Expertisen
Methoden
Dienstleistungen
Referenzen
Jobs & Karriere
Firma
Technologie-Trends TechCast WebCast TechBlog News Events Academy

Excel VBA – Segen oder Fluch?

by it support 27. November 2015· 4 Min. lesen

Visual Basic for Applications, kurz VBA, ist eine erstaunlich leistungsstarke Skriptsprache, mit der sich Microsoft Office-Anwendungen um scheinbar unbegrenzte Funktionalitäten erweitern lassen. In den vergangenen Jahren habe ich sie in verschiedensten Unternehmen immer wieder angetroffen und durfte Erweiterungen oder Fehlerbehebungen vornehmen.

VBA ist grossartig

Es ist faszinierend, in welcher Form VBA-Anwendungen in den Unternehmen eingesetzt werden:

 

Diese Liste liesse sich noch beliebig verlängern, denn den Möglichkeiten scheinen keine Grenzen gesetzt zu sein. Die Vorteile beim Einsatz von Excel und VBA sind immens: Zum Einen ist VBA eine sehr einfach zu lernende Skriptsprache, deren Schnittstellen (zum Beispiel zu Excel) sehr gut dokumentiert sind. Zum Anderen geniessen Office-Produkte bei den Endanwendern eine hohe Akzeptanz, da vielfach gute Grundkenntnisse in der Bedienung vorhanden sind und Microsoft Office in vielen Unternehmen zur PC-Grundinstallation gehört.

VBA ist fürchterlich

Nahezu alle der oben erwähnten Anwendungen bereiteten den Unternehmen Probleme. Manchmal führte ein Windows-Update zu einem Problem, oder die Anwendung funktionierte nicht, wenn sie auf verschiedenen Zielsystemen mit unterschiedlichen Office-Versionen ausgeführt wurde. Oder die Anwender hatten Probleme mit (für ihre Verständnisse kryptischen) Fehlermeldungen, nachdem sie in einem Excel-Datenblatt eine Spalte verschoben oder in ein Feld einen Buchstaben statt einer Zahl eingefügt hatten.
Wie kam es zu diesen Problemen? Häufig lässt sich beobachten, dass die Anforderungen im Laufe der Zeit gestiegen sind und die Komplexität der Makros entsprechend zugenommen haben. Aus einer anfänglich einfachen Funktionalität wurde ein äusserst umständliches Konstrukt. Wenn es sich zu allem Übel auch noch um spärlich kommentierten Spaghetti-Code handelt, nimmt die Wartbarkeit drastisch ab.

Was gilt denn nun?

Da stellt sich die Frage: Muss das so sein? Verleitet VBA zu schlechter Code-Qualität und instabilen Anwendungen? Eine Antwort darauf habe ich bisher noch nicht gefunden. Dennoch gibt es Möglichkeiten, die Qualität und Wartbarkeit von VBA zu erhöhen.

1. Bringt VBA das gewünschte Resultat?

Als Erstes lohnt es sich, sich die folgende Frage zu stellen: Braucht es wirklich eine Lösung in VBA, um beispielsweise eine Ferienplanung für Mitarbeitende zu erstellen, oder gibt es andere Möglichkeiten? Wenn VBA die sinnvolle und gewünschte Lösung ist, finden sich mit etwas Recherche ausführliche Dokumentationen. Viele VBA-Themen (z. B. ActiveX-Komponenten) werden mit guten Tutorials und hilfreichen Youtube-Videos erklärt. Durch dieses einfach zugängliche Wissen kann die Anwendung dadurch bestmöglich ausgefeilt und eingesetzt werden.

2. Können Excel-Funktionalitäten genutzt werden?

Hier stellt sich die Frage nach den detaillierten Funktionalitäten: Was soll im Einzelnen geschehen? Sollen in Excel lediglich falsche Eingaben rot hervorgehoben werden? Dazu braucht es keine Makros, solche Funktionalitäten lassen sich sehr gut mit bedingten Formatierungen umsetzen. Sollen Daten grafisch dargestellt werden, eignen sich Pivot-Charts sehr gut. Wer ungewollte Manipulationen verhindern will, kann dies mittels Blattschutz einschränken. Es braucht also nicht für alles VBA, denn vieles lässt sich auch sehr gut mit bereits vorhandenen Excel-Funktionalitäten umsetzen.

3. Wie greife ich aus dem Makro auf Excel-Daten zu?

Bestimmt haben Sie bereits erlebt, dass nach dem Einfügen neuer Tabellenblätter oder dem Verschieben von Zellen das VBA-Makro nicht mehr ausgeführt werden konnte. Oftmals stösst man dann auf Code gemäss folgendem Beispiel:

Public Sub DoSomething1()

	Dim wert As Integer

	wert = Worksheets(1).Range("B3").Value

	MsgBox ("Eingegebener Wert: " & wert)

End Sub

Werden die Arbeitsblätter umsortiert oder neue Zeilen eingefügt, funktioniert das Makro nicht mehr korrekt. Im schlimmsten Fall fällt der Fehler nicht einmal auf. Das folgende Beispiel ist robuster, da die Neuanordnung der Tabellenblätter oder das Einfügen neuer Zeilen für das Makro keine Rolle mehr spielt:

Public Sub DoSomething2()

	Dim wert As Integer

	wert = Worksheets("Uebersicht").Range("Range_InfoFeld").Value

	MsgBox ("Eingegebener Wert: " & wert)

End Sub

Die Ranges-Bezeichnungen können komfortabel via Namensmanager bearbeitet werden. Aber auch das obengenannte Beispiel lässt sich noch optimieren, indem allfällige Fehler abgefangen und die Bezeichnungen als Konstanten definiert werden:

Private Const SHEET_UEBERSICHT = "Uebersicht"
Private Const RANGE_INFO = "Range_InfoFeld"


Public Sub DoSomething3()
On Error GoTo Fehlerbehandlung

	Dim wert As Integer
	
	wert = Worksheets(SHEET_UEBERSICHT).Range(RANGE_INFO).Value

	MsgBox ("Eingegebener Wert: " & wert)

	Exit Sub

Fehlerbehandlung:
    
	MsgBox ("Fehler abgefangen! Wurde eine gültige Zahl eingetragen?")

End Sub

4. Ein gepflegter Code lässt sich besser warten!

Spaghetti-Code und eine hohe Code-Redundanz müssen nicht sein. Es lohnt sich deshalb, sich regelmässig die Clean Code-Regeln zu Gemüte zu führen. Besonders das DIE/DRY-Prinzip möchte ich gerne jedem VBA-Entwickler nahelegen («Duplication is evil» / «Don’t repeate yourself»).
Zudem kann man sich durchaus auch mit der Code-Versionierung auseinandersetzen – auch hierzu findet man online Beispiele, wie VBA-Projekte mit einer Versionsverwaltung gepflegt werden können.

Fazit

Unter dem Strich ist VBA nicht nur grossartig und nicht nur fürchterlich. Wenn man sich für eine VBA-Lösung entscheidet, soll sie mit der erforderlichen Sorgfalt umgesetzt werden, damit die Anwendung wartbar, erweiterbar und stabil wird. Unter dieser Voraussetzung kann VBA zielführend und effizient eingesetzt und erweitert werden. Da VBA-Makros jedoch meist anfänglich für kleine, simple Einsatzbereiche gedacht sind und schlussendlich doch zur eierlegenden Wollmilchsau umfunktioniert werden sollen, sollte von Anfang an eher eine andere Lösung als VBA gewählt werden. Ansonsten endet es meist leider so, wie ich es in den letzten Jahren immer wieder erlebt habe – dass die VBA-Anwendung nach einem unverhältnismässig grossem Arbeitsaufwand letztendlich doch durch eine alternative Technologie abgelöst wird.

Anregungen, Feedback und weitere Inputs hierzu sind äusserst willkommen.

Kommentare

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Newsletter - aktuelle Angebote, exklusive Tipps und spannende Neuigkeiten

 Jetzt anmelden
NACH OBEN
Zur Webcast Übersicht