EXCEL und die Registry

 

Home
Nach oben

Last Update 20.07.2004

Copyright  2003
Ramses (C)

 

Es ist von EXCEL aus möglich die Registry zu bearbeiten,... aber nicht so wie wir uns das vorstellen.

Es gibt einen speziellen Bereich in der Registry

"HKEY_USERS\UserID\Software\VB and VBA Program Settings\"

in dem Sie mit der Anweisung "SaveSetting" bzw. "GetSetting" Werte hinterlegen können, bzw. wieder auslesen können.

Auf die gesamte Registry kann man nur mit API-Funktionen oder dem Windows Scripting Host (WSH) zugreifen. Aber für die meisten Anwendungen reicht das aus.

Eigene VBA-Registry Keys anlegen

'Option Explicit
Const RegAppName As String = "TestAnw"
Const RegKeySection As String = "StartUp"

Sub Reg_Key_setzen()
Dim i As Integer
For i = 1 To 10
     'Legt 10 verschiedene Schlüssel "i" an und setzt Werte
     'Appname ist der Schlüsselname
     'Section der jeweilige Unterschlüssel der unter dem Schlüsselname angelegt wird

     SaveSetting appname:="TestAnw", section:="StartUp", key:=i, setting:=i + 75
     'Eintrag mit Konstanten
     'siehe oben "Const RegAppName As String = "TestAnw"

     'SaveSetting appname:=RegAppKey, section:=RegKeySection, key:=i, setting:=i + 75
Next i
End Sub

  
Sub Reg_Key_Alle_Settings_auslesen()
Dim Einstellungen As Variant, intsettings As Integer
' Einträge Probehalber in der Registrierung vornehmen.
' Hier werden z.B. Platzierungen für eine Userform in der Registry hinterlegt

SaveSetting appname:="TestAnw", section:="Startup", key:="Top", setting:=75
'Ohne detaillierte Anweisung
SaveSetting "TestAnw", "Startup", "Left", 50
SaveSetting "TestAnw", "Startup", "Right", 100
' Einstellungen abrufen.
Einstellungen = GetAllSettings(appname:="TestAnw", section:="Startup")
    'Anzahl der Einträge bestimmen
    For intsettings = LBound(Einstellungen, 1) To UBound(Einstellungen, 1)
        'Im Debugfenster ausdrucken
        Debug.Print Einstellungen(intsettings, 0), Einstellungen(intsettings, 1)
    Next intsettings
'Alles auf einmal im Debug.Fenster ausdrucken
Debug.Print intsettings
End Sub


Sub Reg_Key_Einzwlwert_auslesen()
Dim x As Variant
x = GetSetting(appname:="TestAnw", section:="Startup", key:="Top")
End Sub


Sub Reg_Key_löschen()
'Hauptschlüssel löschen
DeleteSetting "TestAnw" ', "Startup"
'Unterschlüssel löschen
'DeleteSetting "TestAnw", "Startup"
End Sub 

So,... ich hoffe Ihnen damit ein klein wenig Informationen gegeben zu haben um Ihre Daten ( z.B. Registrierungsnummern für ein Programm ) Benutzer bezogen zu speichern


Gesamte Registry bearbeiten

Hier wird der Einsatz des WSH erklärt. Diese Art des Zugriffs ist dem VBA sehr ähnlich und kommt ohne API Funktionen aus.
Der WSH ist normalerweise ab Windows > W2000 automatisch installiert

ACHTUNG:

Mit diesen Code-Beispielen haben Sie das Grundgerüst um die gesamte Registry zu bearbeiten, d.h. Schlüssel anlegen, ändern und löschen

Jeglicher Einsatz dieser Code-Beispiel geschieht auf eigene Gefahr. Der Autor übernimmt keinerlei Verantwortung !!!

Sub Create_Specific_RegKey()
'(C) by Ramses
Dim myWSH As Object, myNewRegKey As String
Dim myRegResKey As String, myRegToWriteKey As String
Set myWSH = CreateObject("WScript.Shell")
'Es wird ein spezifischer Schlüssel in DEM Registryzweig angelegt,
'der normalerweise auch von EXCEL aus mit Get- und SaveSetting erreicht werden kann
'Mit WSH kann jedoch die gesamte Registry beschrieben,
'verändert und gelesen werden
'Hier wird zu Beispielzwecken NUR ein Unterschlüssel DemoWSH Script mit Unterschlüssel Setting
'und dem Wert "Wert1" erstellt
myNewRegKey = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DemoWSH Script\Setting\Wert1"
'Dem zu erstellen Schlüssel wird der Wert 100 zugewiesen
myWSH.regWrite myNewRegKey, "100"
End Sub


Sub Read_Specific_RegKey()
'(C) by Ramses
Dim myWSH As Object, myReadRegKey As String
Dim myRegResKey As String
'WSH Object erstellen
Set myWSH = CreateObject("WScript.Shell")
'Es muss auch der Unter-Eintrag im Key angegeben werden
'hier der Wert "Wert1"
myReadRegKey = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DemoWSH Script\Setting\Wert1"
myRegResKey = myWSH.regread(myReadRegKey)
MsgBox "Aktueller Wert:" & myRegResKey
End Sub


Sub Change_Specific_RegKey()
'(C) by Ramses
Dim myWSH As Object, myReadRegKey As String
Dim myRegResKey As String, myRegToWriteKey As String
Set myWSH = CreateObject("WScript.Shell")
'Es muss auch der Unter-Eintrag im Key angegeben werden
'hier "Wert1"
myReadRegKey = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DemoWSH Script\Setting\Wert1"
myRegResKey = myWSH.regread(myReadRegKey)
MsgBox "Aktueller Wert:" & myRegResKey
myRegToWriteKey = InputBox("Neuen Wert bitte eintragen:", "Registry Wert ändern", myRegResKey + 10)
If Not IsNumeric(CDbl(myRegToWriteKey)) Then
    MsgBox "Der Wert muss eine Zahl sein"
    Exit Sub
End If
'Hier wird der Schlüssel auf den neuen Wert geändert
myWSH.regWrite myReadRegKey, myRegToWriteKey
End Sub

 

Und hier zur Demonstration über die Mächtigkeit dieses Tools, das aus Ihrem Rechner die Dateien ausliest, welche als ausführbar gelten

Sub Read_Executable_Programs()
'(C) by Ramses
Dim myWSH As Object, myReadRegKey As String
Dim myRegResKey As String
'WSH Object erstellen
Set myWSH = CreateObject("WScript.Shell")
myReadRegKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Programs"
myRegResKey = myWSH.regread(myReadRegKey)
MsgBox "Auf Ihrem Rechner werden: """ & myRegResKey & """ als ausführbare Dateien erkannt!"
End Sub

Zurück