Anzeige
Archiv - Navigation
1952to1956
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

Wert aus der Registry mit VBA auslesen

Wert aus der Registry mit VBA auslesen
28.11.2023 10:58:59
yogi
Hallo allerseits

Aus Excel werden E-Mails mit Thunderbird verschickt. Dies erfolgt mit folgender Routine



Public Function CreateThunderbirdEmailObject(Optional ProgrammPfad As String = _
"C:\Program Files (x86)\Mozilla Thunderbird\Thunderbird.exe")
'
Dim strMailAufbau As String
Dim varAttachments As Variant
Dim lngAttachCount As Long
'
Call set_trace("4, CreateThunderbirdEmailObject - start")
With NeueThunderbirdEMail
'
' Anzuhängende Dateien auflisten
varAttachments = Split(.Anhang, ";")
'
' Email aufbauen
strMailAufbau = ProgrammPfad & " -compose format=" & .EmailFormat & ",preselectid=id" & .SendenVonKonto & _
",to='" & .Empfaenger & "',subject='" & .Betreff & "',body='" & .EMailText
'
' Prüfen auf "Kopie senden an"
If .KopieAn > "" Then
strMailAufbau = strMailAufbau & "',cc='" & .KopieAn
End If ' .KopieAn > ""
'
' Prüfen auf "Blindkopie an"
If .BlindKopieAn > "" Then
strMailAufbau = strMailAufbau & "',bcc='" & .BlindKopieAn
End If ' .BlindKopieAn >
'
' Prüfen auf "Anhang setzen"
If UBound(varAttachments) >= 0 Then
strMailAufbau = strMailAufbau & "',attachment='file:///" & .OptionalDateiPfad & varAttachments(0)
For lngAttachCount = 1 To UBound(varAttachments)
strMailAufbau = strMailAufbau & "," & .OptionalDateiPfad & varAttachments(lngAttachCount)
Next lngAttachCount ' lngAttachCount =
End If ' UBound(varAttachm
strMailAufbau = strMailAufbau & "'"
'
' Email erstellen
Shell strMailAufbau, vbMaximizedFocus
'
End With ' NeueThunderbirdEM

'
End Function


Funktioniert bestens. Das Problem, nicht auf jedem Rechner ist Thunderbird.exe im Ordner "C:\Program Files (x86)\Mozilla Thunderbird\Thunderbird.exe" abgelegt. Und bei diesen Rechnern funktioniert es natürlich nicht. Nun gibt es zwei Möglichkeiten, durch sämtliche Ordner auf allen Disks zu sausen und nach der Datei suchen oder den Pfad aus der Registry auslesen. Die zweite Variante ist da wesentlich effizienter und die möchte ich auch nutzen. Nun habe ich folgende Routine gefunden, die das machen sollte



Sub Read_Specific_RegKey()

Dim myWSH As Object
Dim myReadRegKey As String
Dim myResRegKey As Variant

Set myWSH = CreateObject("WScript.Shell")
myReadRegKey = "HKEY_CLASSES_ROOT\Applications\thunderbird.exe\shell\open\command"
myResRegKey = myWSH.RegRead(myReadRegKey)
MsgBox myResRegKey

End Sub


Leider bringt sie folgende Meldung:

Laufzeitfehler '-2147024894 (80070002)'

Registrierungsschlüssel
"HKEY_CLASSES_ROOT\Applications\thunderbird.exe\shell\open\command" wurde nicht zum Lesen geöffnet.


Was mus ich da machen?

Gruss
yogi

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert aus der Registry mit VBA auslesen
28.11.2023 14:56:52
JoWE
Hallo yogi,

teste mal dies [ habe ich iwann mal von einem User namens Anton gefunden; wann und wo weiß ich leider nicht mehr; sorry Anton :-) ]:
Sub checkRegistryEintrag_Thunderbird()

Dim HKEY_CURRENT_USER As Long, oReg As Object, arrApps
Dim strKeyPath, strWert, strApp, sProg As String
sProg = "Thunderbird.exe" 'anpassen
HKEY_CURRENT_USER = &H80000001
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
strKeyPath = "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache"
oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrApps
If Not IsArray(arrApps) Then Exit Sub
For Each strApp In arrApps
If InStr(1, LCase(strApp), LCase(sProg & ".FriendlyAppName")) > 0 Then
oReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, strApp, strWert
MsgBox "der Eintrag " & vbCrLf & sProg & vbCrLf & " ist in der Registry vorhanden."
Exit Sub
End If
Next
MsgBox "der Eintrag " & sProg & vbCrLf & "ist in der Registry" & vbCrLf & "NICHT vorhanden."
Set oReg = Nothing
End Sub

Gruß
Jochen
Anzeige
AW: Wert aus der Registry mit VBA auslesen
28.11.2023 18:24:24
Ulf
Hi versuch mal:


Option Explicit

'Verweis auf 'Windows Script Host Object Model'
Dim objWSH As New WshShell

Public Function readKey()
On Local Error GoTo readKeyERR
Dim strKey As String, strApp As String, strReturn As String
strApp = "thunderbird.exe"
strKey = "HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\" & strApp & "\shell\open\command\"
With objWSH
strReturn = .RegRead(strKey)
End With
readKeyOUT:
readKey = strReturn
Exit Function
readKeyERR:
strReturn = ""
Resume readKeyOUT
End Function

hth
Ulf
Anzeige
Wert aus der Registry mit VBA auslesen
28.11.2023 19:24:02
yogi
Super!!!!

Danke
yogi
Wert aus der Registry mit VBA auslesen
28.11.2023 16:50:21
yogi
Tag Jochen

Das Makro stellt fest, dass Thunderbird installiert ist. Ich sollte aber den Wert in
HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\thunderbird.exe\shell\open\command
auslesen können. Der enthält den Speicherordner von Thunderbird.exe "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" "%1"

Wie muss das Makto erweitert werden?

Gruss
yogi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige