2008/9/22Shell関数の第一引数に実行プログラムのパスを指定してプログラムを起動できないこのバグは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関数を使っての実行は、下記のようにする。)でもさー、これだと、引数を指定できないですよ(起動するアプリケーションに引数を渡せない)。自作のシェルの場合は当然、アプリケーションシグニチャ(MacIDの引数で渡す4文字の英数字のこと)なんて無いと思う。すればよいのか...。Word以外で試してみましたがうまくいきませんでした。Safari("sfri")やAppleWorks("BOBO")の場合は、エラー番号5(プロシージャの呼び出し、または引数が無効です)や68(デバイスが準備されていません)となってしまいました。OS9が起動されてしまいました。Xの方のQuickTimeじゃないのかよ。このページのトップへ3.実行プログラムのパスを指定するとうまくいかない早い話、Shell関数の戻り値が常に0になってしまうのですよ...。理由はわからないのですが...。このページのトップへ4.回避方法だるまが見つけた回避方法を紹介します。script"を使用するだけです(MacScript関数を使用します)。戻り値は、実行した関数の戻り値となります。1.9.3■注意1.この方法だと、Shell関数と違い実行したプログラムが終了するまで、次のVBAプログラムが実行されません(非同期ではなく同期実行となります)。9だとうまくいきません。2001や98では動作しないと思います。3.あ、Excel2008だとそもそも、VBAが無いので、もちろん出来ません。このページのトップへ5.参考文献このページを作成するのに参考にしたページです。2008/9/22このページのトップへこのページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。Corporationの米国およびその他の国における登録商標または商標です。VBAと表記する場合があります。Computer,Inc.の登録商標または商標です。その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。このホームページの作成者はこれらの会社とはいっさい関係がありません。