Hallo Bernd,
ich habe es ausprobiert. Scheinbar benutzen Environ (Excel-Vba) und Set (Dos,Cmd) eine andere Umgebung für die Variablen als GetEnvironmentVariable/SetEnvironmentVariable (API).
Denn mit SetEnvironmentVariable gestzte Variablen sind nur mit GetEnvironmentVariable auszulesen, nicht mit Set, Environ.
Nachstehend das Testmakro „SetzeMeinPfad()“.
Danke ^Gruß
Reinhard
Option Explicit
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias \_
"GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String, \_
ByVal nSize As Long) As Long
Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias \_
"SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) \_
As Long
'
Sub SetzeMeinPfad()
SetEnvironmentVariable "MeinPfad", "Y:"
MsgBox "MeinPfad = " & GetEnvironmentVar("MeinPfad")
MsgBox Shell("CMD /c SET MeinPfad", vbNormalFocus)
MsgBox Shell("CMD /c SET \> f:\t.txt", vbNormalFocus)
MsgBox Environ("MeinPfad") 'wird nicht gefunden
MsgBox Shell("CMD /c SET MeinPfad=""123""", vbNormalFocus) 'bringt nix
MsgBox "MeinPfad = " & GetEnvironmentVar("MeinPfad") ' immer noch "Y:"
End Sub
'
Sub Nachpruefen()
MsgBox Shell("CMD /c SET \> f:\t.txt", vbNormalFocus)
End Sub
'
Function GetEnvironmentVar(Name As String) As String
GetEnvironmentVar = String(255, 0)
GetEnvironmentVariable Name, GetEnvironmentVar, Len(GetEnvironmentVar)
GetEnvironmentVar = TrimNull(GetEnvironmentVar)
End Function
'
Private Function TrimNull(item As String)
'Rekursiv das Nul aus dem String entfernen
item = item & vbNullChar 'wir wollen mindestens ein NULL haben
Dim iPos As Long
iPos = InStr(item, vbNullChar)
TrimNull = IIf(iPos \> 0, Left$(item, iPos - 1), item)
End Function