作成日 2008/9/22
最終更新日 2008/9/22
Shell関数の第一引数に実行プログラムのパスを指定してプログラムを起動できない
このバグはMicrosoftのホームページでは紹介されていないみたいです。(2008/9/22現在)
ExcelVBAがバグって入るのか、ExcelVBAのヘルプが間違っているのか、だるまの頭がバグって入るのかわかりませんが、とにかく、Shell関数の第一引数に実行プログラムのパスを指定してもプログラムを起動できません(戻り値は0となりました)。
このページでは、まず、Shell関数について説明し、その後、問題(プログラムを起動できない問題)を説明します。そして、その後、だるまが見つけた回避方法を紹介します。
問題となっているShell関数がどのような関数であるか把握していないと、以降の話が理解できないので、Shell関数を簡単に説明します。赤太文字の箇所はこのページを読む際に関係してくる部分です。
■概要
実行可能プログラムを実行します。
■第一引数(pathname、必須)
プログラム名、引数、コマンドラインスイッチを指定する。
Macintoshの場合は、MacID関数を使用してアプリケーションの名前の変わりにシグネチャを指定できる。
(シグネチャで指定しなければならないとは言っていない。)
■第二引数(windowstyle、省略可能)
このページにはあまり関係が無いのですが、プログラムのウィンドウの形式に関する引数です。
■戻り値
プログラムのタスクIDを示すバリアント型(内部形式DoubleのVariant)の値を返す。
プログラムの実行に問題が発生した場合は0を返す。
■例外
ヘルプには書かれていませんが、第一引数(pathname)で指定したプログラムが見つからなかった場合は、
エラーナンバー53の例外が返されるようです。
■その他の仕様
Shell関数は、非同期でプログラムを実行します。つまり、起動したプログラムが終了しなくても、Shell関数の次のVBAプログラムが実行されます。
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じゃないのかよ。
早い話、Shell関数の戻り値が常に0になってしまうのですよ…。理由はわからないのですが…。
だるまが見つけた回避方法を紹介します。
原理は簡単で、VBAからAppliScriptの"do
shell
script"を使用するだけです(MacScript関数を使用します)。
戻り値は、実行した関数の戻り値となります。
図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が無いので、もちろん出来ません。
このページを作成するのに参考にしたページです。
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メールをお願いします。
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.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。