作成日 2008/9/22
最終更新日 2008/9/22

Shell関数の第一引数に実行プログラムのパスを指定してプログラムを起動できない

 このバグはMicrosoftのホームページでは紹介されていないみたいです。(2008/9/22現在)
 ExcelVBAがバグって入るのか、ExcelVBAのヘルプが間違っているのか、だるまの頭がバグって入るのかわかりませんが、とにかく、Shell関数の第一引数に実行プログラムのパスを指定してもプログラムを起動できません(戻り値は0となりました)。
 このページでは、まず、Shell関数について説明し、その後、問題(プログラムを起動できない問題)を説明します。そして、その後、だるまが見つけた回避方法を紹介します。

1.Shell関数とは
2.MacID関数を使っての実行はうまくいく(たぶん)
3.実行プログラムのパスを指定するとうまくいかない
4.回避方法
5.参考文献


1.Shell関数とは

 問題となっているShell関数がどのような関数であるか把握していないと、以降の話が理解できないので、Shell関数を簡単に説明します。赤太文字の箇所はこのページを読む際に関係してくる部分です。

■概要
 実行可能プログラムを実行します。

■第一引数(pathname、必須)
 プログラム名、引数、コマンドラインスイッチを指定する。
 Macintoshの場合は、MacID関数を使用してアプリケーションの名前の変わりにシグネチャを指定できる。
(シグネチャで指定しなければならないとは言っていない。)

■第二引数(windowstyle、省略可能)
 このページにはあまり関係が無いのですが、プログラムのウィンドウの形式に関する引数です。

■戻り値
 プログラムのタスクIDを示すバリアント型(内部形式DoubleのVariant)の値を返す。
 プログラムの実行に問題が発生した場合は0を返す。
 
■例外
 ヘルプには書かれていませんが、第一引数(pathname)で指定したプログラムが見つからなかった場合は、
エラーナンバー53の例外が返されるようです。

■その他の仕様
 Shell関数は、非同期でプログラムを実行します。つまり、起動したプログラムが終了しなくても、Shell関数の次のVBAプログラムが実行されます。

このページのトップへ

2.MacID関数を使っての実行はうまくいく(たぶん)

 MacID関数を使っての実行は、下記のようにする。

■例(Microsoft Wordを起動)
Shell( MacID("MSWD") )

 でもさー、これだと、引数を指定できないですよ(起動するアプリケーションに引数を渡せない)。
 不便ですよね。
 さらに、自作のシェルの場合は当然、アプリケーションシグニチャ(MacIDの引数で渡す4文字の英数字のこと)なんて無いと思う。
 どうすればよいのか…。

 それと、Microsoft Word以外で試してみましたがうまくいきませんでした。
 Safari("sfri")やAppleWorks("BOBO")の場合は、エラー番号5(プロシージャの呼び出し、または引数が無効です)や68(デバイスが準備されていません)となってしまいました。
 QuickTime Player("TVOD")はうまく出来たけど、Mac OS9が起動されてしまいました。ってMac OS Xの方のQuickTimeじゃないのかよ。
 
このページのトップへ

3.実行プログラムのパスを指定するとうまくいかない

 早い話、Shell関数の戻り値が常に0になってしまうのですよ…。理由はわからないのですが…。
このページのトップへ

4.回避方法

 だるまが見つけた回避方法を紹介します。
 原理は簡単で、VBAからAppliScriptの"do shell script"を使用するだけです(MacScript関数を使用します)。
 戻り値は、実行した関数の戻り値となります。

doShellScriptの実行
図1 do shell scriptを使用してプログラムを実行する
pwdを実行し、現在のパス("/")が返ってきている
(※このパスはVBAのCurDir関数の戻り値とは別物です)


■動作確認環境
OS:Mac OS X 10.3.9
Excel:Microsoft Excel X for mac 10.1.9
AppleScript:AppleScript 1.9.3

■注意
1.この方法だと、Shell関数と違い実行したプログラムが終了するまで、次のVBAプログラムが実行されません(非同期ではなく同期実行となります)。
2.多分Mac OS 9だとうまくいきません。そのため、Excel 2001や98では動作しないと思います。
3.あ、Excel2008だとそもそも、VBAが無いので、もちろん出来ません。
このページのトップへ

5.参考文献

 このページを作成するのに参考にしたページです。

番号

リンク先の名称

リンク先の説明

リンクした日

1 do shell script in AppleScript AppleScriptのdo shell scriptに関してのQ&A 2008/9/22


Prev Up Next  Top
このページのトップへ


このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic 、Word および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X 、QuickTime、Safari 、AppleWorks は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。