環境変数を取得するには
環境変数は一般的にはコントロールパネル→システム→詳細設定→環境変数、の環境変数ダイアログから設定します。
ただ、環境変数ダイアログは画面サイズが固定のため編集がしにくく、見づらい欠点があります。
そこで、手軽に環境変数を確認するにはコマンドプロンプトでsetと入力してEnterキーを押すことが出来ます。
> set > C:\aaa\a.txt
このように入力すればa.txtに環境変数の一覧が出力され、テキストエディタで確認しやすくなります。
VBAでも同じように環境変数の一覧の取得が可能です。
WshEnvironmentオブジェクト
VBAで環境変数の一覧を取得するにはWshEnvironmentオブジェクトを利用します。
WshEnvironmentオブジェクトはWshShellオブジェクトのEnvironmentプロパティから取得できます。
参照設定
WshShellはCreateObject関数を利用してこのような書き方を紹介されることが多いと思います。
1 2 |
Dim obj Set obj = CreateObject("WScript.Shell") |
しかしこの書き方では利用できるプロパティやメソッドを候補表示できません。しかし参照設定を行えばプロパティやメソッドを表示することが可能です。
WshShellの参照設定は、VBA画面→ツールメニュー→参照設定で「Windows Script Host Object Model」を選択します。これでWshShellクラスとWshEnvironmentクラスを利用できるようになります。
以下はWshShellクラスのインスタンス変数の作成サンプルです。書き方は2通りあります。どちらでもいいです。
1つ目のように1行で書いてもいいですし、2つ目のように変数定義とSetを別に書いてもいいです。
「VBAでクラス変数の宣言とNewを1行で書いてよいか」にも書いていますが、作法としては2行目が推奨されていますが、私は1行で書くことが多いです。
1 |
Dim obj As New IWshRuntimeLibrary.WshShell |
1 2 |
Dim obj As IWshRuntimeLibrary.WshShell Set obj = New IWshRuntimeLibrary.WshShell |
以降のサンプルコードは参照設定を行った場合の書き方になります。
WshShellとWshEnvironmentを使った環境変数一覧の取得
2つ関数がありますが、1つ目が環境変数の一覧を取得して引数の配列に格納する関数で、2つ目がその呼び出し用関数です。
環境変数はWshShellオブジェクトのEnvironmentプロパティで取得したWshEnvironmentオブジェクトの格納します。
WshEnvironmentオブジェクトには全ての環境変数が格納されているため、その数を配列の要素数に設定し、全ての環境変数をループして1つずつ配列に格納します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
'// 環境変数一覧取得処理 Sub GetEnvironmentList(ar()) Dim wsh As New IWshRuntimeLibrary.WshShell '// WshShell Dim env As IWshRuntimeLibrary.WshEnvironment '// WshEnvironment Dim s '// 環境変数文字列 Dim i '// ループカウンタ '// 環境変数を取得 Set env = wsh.Environment '// 引数配列のサイズを設定 ReDim ar(env.Count - 1) '// 配列に環境変数を格納 i = 0 For Each s In env ar(i) = s i = i + 1 Next Set env = Nothing Set wsh = Nothing End Sub '// 環境変数取得関数呼び出し Sub GetEnvironmentListTest() Dim ar() Dim s ReDim ar(0) Call GetEnvironmentList(ar) For Each s In ar Debug.Print s Next End Sub |
実行結果
GetEnvironmentListTest関数を実行するとイミディエイトウィンドウに環境変数が出力されます。
1 2 3 |
NUMBER_OF_PROCESSORS=4 OS=Windows_NT Path=C:\Program Files\Common Files\・・・ |