Fehlerbehandlung in VBA: Patterns für die Praxis

Eine Prozedur, die monatelang unauffällig ihren Dienst getan hat, bricht plötzlich mit einer kryptischen Meldung ab – und der Anwender steht vor einem Dialog, mit dem er nichts anfangen kann. Der Grund ist fast immer derselbe: Es gibt keine oder nur eine halbherzige Fehlerbehandlung. Dabei ist “On Error” eines der mächtigsten Werkzeuge in VBA, wenn man weiß, wie man es einsetzt. Wir schauen uns die Muster an, die aus einer fragilen Lösung eine robuste machen: wie wir Fehler nicht nur abfangen, sondern strukturiert behandeln, Ressourcen zuverlässig freigeben, Fehler zwischen den Schichten einer Anwendung weiterreichen und sie in einer Tabelle protokollieren. Die Beispiele findest Du im Modul “mdlFehlerbehandlung” der Beispieldatenbank. Wie das im Einzelnen gelingt, zeigt der vorliegende Beitrag.

Weiterlesen

VBA Basics: Auflistungen mit Dictionarys

Im Artikel “VBA Basics: Auflistungen mit Collections” (www.vbentwickler.de/514) haben wir die Collection kennengelernt – eine einfache, geordnete Liste ohne Verweis. Ihr grösstes Manko: Es gibt keine Möglichkeit zu prüfen, ob ein Schlüssel existiert. Genau hier setzt das Dictionary aus der Microsoft Scripting Runtime an. Es bietet Exists, erlaubt das direkte Ändern von Werten und liefert Schlüssel und Werte als Array – damit ist es die erste Wahl für Duplikatprüfungen, Häufigkeitszählungen und Lookup-Tabellen im Speicher. Wie wir es einrichten, was es kann und wo Stolpersteine lauern, zeigt dieser Beitrag.

Weiterlesen

Timer() – Performance-Messungen in VBA

Wer VBA-Code optimieren möchte, braucht eine zuverlässige Methode zur Zeitmessung. Die VBA-Funktion Timer() liefert die verstrichenen Sekunden seit Mitternacht – und damit ein einfaches, aber wirkungsvolles Werkzeug, um die Laufzeit von Prozeduren zu messen und verschiedene Implementierungen zu vergleichen. In diesem Artikel zeigen wir, wie Du Timer() gezielt einsetzt und die Ergebnisse sinnvoll auswertest.

Weiterlesen

Reguläre Ausdrücke in VBA: Die neue RegExp-Klasse

Seit Office Version 2508 sind reguläre Ausdrücke direkt in die VBA-Objektbibliothek integriert. Damit entfällt der bisherige Umweg über einen externen Verweis auf die VBScript-Bibliothek. Dieser Artikel erklärt die Hintergründe dieser Änderung, stellt alle Klassen und ihre Mitglieder vor und zeigt anhand zahlreicher Beispiele, wie Du reguläre Ausdrücke in Deinen VBA-Projekten einsetzen kannst.

Weiterlesen

Textdateien und Stream mit dem FileSystemObject

Im Artikel Dateimanagement mit dem FileSystemObject (www.vbentwickler.de/478) haben wir die Klasse FileSystemObject kennengelernt und damit Laufwerke, Verzeichnisse und Dateien verwaltet. Dabei haben wir drei Methoden und Funktionen erwähnt, die wir in einem separaten Artikel behandeln wollten: CreateTextFile, OpenTextFile und OpenAsTextStream. Diese drei Elemente sind das Tor zur Klasse TextStream, mit der wir Textdateien erstellen, beschreiben und auslesen können. In diesem Artikel schauen wir uns zuerst an, wie wir TextStream-Objekte erzeugen, und gehen dann alle Eigenschaften und Methoden der Klasse durch. Abschließend bauen wir ein praxisnahes Beispiel, in dem wir eine CSV-Datei erzeugen und wieder einlesen.

Weiterlesen

Timer ohne Formular mit VBA programmieren

Unter Access kennt man eigentlich nur den Timer, den das Formular-Objekt mitbringt. Damit können wir ein Ereignis definieren, das in einem bestimmten Zeitintervall ausgelöst wird. Was aber, wenn wir einen Timer einmal außerhalb des Kontexts eines Formulars benötigen? Dann erstellen wir uns einfach eine eigene Timer-Klasse. Dazu sind zwar ein paar Tricks und API-Funktionen nötig, aber das soll kein Hindernis sein. Deshalb zeigen wir in diesem Beitrag im Detail, wie das gelingt und wie sich dieser Timer in der Praxis einsetzen lässt. Und im Gegensatz zum Formulartimer haben wir noch einen Vorteil: Wir können nämlich nicht nur einen, sondern beliebig viele Timer einsetzen und laufen lassen.

Weiterlesen

VBA: Bedingte Kompilierung nutzen

In VBA-Projekten kann es vorkommen, dass Anweisungen nur in bestimmten Situationen kompiliert werden sollen. Das bekannteste Beispiel sind die Deklarationen von API-Funktionen, die je nach VBA-Version mal in der 32-Bit- und mal in der 64-Bit-Variante bereitgestellt werden sollen. Da die 64-Bit-Version bei Verwendung von 32-Bit-Access unter Umständen Datentypen mit sich bringt, die es in der 32-Bit-Version nicht gibt, würde dies beim Kompilieren zu Fehlern führen. Daher gibt es die sogenannte bedingte Kompilierung, bei der man mit speziellen If…Then-Bedingungen dafür sorgen kann, dass nur die für die aktuelle Version relevanten Codezeilen kompiliert werden können. In diesem Artikel zeigen wir, wie die bedingte Kompilierung funktioniert. Außerdem stellen wir ein weiteres Beispiel vor, in dem wir entweder die Early Binding- oder die Late Binding-Verwendung von Variablen nutzen wollen – abhängig von einer zur Laufzeit gesetzten Bedingung.

Weiterlesen

VBA: Early Binding und Late Binding

Wenn wir Objektvariablen deklarieren und instanzieren wollen, gibt es zwei Varianten: Early Binding und Late Binding. Beide haben ihre Daseinsberechtigung. Bei der ersten können wir IntelliSense nutzen, benötigen allerdings einen Verweis auf die jeweilige Bibliothek. Durch das Vorhandensein des Verweises ist die Performance außerdem ein wenig besser. Beim Late Binding deklarieren wir die Variable mit dem Typ Object und weisen diese anders zu. Hier benötigen wir keinen Verweis, was wiederum Vorteile mit sich bringt. Ferner können wir kein IntelliSense nutzen. In diesem Artikel zeigen wir zuerst die Unterschiede und die Vor- und Nachteile von Early Binding und Late Binding. Zudem stellen wir eine Möglichkeit vor, beide Varianten gleichzeitig zu definieren und zur Laufzeit zwischen den Methoden zu wechseln.

Weiterlesen

Dateimanagement mit dem FileSystemObject

VBA bietet bereits einige Befehle, mit denen wir Dateioperationen ausführen können. Wir können mit MkDir neue Verzeichnisse erstellen, mit Dir prüfen, ob Dateien oder Verzeichnisse vorhanden sind oder mit Kill Dateien löschen. Diese Befehle sind aber recht kompliziert in der Handhabung. Daher schauen wir uns in diesem Artikel einmal die Klasse “FileSystemObject” an, mit der wir deutlich komfortabler mit Dateien und Verzeichnissen arbeiten können. Damit lässt sich alles erledigen, was mit dem Anlegen, Kopieren, Verschieben und Löschen zusammenhängt – und vieles mehr.

Weiterlesen

Airtable per Rest-API synchronisieren

Das Datenbanksystem Airtable bietet eine Menge Funktionen an, aber offeriert leider keine direkte Schnittstelle, mit der man direkt etwa von Access auf die enthaltenen Daten zugreifen kann. Es gibt zwar kostenpflichtige ODBC-Schnittstellen von Drittanbietern, aber wir wollen den Zugriff selbst programmieren. Wie für moderne SaaS-Tools üblich, bietet auch Airtable eine Rest-API als Schnittstelle für den Zugriff auf die Daten an. Diese wollen wir im vorliegenden Artikel untersuchen und zeigen, wie wir auf die enthaltenen Daten zugreifen und Informationen aus einer lokalen Datenbank in eine Airtable-Datenbank schreiben können.

Weiterlesen