質問

現在、初心者ながらもエクセルを使って動画や音楽を検索して再生するソフトを作っています。
指定したファイルを、指定したアプリケーションで起動して開きたいと思い、ネットを使って調べたら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の記述があるなら、詳しくではなく、参考程度に教えて頂けると、とても嬉しいです。

頭の悪い質問だと思いますが、是非ともアドバイス、宜しくお願いします。

通報する

回答 (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
と、言う書き方もあるのが分かって、同じなのか気になるのでその辺りも調査してから。

本当にありがとうございました!!ここで一旦締めたいと思います。
また機会がありましたら、ご協力お願いします。

このQ&Aは役に立ちましたか?0 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

子供の夏休みの過ごし方

読書感想文・自由研究・宿題・工作など、たまには子供と一緒にチャレンジしてみませんか?

このQ&Aを見た人が検索しているワード


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集