更新日:、 作成日:
VBA Shell 関数:exe を実行する
はじめに
Excel VBA マクロの Shell 関数から exe を実行する方法を紹介します。
Shell 関数は、.exe ファイルを実行します。
ファイルを開くには、それを実行する .exe にファイルのパスを引数で渡します。
Shell("C:\Windows\System32\notepad.exe D:\tips.txt") なら、メモ帳で D ドライブの tips.txt ファイルを開きます。
フォルダを開くには、エクスプローラーの .exe にフォルダのパスを引数で渡します。
Shell("C:\Windows\explorer.exe D:\tips") なら、エクスプローラーで D ドライブの tips フォルダを開きます。
ファイルやフォルダなどを開きたいときに使用します。
Shell 関数の引数と戻り値
Shell(パス)
指定したパスのアプリを開きます。
Shell(パス, 状態)
開いたアプリの起動時の状態を指定できます。
引数「パス」 | 実行したいアプリの絶対パスを指定します。 |
引数「状態」 | 省略できます。起動時の状態を指定します。 |
戻り値の型 | 数値型 (Integer) |
引数「状態」
名前 | 値 | 状態 |
vbHide | 0 | フォーカスを持ち、非表示の状態 |
vbNormalFocus | 1 | フォーカスを持ち、元のサイズと位置で復元された状態 |
vbMinimizedFocus (既定) | 2 | フォーカスを持ち、最小化された状態 |
vbMaximizedFocus | 3 | フォーカスを持ち、最大化された状態 |
vbNormalNoFocus | 4 | フォーカスを持たず、最後にウィンドウを閉じたときのサイズと位置に復元された状態 |
vbMinimizedNoFocus | 6 | フォーカスを持たず、最小化された状態 |
スポンサーリンク
解説
引数「パス」には .exe ファイルのパスを指定します。.exe ファイルが存在しないときや、パスが不正なときは「エラー 53 ファイルが見つかりません。」が発生します。
引数「パス」に .txt などのファイルやフォルダのパスを指定すると「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。ファイルやフォルダを開くには、それを実行できる .exe に引数でパスを渡す必要があります。通常は アプリのパス ファイルのパス のように半角スペースで区切って渡します。
引数「パス」に Windows の「Windows 11 実行コマンドの一覧」は使用できますが、「Windows 11 Shell コマンドの一覧」は使用できません。
引数「パス」には環境変数 (%SystemRoot% など) は使用できません。環境変数からパスを取得するには「Environ 関数」を使用します。
引数「状態」の値は VbAppWinStyle 列挙型で定義されています。
.exe が実行されると、それを識別する プロセス ID を返します。
Shell 関数はアプリの起動が完了する前に制御を返します。VBA からそのアプリに対してすぐに操作をすると、失敗する可能性があります。
Excel のファイルを開く
Excel のファイルを開くには Call Workbooks.Open("パス") のように入力して開けます。
使用例
Shell 関数の使用例を紹介します。
.exe を実行する
.exe ファイルを実行します。
Dim i As Integer
' メモ帳を起動
i = Shell("C:\Windows\System32\notepad.exe")
i = Shell("C:\Windows\System32\notepad.exe", vbNormalFocus)
i = Shell("C:\Windows\System32\notepad.exe", vbNormalNoFocus)
' 環境変数を使用して起動
' メモ帳のパス "%SystemRoot%\system32\notepad.exe"
Dim s As String
s = Environ("SystemRoot")
i = Shell(s & "\System32\notepad.exe", vbNormalFocus)
' 実行コマンドを使用して起動
i = Shell("notepad", vbNormalFocus)
ファイルを開く
メモ帳でテキストファイルを開きます。
Dim i As Integer
' D:\tips.txt のファイルをメモ帳で開く
i = Shell("C:\Windows\System32\notepad.exe D:\tips.txt", vbNormalFocus)
フォルダを開く
エクスプローラーでフォルダを開きます。
Dim i As Integer
' D:\tips のフォルダをエクスプローラーで開く
i = Shell("C:\Windows\explorer.exe D:\tips", vbNormalFocus)
Excel のファイルを開く
Workbooks.Open メソッドから Excel のファイルを開けます。
Dim wb As Workbook
Set wb = Workbooks.Open("D:\Book1.xlsx")
スポンサーリンク