window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Registry-Zugriff per VBA

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Die Windows Registrierungsdatenbank, kurz Registry, ist die zentrale Sammelstelle für Einstellungsdaten aller Art. Die Konfiguration des gesamten Systems und fast aller Anwendungen hängt von ihr ab. Ob lesend oder schreibend, auch als Access-Entwickler hätte man gern eine Programmierschnittstelle für den Zugriff auf die Registry. Weil VBA hier nur eingeschränkte Möglichkeiten bietet, ist dem Thema dieser Beitrag gewidmet.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1408_Registry.mdb.

Eingebaute Zugriffsmethoden

Im Beitrag Anwendungseinstellungen abspeichern dieser Ausgabe wurde deutlich, dass die Werte von Eigenschaftsvariablen, die über die aktuelle Access-Sitzung hinaus Bestand haben sollen, außerhalb der Datenbank selbst gespeichert werden müssen. Statt dafür eine externe verknüpfte Tabelle zu verwenden, könnte man ebenso Variablen in der Registry unterbringen.

Genau dieser Zweck schwebte den VBA-Entwicklern wohl vor, als sie die vier Methoden zum Zugriff auf die Registry in die VBA-Bibliothek einbauten. Sie lauten

GetSettingGetAllSettingsSaveSettingDeleteSetting

GetSetting liest einen Registry-Wert aus, GetAllSettings liest alle Werte eines Schlüssels auf einmal, SaveSetting schreibt einen Wert in die Registry, und DeleteSetting löscht einen solchen wieder. Der Haken an der Sache ist, dass all diese Methoden nur einen ganz kleinen reservierten Bereich der Registry ansprechen können, nämlich den Schlüssel

HKEY_CURRENT_USER\Software\
  VB and VBA Program Settings

Unterhalb dieses Schlüssels kann man walten, wie man will, aber von allen anderen Bereichen der Registry ist man ausgesperrt. Dass dieser Schlüssel unter HKEY_CURRENT_USER liegt, ist nicht verwunderlich, denn für alle anderen Root-Schlüssel benötigt man schreibend Administratorrechte – und Access wird normalerweise nicht mit diesen Rechten gestartet.

Die Schlüsselstruktur unterhalb dieses Hauptschlüssels ist immer dieselbe. Sie wird in Bild 1 ersichtlich. Dort ist ein Zweig abgebildet, der über die Routinen der Beispieldatenbank erstellt wurde. AB_Registry als Unterschlüssel ist quasi der Generalschlüssel und Anwendungsname, und darunter kann ein oder können mehrere Bereichsschlüssel liegen. Im Beispiel ist es nur einer mit dem Namen General. Werte können außerdem nur im untersten Schlüssel gespeichert werden, also nicht etwa unter AB_Registry. Sie können eine beliebige Anzahl von Werten unterbringen. Bei größerem Umfang ist der übersicht halber aber die Anlage mehrerer Unterschlüssel überlegenswert. Zum General-Schlüssel könnte etwa noch ein Printer-Schlüssel kommen, der Werte für die Steuerung von Druckern aufnähme.

Der von VBA aus zugängliche Bereich der Registry

Bild 1: Der von VBA aus zugängliche Bereich der Registry

Wie kommt nun der Test-Eintrag zustande Die Syntax der Code-Zeile sieht so aus:

SaveSetting "AB_Registry", "General", "Test0", "Sascha"

Als Parameter werden also Hauptschlüssel, Unterschlüssel, Wertname und Wert übergeben. Die Schlüssel müssen zuvor nicht erst angelegt worden sein, wie das etwa bei Routinen, die das Windows-API benutzen, der Fall ist. Die SaveSetting-Anweisung macht alles auf einen Schlag: Hauptschlüssel, Unterschlüssel anlegen, Wert speichern. Als Wert können Sie einen beliebigen Variant-Typ übergeben und das selbstredend auch über eine Variable. Erlaubt sind alle Standarddatentypen, nicht jedoch Arrays oder Objekte. Es spielt keine Rolle, welchen Datentyp Sie verwenden, denn alle werden automatisch in Strings verwandelt. In Bild 1 wird das aus der Typ-Spalte des Editors ersichtlich, wo alle Werte als REG_SZ aufgeführt sind, dem Pendant zu vbString.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar