Hallo Wissende,
mit folgendem Code möchte ich eine UmgebungsVariable „MeineBilder“ mit dem Wert „F:“ setzen, was dem alten DOS-Befehl „Set MeineBilder=F:“ entspräche.
Leider wird sie nicht gesetzt, zumindest nicht für mich wiederfindbar.
Wie setzte ich also eine Umgebungsvariable mittels VbA?
Option Explicit
Declare Function SetEnvironmentVariable& Lib "kernel32" Alias \_
"SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String)
'
Sub test()
Dim SE, N
' Umgebngsvariable wird nicht gesetzt ?
SE = SetEnvironmentVariable("MeineBilder", "F:\")
MsgBox SE ' 1 wird angezeigt, also erfolgreich laut API-Guide
For N = 1 To 100
If Environ(N) "" Then MsgBox Environ(N) 'Nix zu sehen von "MeineBilder"
Next N
End Sub
Gruß
Reinhard
Hallo,
getestet WinXP Prof, Excel 2002:
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:"
Debug.Print "MeinPfad = " & GetEnvironmentVar("MeinPfad")
Debug.Print Shell("CMD /K SET MeinPfad", 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
Das funktioniert.
Gruß, Bernd
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
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