本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

設定されている環境変数を取得する方法

文書番号: 402154

最終更新日: 1997/10/21


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP402154

概要

本文書では、Microsoft(R) Visual Basic(R) Programming System Applications
Edition (以下 VBA) を使って現在設定されている環境変数を取得する方法をサン
プル モジュールと共に解説しています。

詳細

VBA では設定されている環境変数を取得する機能が用意されていませんので、Windows が標準で提供している API (Application Programming Interface) の関数 GetDos
Environment と lstrcpy、lstrlen 関数を組み合わせて使用します。
なお、Windows API についての詳細は Windows API のヘルプ (Microsoft(R) Windows (TM) Software Development Kit、Microsoft(R) Visual C++(TM) for Windows(TM)
などに添付) を参照してください。

サンプル 1

次のサンプル モジュールで GetDOSEnv 関数は、引数で指定した環境変数名に対応した 環境変数を返します。また GetDOSEnvArray 関数は、現在設定されているすべての
環境変数を環境変数名まで含めた配列で返します。
  Declare Function lstrlen Lib "KERNEL" (ByVal lpStr As Any) As Integer
  Declare Function GetDOSEnvironment Lib "KERNEL" () As Long
  Declare Function lstrcpy Lib "KERNEL" (ByVal lpStr1 As Any, _
      ByVal lpStr2 As Any) As Long
  Function GetDOSEnv(strEnv As String) As String
      Dim lpDOSEnv As Long, lpDummy As Long
      Dim strDOSEnv As String
      Dim intDOSEnvLen As Integer
      Dim lngPtrLowPart As Long, lngPtrHighPart As Long
      Dim intInx As Integer
      ' 引数 strEnv に与えられた文字列が存在しなければ "" を返します
      GetDOSEnv = ""
      ' 現在のタスクの環境変数へのポインタを取得します
      lpDOSEnv = GetDOSEnvironment()
      Do
          ' 環境変数の長さを取得します
          intDOSEnvLen = lstrlen(lpDOSEnv)
          ' 長さが 0 バイトであればループを終了します
          If intDOSEnvLen = 0 Then Exit Do
          ' VBA で取り扱える文字列 strDOSEnv に代入します
          strDOSEnv = String$(intDOSEnvLen, 0)
          lpDummy = lstrcpy(strDOSEnv, lpDOSEnv)
          ' 文字列中に「= 」があれば、右辺を引き数と比較し、それに合致
          ' したときに左辺を取り出します
          intInx = InStr(strDOSEnv, "=")
          If intInx <> 0 Then
             If strEnv = Left$(strDOSEnv, intInx - 1) Then
                GetDOSEnv = Right$(strDOSEnv, intDOSEnvLen - intInx)
                Exit Do
              End If
          End If
  ' ポインタを次の環境変数の先頭まで進めます
          lpDOSEnv = lpDOSEnv + intDOSEnvLen + 1
      Loop While True
  End Function
  Function GetDOSEnvArray() As Variant
      Dim lpDOSEnv As Long, lpDummy As Long
      Dim strDOSEnv As String
      Dim intDOSEnvLen As Integer
      Dim lngPtrLowPart As Long, lngPtrHighPart As Long
      Dim intInx As Integer
      Dim ReturnArray() As String
      Dim arraycount As Integer
      ' 現在のタスクの環境変数へのポインタを取得します
      lpDOSEnv = GetDOSEnvironment()
      arraycount = 0
      Do
          ' 環境変数の長さを取得します
           intDOSEnvLen = lstrlen(lpDOSEnv)
          ' 長さが 0 バイトであればループを終了します
          If intDOSEnvLen = 0 Then Exit Do
          ' VBA で取り扱える文字列 strDOSEnv に代入します
          strDOSEnv = String(intDOSEnvLen, 0)
          lpDummy = lstrcpy(strDOSEnv, lpDOSEnv)
          ' StrDOSEnv に受け取った文字列を配列に代入します
          arraycount = arraycount + 1
          ReDim Preserve ReturnArray(arraycount)
          ReturnArray(arraycount) = strDOSEnv
          lpDOSEnv = lpDOSEnv + intDOSEnvLen + 1
      Loop While True
      GetDOSEnvArray = ReturnArray
  End Function

サンプル 2

次のサンプル モジュールでは、GetDOSEnv 関数を呼び出し、環境変数名 "PATH" に対応する環境変数を取得後 MsgBox 関数を使って表示しています。
  Sub DisplayPATH()
      MsgBox GetDOSEnv("PATH")
  End Sub

サンプル 3

次のサンプル モジュールでは、GetDOSEnvArray 関数を呼び出し、現在設定されてい る環境変数のすべてを配列形式で受け取り、MsgBox 関数を使って表示しています。
  Sub DisplayEnvironments()
      Dim ret As Variant
      Dim i As Integer
      ret = GetDOSEnvArray()
      For i = 1 To UBound(ret)
          MsgBox ret(i)
      Next i
  End Sub

Keywords: KBHOWTO KB402154
Technology: kbExcel500 kbExcelSearch kbExcelWinSearch

inserted by FC2 system