OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:469
区分:プログラム  |  分類:VB  |  最終更新日:2014/06/20
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【VB】Shell関数
関連タグ:vba, vb6, vb.net, 関数, アプリケーション, プログラム
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 32,808

外部アプリケーションを実行する関数です。

関数仕様

構文 Shell(pathname[, windowstyle])
引数
引数 省略 説明
pathname 不可

実行する外部アプリケーション名を指定します。

ドライブやパスなどを含めた、フルパスでの指定ができます。

windowstyle

実行するアプリケーションのウィンドウの形式を以下の定数で指定します。

省略した場合は、フォーカスを持った状態で最小化表示されます。

定数 内容
vbHide 0

フォーカスを持ち、非表示

vbNormalFocus 1

フォーカスを持ち、元のサイズと位置に復元 

vbMinimizedFocus 2

フォーカスを持ち、最小化表示

vbMaximizedFocus 3

フォーカスを持ち、最大化表示

vbNormalNoFocus 4

フォーカスを持たず、最後にウィンドウを閉じたときのサイズと位置に復元

※現在アクティブなウィンドウは、アクティブのまま

vbMinimizedNoFocus 6

フォーカスを持たず、最小化表示

※現在アクティブなウィンドウは、アクティブのまま

戻り値 バリアント型 (内部処理形式 Double の Variant)

 

この関数は、指定された外部アプリケーションを実行し、実行に成功した場合、タスク ID をバリアント型 (内部処理形式 Double の Variant) で返します。 引数にはアプリケーション名と表示ウィンドウ形式を指定します。 ウィンドウ形式は省略可で、省略した場合、アプリケーションはフォーカスを持った状態で最小化表示されます。 アプリケーションの実行に問題が発生した場合は 0 を返しますが、元々存在しないアプリケーションを指定した場合などは、エラーが発生します。

なお、この関数は、指定したアプリケーションを非同期で実行します。 ですので、この関数で起動したプログラムの終了を待って次の処理を行うといった、同期的な処理を行うことはできません。 また、非同期のため、呼び出し元のプログラムを終了した場合も、起動したアプリケーションが強制的に終了することはありません。

動作検証

条件 動作結果

外部アプリケーションを名前で指定した場合

(外部アプリケーションには「メモ帳」を指定)

Dim RetVal
RetVal = Shell("notepad")

メモ帳を起動します

外部アプリケーションをフルパスで指定した場合

(外部アプリケーションには「メモ帳」を指定)

Dim RetVal
RetVal = Shell("C:\Windows\System32\notepad.exe")

メモ帳を起動します

最大化を指定して外部アプリケーションを指定した場合

(外部アプリケーションには「メモ帳」を指定)

Dim RetVal
RetVal = Shell("notepad", vbMaximizedFocus)

最大化してメモ帳を起動します

存在しないプログラムを指定した場合

Dim RetVal
RetVal = Shell("test")

実行時エラー

サンプルコード

Sub Sample()
  Dim RetVal
  RetVal = Shell("notepad", vbNormalFocus)

On Error Resume Next

  Do
    DoEvents
    Call AppActivate(RetVal)
  Loop While Err = 0
  Err.Clear

  MsgBox "メモ帳を終了しました。"

End Sub

※ 上記サンプルは Shell 関数でメモ帳を起動し、AppActivate ステートメントでエラーになるまで(アプリケーションが終了するまで)処理をループさせ、擬似的に起動したアプリケーションと同期をとるようにしています。

関連記事
関連記事はありません。
外部リンク
外部リンクはありません。
- 記事検索 -