• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAでbatファイルを実行)

Excel VBAでbatファイルを実行し、環境変数を取得する方法はあるか?

このQ&Aのポイント
  • ExcelのVBAでbatファイルを実行し、環境変数を取得する方法について教えてください。
  • batファイル内でセットした環境変数の値をVBA側で取得することは可能でしょうか?
  • VBAでbatファイルを実行し、batファイルで設定した環境変数の値を取得する方法について知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Batファイル(仮に、e:\asd.bat)の中身を @echo off set aaa=fff echo %aaa% としておいて たとえば標準モジュールの場合ですが Sub CMDget() Dim wSh As Object, wExec As Object, Cmd As String, Result As String Set wSh = CreateObject("Wscript.Shell") Cmd = "e:\asd.bat" Set wExec = wSh.exec("%ComSpec% /c " & Cmd) Do While wExec.Status = 0 DoEvents Loop Result = wExec.StdOut.readall MsgBox Result Set wExec = Nothing Set wSh = Nothing End Sub とすればメッセージボックスに、fff と表示されます。 が、先の回答のように、Batファイルが終了した時点で、 SET した 環境変数は消えてなくなるので 使い道が無さそうに思えますけど? おしまい。

yossy3
質問者

お礼

ありがとうございます。 環境変数にSETしているbatファイルは他のbatファイルから呼び出されているので、下手に触れないのですが、もう1個batファイルを作って、環境変数にSETしているbatファイルをCALLしたあとで、必要な環境変数の値をECHOして標準出力に出力するか、リダイレクトしてテキストファイルに出力すれば、Excel側で拾えそうですね。 (a.bat) @echo off set aaa=fff set bbb=ggg (b.bat) @echo off call "~\a.bat" rem echoしたものをStdOutプロパティから拾う or リダイレクトしてテキストファイルから拾う echo %1 rem echo %1 > "~\hoge.txt" (VBA) ~(省略)~ Cmd="~\b.bat 環境変数名" Set wExec = wSh.exec("%ComSpec% /c " & Cmd) ~(省略)~

その他の回答 (1)

回答No.1

SET コマンドで作成した環境変数は、そのコマンドプロンプト上(メモリ)だけで 有効になっているようです。 一個目のコマンドプロンプトで、set zzz=fff とし set で zzz=fff が 返って来るのを確認。 もう一個コマンドプロンプトを立ち上げて SET としても先ほどの zzz=fff は返ってきません。 最初のコマンドプロンプトで再度試すと、しっかり有ります。 なのでEnviron関数でも、Wscript でも取得できないようです。 Batファイルを実行後にコマンドプロンプトを立ち上げて確認してもありませんでしたし。 調べたら SETX なるものがレジストリに登録できるようですけど未検証です。 私はこの辺で退却します。

yossy3
質問者

お礼

ありがとうございます。 Excelでコマンドプロンプトを起動して、 その中の環境変数が覗ければいいんですけど、 覗けないんですかね……