Language: Deutsch English















Last Update: 2024 - 01 - 25








Better VBA - Besseren VBA Code schreiben

von Philipp Stiefel, ursprünglich veröffentlicht 19. Dezember 2016

letzte Aktualisierung 2021-02-21


Sterne und Sternschnuppe im Berghimmel - Better VBA Titelbild

Based on a photo by Štefan Štefancík, used here under CC0 licensing

Dies ist die begleitende Webseite zu meiner Better-VBA-Videoserie auf YouTube. Eine Serie in der ich verschiedene Techniken und Methoden vorstellen werde, die ich für nützlich halte, um besseren VBA Code zu schreiben.

Aber, was genau ist denn Besserer VBA Code? – Nun, falls es eine knappe und präzise Definition dafür gibt, dann kenne ich sie selbst noch nicht. Vielleicht kommen wir einer Antwort näher, wenn wir uns die Gedanken und Ideen, die ich dazu bisher habe, anschauen.

Lass uns mit ein paar weiteren Fragen beginnen.

Bist du ein VBA-Benutzer oder VBA-Entwickler? Was sind die Maßstäbe, mit den du die Qualität deines Codes bemisst? Ist es dein einziges Ziel Code zu schreiben, der funktioniert, oder strebst du mehr an?

Willst du besseren Code schreiben?

Du liest weiter, daher nehme ich an, die Antwort ist wahrscheinlich: „Ja!“

Kann Code besser sein, als einfach nur zu funktionieren?

Die Programmiersprache VBA wird sehr intensiv in für aufgezeichnete Makros und kleine Automatisierungsprojekte genutzt. Es wird aber ebenfalls für ernstzunehmende, ziemliche große und manchmal missionskritische Projekte verwendet. Dies sind zwei absolut gegensätzliche Anwendungsgebiete. Diese widersprüchlichen Einsatzbereiche begünstigen Probleme.

Viele VBA-Benutzer beginnen ihren Weg zum VBA-Entwickler mit diesen sehr kleinen und einfachen Automatisierungsprojekten. Manche dieser kleinen Anwendungen wachsen und wachsen mit der Zeit zu einer beträchtlichen Größe und werden dabei immer wichtiger für das Unternehmen oder die Abteilungen, die sie benutzen.

Viele Entwickler, die solche Anwendungen warten und weiterentwickeln haben ihre eigenen Kenntnisse und Programmiertechniken nicht in dem Maße weiterentwickelt, wie es für die gewachsenen Anwendungen angemessen wäre. Sie haben mit ein paar Makros angefangen, die irgendwann zu VBA Code konvertiert wurden. Dieser Code hat üblicherweise eine grauenvolle Qualität, aber er funktioniert.

Später wird der Code etwas vielseitiger gestaltet und an die gestiegene Komplexität der Anforderungen angepasst. Dabei werden häufig aber nur die absolut erforderlichen Änderungen am Code vorgenommen und alles andere so belassen, wie es ursprünglich geschrieben (oder auto-generiert) wurde.

Diese „Evolution“ des Projektes resultiert in Code, der (weitgehend) das tut was er soll. - Aber dieser Code ist zerbrechlich und wird immer schwieriger zur warten.

Vielen Entwicklern, die an einem solchen Projekt arbeiten, fehlt die Erfahrung um zu erkennen, dass dies nicht so sein muss. Sie nehmen einfach an, dass größere Projekte auch einfach schwerer zu warten sind.

Andere sehen durchaus die Probleme, aber sie haben nicht das Wissen, wie diese Probleme behoben werden können. Dies ist verständlich. Die meisten Ressourcen zum Thema VBA im Internet konzentrieren sich nur darauf, wie man konkrete Funktionalität implementieren kann. Sie zeigen wie man Code schreibt, der funktioniert, aber damit begnügen sie sich.

Es ist nicht einfach Informationen zu finden, die darüber hinausgehen, reine Funktionalität implementieren. Informationen dazu wie man mit VBA lesbaren, wartbaren und vielleicht sogar schönen Code schreibt. Code der sowohl einfach zu verstehen ist als auch robust und widerstandsfähig ist. Code, der denen die ihn warten, Spaß macht.

Verbessere deine Fähigkeiten, verbessere deinen VBA Code

Ich habe mehr als 15 Jahre Erfahrung darin VBA-Code zu schreiben. Ich bin mit einigen anderen Sprachen, wie Java, C# und Transact-SQL vertraut. Ich habe genauso an winzig kleinen Projekten gearbeitet wie an ein paar wirklichen riesigen (in VBA-Maßstäben). I denke, dass ich eine ganze Menge Best Practices kenne um lesbaren, wartbaren und robusten Code zu schreiben.

Davon abgesehen, möchte ich ehrlich mit dir sein. Ich habe nicht das Gefühl, dass ich alles besser wüsste. Ich bin mir sehr bewusst, dass ich immer noch Code schreibe, der nicht so fehlerfrei, nicht so lesbar, nicht so wartbar und nicht so robust ist, wie er sein sollte. - Auch ich lerne noch.

Es gibt keinen magischen Schalter, den du umlegen kannst um deinen Code besser zu machen. Besserer VBA Code hat viele Aspekte. Wenn du sie jemals alle gelernt hast, tauchen vielleicht weitere, neue Aspekte auf, über die zuvor niemand nachgedacht hat.

Es gehört mehr dazu guten Code zu schreiben, als nur zu wissen, wie das grundsätzlich funktioniert. Du musst deine Kenntnisse und Fähigkeiten bei jeder einzelnen Zeile Code, die du schreibst, auch tatsächlich anwenden. Das erfordert Disziplin. Eine Menge Disziplin. – Mehr als ich häufig habe.

Also brauchen wir Werkzeuge, die es einfacher machen besseren Code zu schreiben. Wir brauchen Werkzeuge, die uns in die richtige Richtung schubsen, wenn wir von der richtigen Vorgehensweise abweichen, die wir eigentlich kennen und befolgen sollten.

Auch ich lasse von Zeit zu Zeit nach; manchmal ignoriere ich die Best Practices. Aber trotz all meiner Fehler, trotz meiner gelegentlichen Nachlässigkeit, strebe ich danach, meinen Code zu verbessern. Strebe ich danach, in der nächsten Prozedur, dem nächsten Modul oder der nächsten Anwendung, besseren Code zu schreiben.

Begleite mich auf dem Weg besseren VBA Code zu schreiben!

Die Videos

Hier werde Ich eine kurze Zusammenfassung der Inhalte jedes Videos veröffentlichen. Da der wesentliche Inhalt aber in den Videos ist, werde ich die Themen nicht so ausführlich behandeln, wie ich das sonst tue.

Die ersten vier bisher aufgenommenen Videos sind zu Themen, die ich im Einsteiger-Niveau eingeordnet hätte. - Allerdings sind ein paar Leute, die eine kleine Vorschau gesehen haben, diesbezüglich anderer Meinung. - Also überlasse ich letztendlich dir diese Einordnung.

Episode 0 - Einleitung

Dieses Video stellt die Serie vor und hat im Kern denselben Inhalt wie dieser Text. Ich habe dies als fünftes Video, nachdem ich diesen Text geschrieben habe, aufgezeichnet. Da Better VBA im Wesentlichen eine Videoserie ist, dachte ich, dass auch diese Einführung im Videoformat existieren sollte.

Episode 1 - Wichtige Einstellungen für den VBA Editor

Bevor du die allererste Zeile VBA Code schreibst, solltest du überprüfen, dass der VBA Editor richtig konfiguriert ist. Während die meisten Einstellungen nach persönlichen Vorlieben vorgenommen werden können, gibt es zwei Optionen, die aus meiner Sicht nicht verhandelbar sind.

  • Automatische Syntaxüberprüfung - Dies ist die nervtötendste Funktion, die ich jemals in irgendeinem Codeeditor gesehen habe. Schalte dies aus, um die nervigen Meldungsfenster auszuschalten, die hochpoppen, wenn du eine Codezeile mit dem Cursor verlässt in der sich noch ein Syntaxfehler befindet.
  • Variablendeklaration erforderlich - Automatische (nicht explizit erforderliche) Variablendeklaration ist die Ursache für unzählige Fehler mit denen ich Anfänge habe kämpfen sehen. Ich kann nicht verstehen, warum sich Microsoft entschieden hat diese Option standardmäßig auszuschalten. Schalte dies ein und stelle sicher, dass du nachträglich in jedes Modul, das du bereits in deinem Projekt erstellt hast, eine Option Explicit-Anweisung einfügst.

Es gibt einige weitere Optionen, die du unbedingt kennen solltest, wie z.B. Benachrichtigung vor Zustandsänderung und die Unterbrechen bei Fehlern-Optionen, auch wenn es keine universelle Regel gibt, wie du diese einstellen solltest.

Episode 2 - Variablennamen

Variablen sind ein elementarer Bestandteil (fast) jeder Prozedur. Die sinnvolle Benennung der Variablen kann den Unterschied zwischen einfach intuitiv lesbaren Code und einen undurchdringbaren Haufen Mist machen.

Ich zeige eine relativ einfache VBA Prozedur mit bewusst grauenvoll nichtssagenden Variablennamen. Dann überarbeite ich den Code und passe dabei nur die Namen der Variablen an. - Schau dir den Unterschied an.

Episode 3 - Konstanten in VBA

Die Bedeutung der sinnvollen Benennung von Variablen ist eine ziemlich offensichtliche Angelegenheit. Aber was ist mit Werten, die nicht variabel sein sollen? Sind wir dazu verdammt, dieselben hartcodierten, und häufig aussagelosen, Werte wieder und wieder in unseren Code zu tippen? - Dank Konstanten sind wir das nicht.

Episode 4 - Enums (Enumerationen) in VBA

Während VBA-Entwickler mit Konstanten üblicherweise vertraut sind, sind Enums meiner Erfahrung nach eher unbekannt. Du solltest unbedingt wissen, wie du diese Unterart der Konstanten einsetzen kannst und wie diese die Verwendbarkeit deines Codes (durch andere Entwickler) deutlich verbessern.

Episode 5 - VBA Codeformatierung

Ein elementarer Faktor für die Lesbarkeit von Quellcode ist seine Formatierung. Eigentlich dachte ich, dieses Thema wäre zu trivial um darüber ein Video zu machen. Meine täglichen Erfahrungen mit Code von anderen Entwicklern, sowohl Anfängern als auch Fortgeschrittenen, deuten aber darauf hin, dass dies nicht so ist. Daher zeige ich hier den Unterschied der Lesbarkeit von schlecht formatierten Code und gut formatierten Code auf.

Episode 6 - Variablendeklaration

Variablen sind ein essenzieller Teil der Programmierung. Also solltest du genau wissen, wie du deine Variablen korrekt deklarierst.

In diesem Video zeige ich einen häufigen Fehler bei der Variablendeklaration, ein paar generelle Tipps und erläutere, warum ich die Ungarische Notation nicht mehr verwende.

Egal ob du die Ungarische Notation verwendest, oder nicht, du solltest unbedingt wissen was das ist und was damit bezweckt werden soll. Der de-facto Standard für die Ungarische Notation in VBA sind die Leszynski/Reddick-Namenskonventionen, die in VBA häufig verwendet werden.

Um meine Meinung zu diesem Thema vollständig und im richtigen Kontext zu verstehen, solltest du auch mein Video zu Benennung von Variablen (Episode 2) ansehen.

Eine Sache, von der ich dringend abrate, ist die Verwendung von DefType-Statements zur Typisierung von Variablen. Für die Neugierigen; hier ist ein Link zur Dokumentation der DefType-Statements. - Bitte verwende die DefType-Statements nicht!

Viel Spaß beim schauen…

Episode 7 - Tools zur Codeformatierung

Die Formatierung des VBA-Quellcodes entscheidet ganz wesentlich über die Lesbarkeit des Codes. Während des Schreibens von Code solltest du ihn sofort manuell richtig formatieren, da es dir dort bereits hilft fehlerfreien Code zu schreiben. 

Was aber, wenn du eine alte Anwendung weiterentwickeln musst, in welcher der vorhandene Quellcode nicht besonders lesbar formatiert ist? Natürlich bringt die Nachbearbeitung des Codes große Vorteile durch die verbesserte Lesbarkeit, aber der Aufwand den Code manuell neu zu formatieren ist groß.

In diesem Video zeige ich zwei Tools, die den Aufwand für die nachträgliche Formatierung von Quellcode praktisch auf Null reduzieren.

Smart Indenter

Smart Indenter ist ein kostenloses Add-In einzig zu dem Zweck VB/VBA Quellcode nachträglich richtig einzurücken.

Weitere Informationen und kostenloser Download: http://oaltd.co.uk/Indenter/

MZ-Tools

MZ-Tools, ein Add-In mit einer Unmenge an nützlichen Erweiterungen für Visual Studio und die VBA-Entwicklungsumgebung, enthält auch eine Funktion zum richtigen Einrücken von Quellcode.

Weitere Informationen und kostenlose Trial-Version: https://mztools.com/

Episode 8 - Wiederverwendung von Code mit Prozeduren

DRY - Don’t repeat yourself! - Dies ist ein wichtiger Grundsatz, um effektiven und wartbaren Code zu schreiben. Also sollten wir Code den wir bereits geschrieben haben, wiederverwenden anstatt ihn immer wieder neu zu schreiben. Ein grundlegender Ansatz zur Wiederverwendung von Code ist es, Prozeduren zu schreiben anstatt Code mit Copy&Paste herumzukopieren.

Episode 9 - Bessere Code-Lesbarkeit durch Prozeduren

Ein weiteres, überzeugendes Argument Prozeduren zu verwenden: Lesbarkeit!

Code zwecks Wiederverwendbarkeit in Prozeduren zu gliedern ist ein bekanntes Konzept. Kürzlich habe ich im Clean Code von Robert C. Martin jedoch noch ein anderes Argument für die Erstellung von Prozeduren gelesen.

Mit Prozeduren lässt sich die intuitive Lesbarkeit von Code sehr deutlich verbessern. Schau dir das Video an, um zu sehen wie sich komplexe, technische If-Blöcke fast wie (englische) Prosa lesen, nachdem ich sie in ihre eigenen Funktionen verpackt habe.

Ich bin immer noch verblüfft wie effektiv dieser eigentlich einfache Ansatz ist, umso mehr, weil ich in über 10 Jahren nicht selbst auf diese Idee gekommen bin.

Buchempfehlung: Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code*- Robert C. Martin
(*=Amazon Affiliate Link)

Episode 10 – VBA Code kommentieren?

Kommentare werden oft als Wunderwaffe angesehen, um VBA Code lesbarer und wartbarer zu machen. – Aber ist das wirklich der Fall?

Es war einmal eine Zeit, in der wurde „kommentierter Quellcode“ als die Premium-Edition von Quellcode betrachtet. Diese Zeiten sind lang vorbei, aber die Idee, dass VBA-Code besser ist, wenn man mehr Kommentare hinzufügt, hält sich immer noch. - Ich stelle diese Sichtweise in Frage und dränge dich den Nutzen jedes einzelnen Kommentars sorgfältig zu evaluieren.

Es gibt zahlreiche potenzielle Probleme im Zusammenhang mit Kommentaren in der Programmierung. Sie können von der Substanz des eigentlichen Codes ablenken, indem sie nutzlose, veraltete oder sogar falsche, widersprüchliche Informationen liefern. Noch schlimmer ist, dass sich manche Entwickler ermutigt fühlen nicht mehr auf die Lesbarkeit ihres Codes zu achten, weil sie ihn ja „in den Kommentaren erklären“ können.

Kommentare sollten immer das letzte Mittel sein, um Informationen oder Erklärungen zu ergänzen, die nicht direkt im Code ausgedrückt werden können. Sie sollten niemals eine Ausrede sein, deinen Code nicht so lesbar zu schreiben, wie du es nur kannst.

Episode 11 – Wie verwendet man On Error Resume Next?

Das On Error Resume Next Statement bringt die VBA Laufzeitumgebung dazu jegliche Fehlermeldung zu unterdrücken und einfach die nächste Zeile Code auszuführen. – Wie komfortabel. – Nicht!

Dies ist kein Witz. Natürlich ist es technisch einfach ein On Error Resume Next Statement an beliebiger Stelle in deinem VBA-Code zu schreiben und es wird das tun, was du angewiesen hast. – Aber hast du wirklich alle (Seiten-)Effekte bedacht, die dieses Statement haben wird? Und werden auch alle anderen Entwickler, die diesen Code in der Zukunft anfassen werden, ebenfalls alle Konsequenzen bedenken?

Wenn ich On Error Resume Next sehe, sogar in meinen eigenen Anwendungen, ist dort häufig mindestens ein Bug verbunden mit der falschen Anwendung dieses Error Handling Statements. Also, wie verwendet man On Error Resume Next richtig?

Es ist essenziell den Gültigkeitsbereich von On Error Resume Next so klein wie möglich zu halten. Weiterhin achte sehr genau darauf, wie du prüfst, ob der Code, der von On Error Resume Next betroffen ist, wirklich erfolgreich war.

Fazit

Dies sind die bisher aufgezeichneten Videos. - Ich bin dankbar für jedes Feedback zu den Videos. Schick mir eine Email oder schreibe einen Kommentar auf YouTube.

Es hat mir Spaß gemacht, diese Videos aufzuzeichnen und zu editieren. Ich bin recht sicher, dass weitere Videos folgen werden. Ich habe schon eine Liste mit weiteren Ideen.

Abonniere meinen Newsletter, damit du die nächste Folge nicht verpasst.

 

Share this article: Share on Facebook Tweet Share on LinkedIn Share on XING

Abonniere meinen Newsletter

*

Ich werde Deine Email-Addresse niemals weitergeben. Du kannst den Newsletter jederzeit abbestellen.
Die Emailliste wird bei Mailchimp in den USA gespeichert. Diese Auftragsverarbeitung ist vertraglich geregelt. Weitere Details in der Datenschutzerklärung.

Vorteile des Newsletter-Abos



© 1999 - 2024 by Philipp Stiefel - Datenschutzerklärung