質問: shell(winamp_path & "winamp.exe /add " & """" & path) と、言う shell(アプリケーションのフルパス/add""ファイルのフルパス) と書いてファイルをアプリケーションで開く方法。 (2) call shell(path & ofile, vbnormalfocus) と、言う shell(アプリケーションのフルパス, 起動時のウィンドウの状態) と書いてアプリケーションを起動する方法。 この2つは同じ種類のshell関数なのでしょうか。 (1)は、ファイルも一種のアプリケーションとして扱われているんでしょうか。 (2)がshell関数の基本型のようですが、(1)のような書き方が見つかってからは、他にも違う書き方があるかと思うと気になって仕方無いです。 使い方の違いは分かったのですが、調べても(2)の使い方や、別の関数や言語、apiを使ったアプリケーションの書き方しか見つからず、 エクセル2007vbのヘルプを見ても(2)の使い方しか見つからず、 googleで、「エクセル shell関数」と調べても、2つの違いが書かれている所が見つからなかったので質問しました。 ※この2つと違う、アプリケーションを起動するshellの記述があるなら、詳しくではなく、参考程度に教えて頂けると、とても嬉しいです。 頭の悪い質問だと思いますが、是非ともアドバイス、宜しくお願いします。
回答: (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 構文で組み込み関数またはユーザー定義型関数を呼び出す場合、その関数の戻り値を取得することはできません。 配列全体を引数として渡す場合は、配列名の後ろに空のかっこを付けてください。