サイトについて      連絡先   検索

VBA Shell 関数

はじめに

Excel VBA マクロの Shell 関数を紹介します。

Shell 関数は、外部プログラムを実行します。

メモ帳など外部プログラムを実行したいときに使用します。

構文

Shell(パス)
指定したパスのプログラムを開きます。

Shell(パス, 状態)
開いたプログラムの起動時の状態を指定できます。

引数「パス」実行したい外部プログラムのフルパスを指定します。
引数「状態」省略できます。起動時の状態を指定します。
戻り値の型数値型 (Integer)

引数「状態」の値

名前 状態
vbHide0フォーカスを持ち、非表示の状態
vbNormalFocus1フォーカスを持ち、元のサイズと位置で復元された状態
vbMinimizedFocus (既定)2フォーカスを持ち、最小化された状態
vbMaximizedFocus3フォーカスを持ち、最大化された状態
vbNormalNoFocus4フォーカスを持たず、最後にウィンドウを閉じたときのサイズと位置に復元された状態
vbMinimizedNoFocus6フォーカスを持たず、最小化された状態

解説

プログラムが実行されると、それを識別するタスク ID が返ります。

プログラムが存在しないなど問題があるとエラーが発生します。

Shell 関数はプログラムの起動を待たずに制御を返します。Shell 関数を実行直後にそのプログラムに対して操作すると、失敗する可能性があります。

パスには環境変数 (%SystemRoot% など) は使用できません。環境変数からパスを取得するには「Environ 関数」を使用します。

ファイルやフォルダのパスを指定するとエラーになります。それを開くプログラムに引数で渡す必要があります。通常はプログラムのパス ファイルのパスのように半角スペースで区切って渡せます。

使用例


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")

メモ帳でテキストファイルを開く


Dim i As Integer
' D:\tips.txt のファイルをメモ帳で開く
i = Shell("C:\Windows\System32\notepad.exe D:\tips.txt")

エクスプローラーでフォルダを開く


Dim i As Integer
' D:\tips のフォルダをエクスプローラーで開く
i = Shell("C:\Windows\explorer.exe D:\tips")