- ベストアンサー
エクセルVBAで使うShell関数について
- エクセルVBAでファイルを指定したアプリケーションで開く方法と、アプリケーションを起動する方法について調べています。
- Shell関数を使った書き方には、ファイルをアプリケーションで開く方法と、アプリケーションを起動する方法の2つがあります。
- 具体的な使い方や他の関数やAPIを使ったアプリケーションの書き方についても調べたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
(1)と(2)は同じものです。 >Shell(アプリケーションのフルパス, 起動時のウィンドウの状態) 「起動時のウィンドウの状態」は省略可能なので、(1)のようになります。 (2)はcallステートメントで呼んでいるので、戻り値は取得できません。 下記にVBAヘルプをあげておきます。 VBA ヘルプ Shell 関数 実行可能プログラムを実行し、実行が完了するとプログラムのタスク ID を示すバリアント型 (内部処理形式 Double の Variant) の値を返します。プログラムの実行に問題が発生した場合は、0 を返します。 構文 Shell(pathname[,windowstyle]) Shell 関数は、次の名前付き引数から構成されます。 指定項目 内容 pathname 必ず指定します。バリアント型 (内部処理形式 String の Variant) の値を指定します。実行するプログラム名と必要な引数名またはコマンド ラインのスイッチを指定します。また、フォルダ、またはドライブを含めて指定できます。Macintosh では、MacID 関数を使ってアプリケーションの名前の代わりにシグネチャを指定できます。次の例は、Microsoft Word のシグネチャを使用したものです。 Shell MacID("MSWD") windowstyle 省略可能です。実行するプログラムのウィンドウの形式に対応するバリアント型 (内部処理形式 Integer の Variant) の値を指定します。引数 windowstyle を省略すると、プログラムはフォーカスを持った状態で最小化され、実行を開始します。Macintosh (System 7.0 以降) では、windowstyle は、アプリケーションの実行中に、そのアプリケーションがフォーカスを取得できるかどうかを指定するだけです。 名前付き引数 windowstyle には、次の値を指定します。 定数 値 内容 vbHide 0 フォーカスを持ち、非表示にされるウィンドウ。定数 vbHide は、Macintosh では使用できません。 vbNormalFocus 1 フォーカスを持ち、元のサイズと位置に復元されるウィンドウ vbMinimizedFocus 2 フォーカスを持ち、最小化表示されるウィンドウ vbMaximizedFocus 3 フォーカスを持ち、最大化表示されるウィンドウ vbNormalNoFocus 4 最後にウィンドウを閉じたときのサイズと位置に復元されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。 vbMinimizedNoFocus 6 最小化表示されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。 解説 指定したプログラムが問題なく実行できると、プログラムのタスク ID が返されます。タスク ID は、実行中のプログラムを識別する重複しない番号です。指定されたプログラムが実行できないと、エラーが発生します。Microsoft Windows 上で、MacID 関数を使用するとエラーが発生します。 Macintosh では、vbNormalFocus、vbMinimizedFocus、vbMaximizedFocus はすべてアプリケーションをフォアグラウンドで実行し、vbHide、vbNoFocus、vbMinimizeFocus はすべてアプリケーションをバックグラウンドで実行します。 メモ 既定の設定では、Shell 関数はプログラムを非同期的に実行します。したがって、Shell 関数を使用して実行を開始したプログラムが終了しなくても、Shell 関数の次のステートメントは実行されます。 Call ステートメント Sub プロシージャ、Function プロシージャ、ダイナミック リンク ライブラリ (DLL) プロシージャに制御を渡すフロー制御ステートメントです。 構文 [Call] name [argumentlist] Call ステートメントの構文は、次の指定項目から構成されます。 指定項目 内容 Call 省略可能なキーワードです。指定するときは、次に示すように引数リスト (引数 argumentlist) をかっこで囲む必要があります。 Call MyProc(0) name 必ず指定します。呼び出すプロシージャの名前を指定します。 argumentlist 解説 プロシージャを呼び出すとき、キーワード Call は省略できます。キーワード Call を使って、引数が必要なプロシージャを呼び出す場合は、引数リスト (引数 argumentlist) をかっこで囲む必要があります。キーワード Call を省略するときは、引数リストを囲むかっこも省略しなければなりません。Call 構文で組み込み関数またはユーザー定義型関数を呼び出す場合、その関数の戻り値を取得することはできません。 配列全体を引数として渡す場合は、配列名の後ろに空のかっこを付けてください。
お礼
回答して頂き、とても感謝します。 どっちも同じVBAのShell関数なんですね。 一番引っかかっていた部分が解決できました。有難う御座います! 更に、CALLについても補足を書いて貰って大変助かります。 「何か呼び出してるぽいけど…なんだコレ?」と思っていたので。 okormazdさんの解説でどんな物なのか理解出来ました。感謝です!! …説明して貰った所を見て考えたのですが。 多分、(1)は ret = Shell(Winamp_Path & "winamp.exe /ADD " & """" & Path) ※Winamp_Pathは、Winampが置いてあるパス名 ※Pathは、MP3等の音楽ファイルのパス+ファイル名 だから、 ★Winamp_Path & "winamp.exe = pathnameのプログラム名 ★/ADD " & """" & = コマンドラインのスイッチ? ★Path = 引数名? (&は文字同士繋ぐ記号とは理解しています) みたくなっていて、Winamp専用に動くようになっているんですね。 pathnameのプログラムによって、必要な引数もコマンドラインも違ってくると。 その辺りが、今だに納得出来ていないのですが、もう少し色々勉強して理解出来るレベルを上げてから、次の機会に質問したいと思います。 Shell "c:\program files\gretech\GomPlayer\Gom.exe " & Path と、言う書き方もあるのが分かって、同じなのか気になるのでその辺りも調査してから。 本当にありがとうございました!!ここで一旦締めたいと思います。 また機会がありましたら、ご協力お願いします。