Microsoft Excel

Excel und VBA: Formeln, Programmierung, Lösungen

Die Excel/VBA-Beispiele

Thema

Umgebungsvariable aus der autoexec.bat auslesen

Gruppe

System

Problem

Wie kann ich aus der Autoxec.bat eine Umgebungsvariable auslesen?

Lösung
Geben Sie den nachfolgenden Code in ein Standardmodul ein und weisen Sie ihn einer Schaltfläche zu.

StandardModule: basMain

Declare Function GetEnvironmentVariableA Lib "Kernel32" _
    (ByVal lpName As String, ByVal lpBuffer As String, _
    ByVal nsize As Long) As Long
Declare Function GetDOSEnvironment Lib "Kernel" () As Long
Declare Function lstrcpy Lib "Kernel" Alias "lStrCpy" _
    (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long

Sub Test()
    MsgBox GetDOSEnvironmentVariable("temp")
End Sub

Function GetDOSEnvironmentVariable(sEnvVar As String) As String

    Dim lpszOrigEnv As Long
    Dim lpszEnv As Long
    Dim szDOSEnv As String

    If b32Bit() Then
    szDOSEnv = Space(4096)
        lpszEnv = GetEnvironmentVariableA(sEnvVar, szDOSEnv, 4096)

        GetDOSEnvironmentVariable = Left(szDOSEnv, lpszEnv)
        Else
        lpszOrigEnv = GetDOSEnvironment()
        szDOSEnv = Space$(4096)
        lpszEnv = lstrcpy(szDOSEnv, lpszOrigEnv)
        szDOSEnv = Trim(szDOSEnv)
        szDOSEnv = Left(szDOSEnv, Len(szDOSEnv) - 1)

        Do While szDOSEnv <> ""
            If Left(szDOSEnv, Len(sEnvVar)) = sEnvVar Then
                GetDOSEnvironmentVariable = Mid(szDOSEnv, _
                    Len(sEnvVar) + 2, Len(szDOSEnv))
                Exit Function
            End If

            lpszOrigEnv = lpszOrigEnv + Len(szDOSEnv) + 1
            szDOSEnv = Space$(4096)
            lpszEnv = lstrcpy(szDOSEnv, lpszOrigEnv)
            szDOSEnv = Trim(szDOSEnv)
            szDOSEnv = Left(szDOSEnv, Len(szDOSEnv) - 1)
        Loop
    End If
End Function

Function b32Bit() As Boolean
    Select Case Left(Application.Version, 1)
        Case 5
            b32Bit = False
        Case 7, 8, 9
            b32Bit = True
    End Select
End Function