エクセルVBAからShell起動すると無視するんです

解決


たかし  2005-11-06 02:27:06  No: 92455  IP: [192.*.*.*]

EXCEL2002 vb6.0において

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)を宣言したのに  

Shell "********.exe"

この後起動せず無視してしまいます。

全てのファイルは同じフォルダ内にあり、パス指定は
不要だと思うのですが何か原因でもあるのでしょうか

普通のvbならちゃんと動きますがエクセルから
SHELL起動すると正しく動きません。

編集 削除
Geo=TK3  2005-11-06 05:16:52  No: 92456  IP: [192.*.*.*]

Excel VBA では .xls ファイルから起動しても、カレントフォルダは .xls ファ
イルのあるフォルダではなく、マイドキュメントになっているようです。
Shell で指定する実行ファイル名をフルパスで指定してみてください。

編集 削除
たかし  2005-11-06 07:25:26  No: 92457  IP: [192.*.*.*]

ご指導ありがとうございます。
仰せの通り下記のようにフルパスにしたところ

shell "C:\フォルダ\フォルダ\フォルダ\********.exe"

確かにshell起動には一応行ってるんですが今度は
実行時エラー53  が出ます。

単体で動かすと出ないんですよ。不思議です。

編集 削除
たかし  2005-11-06 07:30:04  No: 92458  IP: [192.*.*.*]

最初のkernel32の記述が間違ってますか?

編集 削除
たかし  2005-11-06 07:57:18  No: 92459  IP: [192.*.*.*]

ひょっとしたら******.exe内で使用しているファイルも
フルパスで指定しないといけないんですか?

編集 削除
Geo=TK3  2005-11-07 14:51:11  No: 92460  IP: [192.*.*.*]

>確かにshell起動には一応行ってるんですが今度は
>実行時エラー53  が出ます。

実行時エラー 53 というと“ファイルが見つかりません”ですか。
これは Shell 関数で起動した実行ファイルが出しているんですよね?
そうであればこちらもカレントフォルダが実行ファイルが置かれているフォ
ルダになっていないのだと思います。

>最初のkernel32の記述が間違ってますか?

Sleep ならばこれで問題ありません。

>ひょっとしたら******.exe内で使用しているファイルも
>フルパスで指定しないといけないんですか?

その方が良いでしょう。
Shell 関数はカレントフォルダを変更しませんから。

編集 削除
Blue  2005-11-07 16:00:19  No: 92461  IP: [192.*.*.*]

>ひょっとしたら******.exe内で使用しているファイルも
>フルパスで指定しないといけないんですか?
そもそのこのexeのつくりは問題っぽい。

カレントディレクトリを移動しないと実行できないようなものではなくて、
exeのパスから、ファイルパスを取得するとかにしたほうがいいです。
(VBならApp.Pathkから、APIならGetModuleFileNameからパスを生成すべき)

もうつくられてしまったexeならどうしようもないですが。

編集 削除
たかし  2005-11-07 17:39:39  No: 92462  IP: [192.*.*.*]

ありがとうございます。app.pathを追加し
バッチリ動きました。3日間壁にぶち当たっていたので
大変感謝しています。神です。ありがとうございました。

編集 削除