VBA Makros in Unternehmen

07.08.2015

makro_kv - VBA
Im Jahr 1993 hat Microsoft eine auf Visual Basic basierende Skriptsprache veröffentlicht, die bis heute in den Microsoft-Office Dateien der Unternehmen eingesetzt wird. Eine proprietäre Skriptsprache, die nur für ein einziges Office-Paket entwickelt wurde und dessen Quellcode heutzutage eigentlich kein Unternehmen mehr pflegen möchte – es aber trotzdem macht. Ich spreche hier von VBA (Visual Basic for Applications). In vielen Excel-Sheets von Unternehmen steckt unperformanter VBA-Code, der so manchen Anwender und Entwickler auf eine Gedulds-Probe stellen kann.

Doch warum sollte ein Unternehmen heutzutage eine prozedurale Skriptsprache zur Manipulation von Daten verwenden, wenn doch Excel eigentlich fast alle Möglichkeiten zur Datenmanipulation bietet? Die Antwort darauf fängt meistens mit einem harmlosen „lass uns dazu mal kurz ein VBA Skript schreiben“ an. Für spezielle Anwendungsfälle kann VBA durchaus sehr hilfreich sein: Wenn beispielsweise Daten iterativ manipuliert werden sollen, aber Excel nicht die dazu notwendigen Funktionen bietet, kann ein kleines VBA Skript sinnvolle Abhilfe schaffen.

Wenn VBA Makros unwirtschaftlich werden

Spätestens, wenn aus dem „kleinen VBA Skript“ ein 2000-Zeilen-Code mit 18 Modulen über Jahre hinweg gewachsen ist, verursacht das VBA Makro unverhältnismäßig hohe Kosten, wenn Entwickler den Code verbessern oder erweitern sollen. Ist man einmal an diesem Punkt, muss man sich zwangsläufig die Frage stellen, ob Excel + VBA überhaupt das richtige Tool für diese Aufgabe der Datenmanipulation ist. Hierzu habe ich ein passendes Zitat von Wikipedia:

„Wie die meisten Tabellenkalkulationen ermöglicht Excel umfangreiche Berechnungen mit Formeln und Funktionen (…).
In geringem Umfang können Daten bearbeitet werden, wie kurze Texte verkettet oder logische Berechnungen (wenn…dann) durchgeführt werden.“
Wikipedia

So wird Ihr VBA Makro wieder schnell

Neben dem Kosten-Problem, kommt meist auch noch die Performance als Problem der Anwender hinzu. Das scheinbar unperformante VBA kann so manche Excel-Instanz zum Stillstand zwingen.
Doch auch mit VBA kann performanter Code geschrieben werden. Schon zwei einfache Tipps können das Ausführen eines VBA-Makros wieder schnell machen.

  1. „Select“- und „Active“-Statements vermeiden
    Statt
    Sheets("Test").Cells(1,3).Select 'Selektieren kostet Zeit
    ActiveCell.Value = 1

    Besser
    Sheets("Test").Cells(1, 1).Value = 1
    oder
    Sheets("Test").Range("A1").Value = 1
  2. Screenupdating während des Ausführens deaktivieren
    Application.ScreenUpdating = False
    'Ihr VBA Makrocode
    Application.ScreenUpdating = True

 

Zugegeben, der erste Punkt muss schon während der Entwicklung umgesetzt werden und lässt sich im Nachhinein nur mit großem Aufwand realisieren. Aber es lohnt sich. Die meiste Zeit geht in großen Makros nicht bei der Berechnung verloren, sondern beim Selektieren und Aktivieren von Zellen. Ein Makro, welches fast ausschließlich „Select“ und „ActiveCell“ Statements enthält, wurde mit dem Makro-Recorder generiert. Deshalb sollte man den vom Makro-Recorder generierten Code niemals 1:1 übernehmen.

Der zweite Punkt ist vor allem für die Entwickler interessant, die schnellstmöglich und mit wenig Aufwand, ihr Makro beschleunigen wollen. Zu Beginn des Makros die grafische Aktualisierung der Anzeige deaktivieren und am Ende wieder aktivieren. Einfach, aber wirksam.

Beispiel Excel zum Download

Unter folgendem Link können Sie eine .xlsm-Datei herunterladen, in der drei Performance-Tests enthalten sind. Jeder der drei Buttons „Select-Test“, „Select-Test2“ und „Non-Select-Test“ schreibt Daten in die ersten 5000 Zeilen der Arbeitsmappe. Der einzige Unterschied: die Art Implementierung.

Schauen Sie sich die unterschiedlichen Quellcodes der einzelnen Tests genau an und beurteilen Sie selbst dessen Performance.
Performance_Test.xlsm

 

doubleSlash-Teaser-Blog_Programmierung

Zurück zur Übersicht

2 Kommentare zu “VBA Makros in Unternehmen

  1. Wie cool VBA ist, darüber kann man natürlich streiten. Manchmal ist es jedoch die einzige sinnvolle Lösung. In einem unserer Projekte haben wir Java und VBA kombiniert. Die Java-Software führt ziemlich komplexe Excel-Transformation durchführt, welche in VBA schwer zu realisieren und zu warten gewesen wäre. Anforderung war, dass das Excel nachträglich bearbeitet werden kann und danach automatisch ein Summenblatt erstellt werden soll. Diese nachträgliche Dynamik ließ sich tatsächlich mit VBA am besten umsetzen. Gegen VBA spricht: VBA ist nicht mit automatisierten Tests testbar und daher fehleranfällig und schwer/teuer zu warten. Außerdem ist ein Rollout eines Updates bei vielen Benutzern schwierig. Oft sind verschiedene Versionen eines Excel-Files mit VBA im Umlauf… Meine Meinung: Für jede Aufgabe das richtige Tool einsetzen und ggf. verschiedene Tools kombinieren.

Kommentar verfassen

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

*Pflichtfelder

*