• ベストアンサー
  • 困ってます

エクセルVBAで使うShell関数について

現在、初心者ながらもエクセルを使って動画や音楽を検索して再生するソフトを作っています。 指定したファイルを、指定したアプリケーションで起動して開きたいと思い、ネットを使って調べたら2つの異なるShellの書き方で動かす方法が見つかりました。 2つのShell関数は同じものなのか教えて下さい。 (1) ret = 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の記述があるなら、詳しくではなく、参考程度に教えて頂けると、とても嬉しいです。 頭の悪い質問だと思いますが、是非ともアドバイス、宜しくお願いします。

noname#106563
noname#106563

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数6066
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • okormazd
  • ベストアンサー率50% (1224/2411)

(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 と、言う書き方もあるのが分かって、同じなのか気になるのでその辺りも調査してから。 本当にありがとうございました!!ここで一旦締めたいと思います。 また機会がありましたら、ご協力お願いします。

関連するQ&A

  • エクセルで1つの再生ソフトで音楽も動画も再生する方法

    エクセル2007(Vista)で、音楽と動画を再生する方法を探しています。 1つのソフトで音楽も動画も再生したいと思ったので、手元にあったGomPlayerで、選んだファイルを再生できる方法が無いか探しました。 結果GomPlayerで再生する方法は見つからず、似たソフトWinampで再生出来る記述が、見つかりました。 ret = Shell(Winamp_Path & "winamp.exe /ADD " & """" & Path) ※retはロング型、Winamp_Pathにはwinampのパス、Pathには選んだファイルのフルパス名が、セットしています。 ※「/ADD 」を「/PLAY」に変えたら、Winampで再生出来ました。ADDだと再生されずプレイリストに追加されWinampが起動するだけでした。(ADDもPLAYも自分で確認済) GomPlayerに拘る理由は、Winampでは再生出来ないファイルがあるからです。 GomPlayerでも同じように書いてみたのですが 起動するだけで再生されませんでした。 GomPlayerも、同じように再生したいファイルを 再生出来るようにできないでしょうか。 アドバイスお願いします!!

  • Shell関数について

    知恵を貸してください。 今Shell関数を使ってあるアプリケーションを実行しています。実行失敗したら警告をだすとのアクションを取りたいです。 ところでShell関数のヘルプを見ると実行失敗したら’0’を返すとのことですが、 実際、実行するアプリケーションのパスを変えるなどにして、テストしてみたらその結果は(Shell関数の戻り値)は’0’ではないです。 これはどういうことでしょうか? どなたか教えてください。

  • Shell関数でのExcel起動において

    Shell関数でExcelを起動させた時に、Excelのブックを閉じた時に一緒にExcelアプリケーションも終了させたいのですが、create object関数なら可能なのですが、環境上Shell関数を使うしかなくて、何か方法はありますか?

  • VBA Shell関数 

    エクセルVBA shell関数でプログラムを立ち上げ (DOSプロンプト画面が起動) そのあとに、続けてDOSプロンプトにコマンドと"Sheet1のA1"のセルに入力してある文字を打ち込みたいのですが上手くいかなく困っています。 どのようにしたらよいのでしょうか。 以下のように記述しています。 (初心者です) ------------------------------------ Sub ShellSamp1() Dim myID As Double   myID = Shell("C:\****\*****\*****.EXE & " & cd C:\Documents and Settings & " & Range("A1").Value & """") End Sub ------------------------------------

  • VBAとロングファイル名

    EXCELのVBAで、「C:\My Documents」のようなロングファイル名を 「C:\Mydocu~1」のような昔のファイル形式にする方法を教えてください。 例えば ThisWorkbook.Pathで得たパス名がロングファイルだった場合です。 目的は、ある古い別アプリをShellで起動させたいのですが、それの 引数に昔のファイル形式で色々なパスを渡さないといけないのです。 (そのアプリがロングファイル名に対応していない) ヘルプとか見たんですけど分からないので教えてください。 お願いします。

  • winampのShell Optionsに関して

    先日もwinampをアンインストールしたのですがというタイトルで 質問させて頂き、解決したと思い締め切ったのですが File Typesから関連付けされているファイルをNoneにする事で mp3ファイルなどを右クリックした時のショートカットは消えたのですが wmvファイルやflvファイルを右クリックした時には Enqueue in Winamp Add to Winamp's Bookmark lis といった表示が未だに出てしまう事が判明しました。 そこでShell OptionsからPlay in winampなどの項目を解除すれば良いという アドバイスを頂いていたので、それを実行しようと思ったのですが 肝心のShell Optionsというものが見当たりません。 いったいどこにあるのか、教えていただけないでしょうか。

  • Access2000vbaで、shell関数で起動させたExcellを終了する方法を教えてください。

    Access2000vbaで、shell関数で起動させたExcellを終了する方法を教えてください。 以下のように、shell関数で、既存のExcelファイルを起動させました。 どうすれば、Excelファイルを終了できますか? 宜しくお願いします。 Dim fl_name As String fl_name = "C:\XE2.xls" Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & fl_name, vbNormalFocus

  • EXCEL VBA で他のアプリケーションを開く方法について

    EXCEL VBAで他のアプリケーションを開く方法について教えていただきたいことがあります。 現在開いているエクセルのブックと同じフォルダにある、"AAA"という名称のsqc形式のファイル(EAST社のSkyLink Ver9.0のコマンドファイルです)をVBAで開く。 SHELL関数で開くと思っていたのですが、 Sub Test() Dim MyPath As String, MyTask As Double MyPath = ActiveWorkbook.Path & "\" MyTask = Shell(MyPath & "AAA.sqc") SendKeys "%FO", True End Sub とすると 「プロシージャの呼び出し、または引数が不正です」 というメッセージが出てしまいます。 如何せんSHELL関数を使うのが初めてでして、色々調べても どうしても解決策にたどり着きません。 どうぞよろしくお願いいたします。

  • Access Shell関数について質問です。

    Access Shell関数について質問です。 AccessVBA でボタンをクリック時に画像を表示させたいと考えています。 クリック時にデフォルトの画像ソフトを起動させて表示しようと思っています。 たしか、Shell関数を使用すれば使えたと思うのですが、 パラメーターの入れ方を忘れてしまいました。 指定アプリケーションは使用環境によって違う為、出来ればデフォルトで 各環境のデフォルト設定の写真ビューワーを呼び出したいと考えています。 私の記憶が間違っているかもしれないので、Shell関数以外も含めて、 どなたかご存知の方アドバイスよろしくお願いいたします。

  • shell関数を使いアプリがない場合の処理方法

    shell関数で、アプリケーションを読み込むことをさせてますが、書かれているパスにアプリがない場合に、どのような例外処理を書き込めよいでしょうか。 よろしくご教授のほど、お願いします。 (理想としては、「アプリがありません。選択して下さい」というメッセージで、参照ボタンみたいな感じで選べるとうれしいです。)