Die Registry von Windows ein undurchschaubarer Dschungel an Einstellungen. Wenn man nicht weiß, was man tut, können Änderungen an diesen Einstellungen zu Problemen beim Einsatz von Windows oder Anwendungen kommen. Es gibt einige API-Funktionen, mit denen man auch per VBA Änderungen an der Registry vornehmen kann. Die API-Programmierung ist aber grundsätzlich ein Profithema, und erst recht sollten Einsteiger mit API-Funktionen nicht die Registry manipulieren. Zum Glück hat Microsoft jedoch einen Satz von VBA-Funktionen bereitgestellt, mit denen man halbwegs sicher Informationen in die Registry schreiben und diese auch wieder auslesen kann. Der Clou ist, dass man damit einen speziell für VB- und VBA-Anwendungen vorgesehenen Teil der Registry nutzen kann. In diesem Beitrag stellen wir diese Funktionen vor und zeigen, welchen Bereich in der Registry sich damit nutzen lässt.
Die Windows-Registry speichert eine Vielzahl von Daten, die für den Betrieb des Windows-Betriebssystems und installierter Anwendungen notwendig sind. Dazu gehören Konfigurationsinformationen und Einstellungen für Hardware, Software, Benutzerprofile und Systemressourcen.
Konkret umfasst dies Treiberinformationen, Benutzerkonten, installierte Programme, Systemdienste, Dateizuordnungen, System- und Anwendungsoptionen sowie Netzwerkeinstellungen. Diese Daten sind in einer hierarchischen Struktur organisiert, die als Registry bezeichnet wird.
Hier gibt es verschiedene Bereiche, von denen vor allem der Bereich HKEY_LOCAL_MACHINE und HKEY_CURRENT_USER interessant sind. Der Unterschied ist, dass HKEY_LOCAL_MACHINE Informationen speichert, die für alle Benutzer bereitstehen sollen, während HKEY_CURRENT_USER nur Informationen speichert, die mit dem aktuellen Benutzer in Zusammenhang stehen.
Wir schauen uns in diesem Beitrag einen Bereich der Registry an, der ein Teilbereich von HKEY_CURRENT_USER ist. Damit ist dieser Speicherort für Informationen in der Registry der perfekte Ort für Daten, die in Zusammenhang mit der Benutzung einer Anwendung durch den aktuellen Benutzer stehen.
Mit den nachfolgend vorgestellten VBA-Funktionen können wir also prima Daten in der Registry speichern, die bei der Arbeit mit einer Anwendung anfallen und aus verschiedenen Gründen dauerhaft gespeichert werden sollen – beispielsweise, um diese beim nächsten Start der Anwendung wieder abzurufen.
Bereich für VB und VBA
Als Erstes schauen wir uns den Bereich genauer an, in dem wir unsere Anwendungsdaten speichern können.
Dazu öffnen wir die Registry, was zum Beispiel gelingt, indem wir den Text Reg in die Windows-Suche eingeben und dann das Ergebnis Registrierungs-Editor auswählen. Dies öffnet das Fenster Registrierungs-Editor. Hier können wir direkt zum folgenden Pfad navigieren:
Computer\HKEY_CURRENT_USER\Software\VB and VBA Program Settings
Darunter befinden sich Einträge in einer fest vorgegebenen Hierarchie. Die erste Ebene, in der wir im Screenshot die Namen von Anwendungen sehen, ist für die einzelnen Anwendungen vorgesehen.
In der zweiten Ebene können wir für jede Anwendung unterschiedliche Sektionen einrichten, sofern dies nötig ist (siehe Bild 1).
Bild 1: Bereich der Registry für VB- und VBA-Anwendungen
Wir müssen aber zumindest eine Sektion anlegen, um mit den gleich vorgestellten VBA-Funktionen auf die Daten zugreifen zu können.
Diese wiederum befinden sich als Name-Wert-Paare in den einzelnen Sektionen. Neben dem Namen legen wir einen Wert fest, wobei wir mit den VBA-Funktionen aus diesem Beitrag ausschließlich Text-Einträge anlegen können.
Registry-Eintrag anlegen
Schreiten wir direkt zur Tat und legen einen Registryeintrag per VBA an. Nehmen wir an, unsere Anwendung heißt aiuRegistrybeispiele. Die Sektion soll Optionen heißen. Damit haben wir schon zwei der vier Parameter der Anweisung SaveSetting. Hier sind die Optionen in der Übersicht:
- AppName: Name der Anwendung
- Section: Sektion
- Key: Name des Schlüssels
- Setting: Wert der Einstellung
Mit der folgenden Anweisung legen wir einen ersten Eintrag an:
SaveSetting "aiuRegistrybeispiele", "Optionen", _ "Beispielkey", "Beispielsetting"
Dieser Eintrag sieht anschließend wie in Bild 2 aus.
Bild 2: Selbst angelegter Eintrag in der Registry
Registry-Eintrag auslesen
Um diesen Eintrag wieder auszulesen, verwenden wir die Funktion GetSetting. Diese erwartet ebenfalls vier Parameter, von denen der letzte allerdings optional ist.
Die ersten drei stimmen mit denen der Anweisung SaveSetting überein, der letzte heißt Default und legt einen Wert fest, der von der Funktion zurückgegeben werden soll, wenn der Registry-Eintrag nicht gelesen werden kann.
Wenn wir wissen, dass ein Eintrag vorhanden ist, reichen die ersten drei Parameter. Die folgende Anweisung ruft den zuvor erstellten Eintrag ab und gibt diesen im Direktbereich des VBA-Editors aus:
Debug.Print GetSetting("aiuRegistrybeispiele", _
"Optionen", "Beispielkey")
Eintrag nicht vorhanden
Wenn der angefragte Registry-Eintrag nicht vorhanden ist, liefert die Funktion GetSetting eine leere Zeichenkette zurück. In diesem Fall können wir einen Standardwert angeben, der stattdessen zurückgegeben werden soll.
Der folgende Aufruf liefert so beispielsweise den Wert KeinValue zurück, wenn entweder die Anwendung, die Sektion oder der Schlüssel nicht gefunden werden kann:
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo