指定したプログラムを起動する(Shell関数)
Shell関数を使用すると、引数Pathnameで指定した外部のプログラムを実行します。
指定したプログラムが問題なく実行できると、プログラムのタスクIDを
バリアント型(内部処理形式Double)の値で返します。
引数WindowStyleで使用する定数は一覧のとおりです。


・引数windowstyleで使用する定数一覧(VbAppWinStyle)

定数        値  内容

vbHide        0  フォーカスを持ち、非表示にされるウィンドウ
vbNormalFocus    1  フォーカスを持ち、元のサイズと位置に復元されるウィンドウ
vbMinimizedFocus   2  フォーカスを持ち、最小化表示されるウィンドウ
vbMaximizedFocus   3  フォーカスを持ち、最大化表示されるウィンドウ
vbNormalNoFocus   4  最後にウィンドウを閉じたときのサイズと位置に復元される
             フォーカスを持たないウィンドウ。現在アクティブなウィン
             ドウは、アクティブのままです。
vbMinimizedNoFocus  6  最小化表示されるフォーカスを持たないウィンドウ。現在アク
             ティブなウィンドウは、アクティブのままです。


  構文 Shell(Pathname, WindowStyle)

 設定項目        内容
  pathname    実行するプログラム名と必要な引数名、またはコマンドライン
          のスイッチを指定 [省略不可]
  windowstyle   実行するプログラムのウィンドウの形式を指定 [省略可能]


 次のサンプルは、電卓を最大表示で起動します。

●サンプル1●

Sub ShellSamp1()

   Dim myID As Double

    myID = Shell("CALC.EXE", vbMaximizedFocus)
    'myID = Shell("C:\WINDOWS\CALC.EXE", vbMaximizedFocus)
    '---パスつきで指定しても よい

End Sub


 次のサンプル2は、メモ帳で指定したファイルを開きますが、フォーカスは移しません。

●サンプル2●

Sub ShellSamp2()

    Dim myID As Double

    myID = Shell("NOTEPAD.EXE テスト.txt", vbNormalNoFocus)
    MsgBox "メモ帳でファイルを開きました"
    '---タスクIDからアプリケーションをアクティブにする
    AppActivate myID

End Sub


 Shell関数で取得したタスクIDとAppActivateステートメントを利用すれば、起動した
アプリケーションに、いつでもフォーカスを移すことが可能です。


●注意●

 Shell関数はプログラムを非同期的に実行します。したがって、Shell 関数を使用
して実行を開始したプログラムの終了を待たずに、Shell関数の次のステートメント
は実行されます。例えば2つめのサンプルでは、メモ帳がファイルを開く時間は考慮
せずに、メッセージボックスでメッセージを表示しています。開くファイルが大きな
ファイルで時間がかかる場合には、開き終わる前にメッセージが表示されてしまうこ
ともあるでしょう。そこで、対象のプログラムの処理終了までにかかる時間をテスト
して見積もっておき、終了するであろう時間までWaitメソッドでマクロ実行を停止さ
せておくようにしてください。なお、同期的に外部プログラムを実行させるには、
Windows32 APIを使用する必要があります。


●ポイント●

 SendKeysステートメントは、エクセル以外のアプリケーションに対してもキー操作
を送ることができます。従って、Shell関数とSendKeysステートメントを利用すれば、
エクセル以外のアプリケーションの処理の自動化処理を、VBAで作成することができ
ます。ただし、あくまでキー操作を送るだけの自動化であり、両者が同期するわけで
はありませんので十分に注意する必要があります。例えば、マクロ実行中にキーボード
に触れたりするだけでも、結果に不具合が生じる可能性はかなり高いと言えます。

Excel2000



戻る


Excel Word Access VBA! モーグ