Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1888to1892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Regestry-Eintrag mit Excel

Regestry-Eintrag mit Excel
14.07.2022 15:10:42
Micha
Hallo zusammen,
ich bin weiter am VBA-Lernen und bin nun bei einer weiteren Sachen angekommen, die ich (noch) nicht gelöst bekomme. Das Schreiben etc. in die Registry funktioniert soweit eigentlich. Nur bekomme ich eine Nuss noch nicht geknackt:

Sub RegWrite_Comp()
Set wsh = CreateObject("WScript.Shell")
strKeyPath = "HKCU\SOFTWARE\Adobe\Acrobat Distiller\PrinterJobControl\"
strKeyString = "C:\windows\SPLWOW64.exe"
Dim i_Type As String
i_Type = "REG_EXPAND_SZ"        '"REG_SZ"
With wsh
.RegWrite strKeyPath & strKeyString, "test", i_Type
End With
Set wsh = Nothing
End Sub
Wenn ich wie bei strKeyString angegeben einen Pfadangabe in die Bezeichnung schreiben möchte, wird durch das obige Makro ein bzw. mehrere neue Schlüssel, jedoch nicht nur eine Zeichenfolge angelegt.
Das gewünschte Ergebnis soll sein:
- im Schlüssel/Pfad: "HKCU\SOFTWARE\Adobe\Acrobat Distiller\PrinterJobControl\"
- soll die Zeichenfolge mit Namen "C:\windows\SPLWOW64.exe" angelegt werden
- die Zeichenfolge soll den Wert "test" haben
Das nicht gewünschte Ergebnis ist jetzt/bisher bei mir:
- im Schlüssel/Pfad: "HKCU\SOFTWARE\Adobe\Acrobat Distiller\PrinterJobControl\"
- wird eine neue Schlüsselfolge "C:\windows\" angelegt, so dass der Pfad "HKEY_CURRENT_USER\SOFTWARE\Adobe\Acrobat Distiller\PrinterJobControl\C:\windows" lautet
- darin die Zeichenfolge mit Namen "SPLWOW64.exe" angelegt werden, die den Wert "test" erhält
Daher nun meine Frage: Wie schaffe ich es, dass die Zeichenfolge tatsächlich den Namen "C:\windows\SPLWOW64.exe" erhält?
Vielen Dank bereits vorab für Eure Hilfe und Hinweise!!

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
OT - und hier?
14.07.2022 15:45:32
Oberschlumpf
Hi Micha,
hier...
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1890273#1890783
....hattest du extra noch mal um Hilfe gebeten
Ich hatte dir geantwortet - mit einer funktionierenden Lösung!
Wo ist denn deine Antwort?
Da du in dem "alten" Beitrag nicht mehr antworten kannst, würd ich mich hier über dein Feedback freuen.
Ciao
Thorsten
AW: OT - und hier?
14.07.2022 16:41:31
Micha
Moin Thorsten,
ich denke, dass hier eine Verwechslung vorliegt durch die Namensgleichheit. Der von Dir genannte Threat ist nicht von mir.
Unabhängig davon denke ich, dass die von Dir dort aufgezeigte Lösung ein praktikabler Weg ist. Durch SaveCopyAs werden (zumindest wenn nichts schief läuft, weil systemspezifisch iregendetwas "reingrätscht", weil System von Admin z.B. beschränkt, Virenscanner, Gruppenrichtlinie etc.) auch die aktuellen Änderungen in der neuen Datei enthalten sein. Durch die Festlegung des Pfads ist es schließend sehr unaufwändig möglich, den Anhang anzufügen. Abgesehen davon - finde ich - hast Du top erklärt, was wo passiert, so dass auch weniger bewanderte Personen das Vorgehen und die "Geschehnisse" im Code leicht nachvollziehen können.
Aber wie bereits eingangs geschrieben, scheint hierbei eine Verwechslung vorzuliegen.
Viele Grüße
Micha
Anzeige
AW: Regestry-Eintrag mit Excel
14.07.2022 21:27:44
Yal
Hallo Micha,
es liegt wahrscheinlich an dem von dir gegebenen Typ "REG_EXPAND_SZ"
Siehe https://docs.microsoft.com/de-de/windows/win32/sysinfo/registry-value-types
aber auch https://groups.google.com/g/microsoft.public.de.german.win2000.registry/c/g84q-ANzLKM?pli=1
Als VBA-Anfänger würde ich nicht unbedingt mit Registry-Bastelei anfangen, aber gut, VBA-Anfänger bedeutet eben nicht Operating System Anfänger.
Nebenbei ein Paar Tipps um die Lernerei erfolgreicher zu machen:
_ mache die Variabledeklaration erforderlich: Extras, Optionen, Haken bei "Variabledeklarartion erforderlich"
_ Variablen immer gesammelt an erste Stelle in dem Sub. Implementiert werden die Variable erst, wenn sie verwendet werden. Diese im Coding zu verteilen bringt nur Unübersichtlichkeit.
_ Variable, die sich nicht ändern lassen, sind Konstanten: Deklaration und Initialisierung in einem Guss.
_ With ist nur sinnvoll, wenn mehr als einen Eintrag mit "." vorhanden ist
_ Set wsh = Nothing ist in dem Fall nicht notwendig, weil wsh eine lokale Variable ist, die immer wieder mit einem neuen Object initialisiert wird.
_ achte auf einem sauberen Einrücken
Dementsprechend:

Sub RegWrite_Comp()
Dim wsh As Object
Const strKeyPath = "HKCU\SOFTWARE\Adobe\Acrobat Distiller\PrinterJobControl\"
Const strKeyString = "C:\windows\SPLWOW64.exe"
Const i_Type = "REG_EXPAND_SZ" '"REG_SZ"
Set wsh = CreateObject("WScript.Shell")
wsh.RegWrite strKeyPath & strKeyString, "test", i_Type
End Sub

Anzeige
AW: Regestry-Eintrag mit Excel
14.07.2022 22:39:37
snb

Sub M_snb()
CreateObject("WScript.Shell").RegWrite "HKCU\SOFTWARE\Adobe\Acrobat Distiller\PrinterJobControl\test", "C:\windows\SPLWOW64.exe", "REG_SZ"
End Sub
Vermeide überflüssige Variablen.
Registry-Eintrag mit Excel
15.07.2022 10:40:35
Anton
Hallo Micha,
probier es hiermit:

Option Explicit
Sub b()
Dim objReg As Object, ret
Dim strKeyPath As String, sSchluessel As String, sWert As String
Const HKCU = &H80000001
strKeyPath = "SOFTWARE\Adobe\Acrobat Distiller\PrinterJobControl"
sSchluessel = "C:\windows\SPLWOW64.exe"
sWert = "test"
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
ret = objReg.SetExpandedStringValue(HKCU, strKeyPath, sSchluessel, sWert)
If (ret = 0) And (Err.Number = 0) Then
MsgBox "Neue Schlüsselfolge " & sSchluessel & " erfolgreich angelegt"
Else
MsgBox "Fehler beim anlegen der neuen Schlüsselfolge"
End If
End Sub
Mehr Infos auf dieser Seite von MS.
mfg Anton
Anzeige
AW: Registry-Eintrag mit Excel
15.07.2022 13:50:59
Micha
Hallo zusammen,
Zuerst ganz herzlichen Dank an euch alle für eure Rückmeldungen und Antworten und Hinweise!!
Auch wenn ich bereits einiges über die Programmierung gelernt habe, bin ich noch meilenweit von eurem Wissen entfernt. Daher finde ich es wirklich richtig klasse, wie ihr„Neulinge“ wie mich hier unterstützt und mit Rat und Tat zu Seite steht! Das gibt es wirklich nicht in allen Foren so! Und ich muss auch zugeben, dass die fehleden Deklarationen und Einrückungen nicht meiner Unwissenheit geschuldet waren ... :-/

Eine ähnliche Lösung, wie von dir Anton, habe ich zwischenzeitlich auch für mich gefunden.
Einen Unterschied habe ich eigentlich nur bei GetObject, das sich bei mir wie folgt gestaltet:
GetObject("winmgmts:root\default:StdRegProv")
und nicht:
GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Kannst du mir vielleicht noch einen Hinweis geben, worin der Unterschied besteht bei den beiden Wegen bzw. was der Zusatz in Deinem Code "bewirkt"?
Vielen Dank schon vorher und auch schon mal ein schönes - und hoffentlich allseits sommerliches - Wochenende!
Anzeige
AW: Registry-Eintrag mit Excel
15.07.2022 15:03:58
Micha
Vielen Dank dafür!!
AW: Registry-Eintrag mit Excel
15.07.2022 15:11:46
Micha
Nachdem das ganze bei mir zuerst zu meiner großen Freude lief, habe ich mich daran gemacht und ordnungsgemäß die Deklaration der Variablen vorgenommen. Anschließend hatte ich dann die folgende Situation:
Wenn ich "Dim objReg as Object" aufgenommen habe, kam beim Ausführen eine Fehlermeldung, dass Microsoft Office ein potentielles Sicherheitsrisiko und ein verdächtiges Makro erkannt hat, der Virenscanner das als verdächtig identifiziert und die VBA-Laufzeit jetzt unterbrochen wird. Wenn ich "Dim objReg As Object" auskommentiere bzw. gar nicht aufführe, läuft das Makro so wie es gewünscht ist, einfach durch... Ich muss gestehen, dass ich das jetzt nicht wirklich verstehe ...
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige