環境変数を取得するには

環境変数は一般的にはコントロールパネル→システム→詳細設定→環境変数、の環境変数ダイアログから設定します。

ただ、環境変数ダイアログは画面サイズが固定のため編集がしにくく、見づらい欠点があります。

そこで、手軽に環境変数を確認するにはコマンドプロンプトでsetと入力してEnterキーを押すことが出来ます。

> set > C:\aaa\a.txt

このように入力すればa.txtに環境変数の一覧が出力され、テキストエディタで確認しやすくなります。

VBAでも同じように環境変数の一覧の取得が可能です。


WshEnvironmentオブジェクト

VBAで環境変数の一覧を取得するにはWshEnvironmentオブジェクトを利用します。

WshEnvironmentオブジェクトはWshShellオブジェクトのEnvironmentプロパティから取得できます。


参照設定

WshShellはCreateObject関数を利用してこのような書き方を紹介されることが多いと思います。

しかしこの書き方では利用できるプロパティやメソッドを候補表示できません。しかし参照設定を行えばプロパティやメソッドを表示することが可能です。

WshShellの参照設定は、VBA画面→ツールメニュー→参照設定で「Windows Script Host Object Model」を選択します。これでWshShellクラスとWshEnvironmentクラスを利用できるようになります。

以下はWshShellクラスのインスタンス変数の作成サンプルです。書き方は2通りあります。どちらでもいいです。

1つ目のように1行で書いてもいいですし、2つ目のように変数定義とSetを別に書いてもいいです。

VBAでクラス変数の宣言とNewを1行で書いてよいか」にも書いていますが、作法としては2行目が推奨されていますが、私は1行で書くことが多いです。

以降のサンプルコードは参照設定を行った場合の書き方になります。


WshShellとWshEnvironmentを使った環境変数一覧の取得

2つ関数がありますが、1つ目が環境変数の一覧を取得して引数の配列に格納する関数で、2つ目がその呼び出し用関数です。

環境変数はWshShellオブジェクトのEnvironmentプロパティで取得したWshEnvironmentオブジェクトの格納します。

WshEnvironmentオブジェクトには全ての環境変数が格納されているため、その数を配列の要素数に設定し、全ての環境変数をループして1つずつ配列に格納します。



実行結果

GetEnvironmentListTest関数を実行するとイミディエイトウィンドウに環境変数が出力されます。