[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/08/29(Sun) 09:31
投稿者名:simo
Eメール:
URL :
タイトル:
shell関数のエラーがでる
こんにちは。お願いします。
shell関数でアプリを起動させたいのですがエラーが出ます。
RetVal = Shell("C:\Program Files\ACAD LT 2000\aclt.exe", 1)  
上記のようにするとファイルがありませんと出ます。パスや名前は何回も確認したのですが
ダメです。それでもって下記のようにすると(デフラグで試しました。)
RetVal = Shell("C:\Program Files\ACAD LT 2000\Defrag.exe", 1)
一応アプリが起動しました。(オーバーフローのエラーが出ますが)
名前がaclt.exeの場合、アプリが起動さえしません。
どうなっているのでしょうか?

投稿時間:2004/08/29(Sun) 10:43
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: shell関数のエラーがでる
環境等が書かれていないので?ですが、下記でも同じでしょうか?

  Dim MyFile As String
  MyFile = Chr$(34) & "C:\Program Files\ACAD LT 2000\aclt.exe" & Chr$(34)
    RetVal = Shell(MyFile, 1)

詳しくは、ここの 他のプロセスとの連携のところを参照して下さい。

投稿時間:2004/08/29(Sun) 14:26
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: shell関数のエラーがでる
> RetVal = Shell("C:\Program Files\ACAD LT 2000\aclt.exe", 1)  

ACAD/ACLTって、単にexe名だけで実行するのではなく、幾つかの引数を
必要とするのでは無いでしょうか? AutoCADを持っていないので、確認できませんけど。
hhttp://cgi33.plala.or.jp/biwakobo/showhtml.cgi?f=ep_yomoyama


あと、花ちゃんさんからの回答にもありますが、両端を「"」で囲った方が
良いかと思います。(もしくは、ショートファイル名で指定するか)
空白を含んだパスをそのまま実行させようとすると、誤動作する事がありますので。

# 例えば、C:\Program.exe というファイルが 万一存在していたとしたら、上記は
# 「Program.exe」に「Files\ACAD」「LT」「2000\aclt.exe」という引数を伴って
# 実行させる事になってしまいます。(普通は、Program.exeなんてありませんけどね)

それから、レジストリの
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
に、aclt.exe の情報が含まれていないかも確認してみてください。

そして、もしもそこに情報が含まれていたなら、Shell関数の実行前に、
ChDriveとChDirを使って、実行時のカレントディレクトリを、レジストリに
記述されたパスに移動させてから、実行させるようにしてみてください。


それと最後に。
Shell関数の第2引数は、「 1 」などのマジックナンバーを書くのではなく、
「 vbNormalFocus 」などの定数をで指定した方がよろしいかと思いますよ。
(意味は一緒ですが、マジックナンバーだとコードが分かりにくくなりますので)

投稿時間:2004/08/30(Mon) 08:11
投稿者名:simo
Eメール:
URL :
タイトル:
Re^2: shell関数のエラーがでる
> 環境等が書かれていないので?ですが、下記でも同じでしょうか?
>
>   Dim MyFile As String
>   MyFile = Chr$(34) & "C:\Program Files\ACAD LT 2000\aclt.exe" & Chr$(34)
>     RetVal = Shell(MyFile, 1)
>
> 詳しくは、ここの 他のプロセスとの連携のところを参照して下さい。
WIN98seです。
有難うございます。上記試しましたがプロシージャの呼び出しまたは引数が不正のエラーが出ます。
ちなみにC:\Program Files\ACAD LT 2000\aclt.exeをエクスプローラーのアドレスバーに
入力したら、実行されます。見落としているところがあるでしょうか。それとも難しいでしょうか

投稿時間:2004/08/30(Mon) 10:03
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: shell関数のエラーがでる
> 有難うございます。上記試しましたがプロシージャの呼び出しまたは引数が不正のエラーが出ます。

エラーが発生するなら、エクスプローラー上で aclt.exe をダブルクリックして見て、起動
できるか確認して下さい。
起動できなければ、そのEXEは単独では起動できないかと思います。

下記なら起動できますか?
起動できたら、念のためそのコードのパスの部分だけを変更して試して見て下さい。

Private Sub Command1_Click()
  Dim Ret As Long
  Dim MyFile As String
  MyFile = Chr$(34) & "C:\Program Files\Accessories\MSPAINT.EXE" & Chr$(34)
  Ret = Shell(MyFile, vbNormalFocus)
End Sub

投稿時間:2004/08/30(Mon) 15:18
投稿者名:simo
Eメール:
URL :
タイトル:
Re^4: shell関数のエラーがでる
> > 有難うございます。上記試しましたがプロシージャの呼び出しまたは引数が不正のエラーが出ます。
>
> エラーが発生するなら、エクスプローラー上で aclt.exe をダブルクリックして見て、起動
> できるか確認して下さい。
> 起動できなければ、そのEXEは単独では起動できないかと思います。
>
> 下記なら起動できますか?
> 起動できたら、念のためそのコードのパスの部分だけを変更して試して見て下さい。
>
> Private Sub Command1_Click()
>   Dim Ret As Long
>   Dim MyFile As String
>   MyFile = Chr$(34) & "C:\Program Files\Accessories\MSPAINT.EXE" & Chr$(34)
>   Ret = Shell(MyFile, vbNormalFocus)
> End Sub

ダブルクリックOKです。
ペイントも起動OKです。
パスを変えたらダメでした。実行時エラー5が出ます。aclt.exeの名前も一応確認しました。
意味不明です。

投稿時間:2004/08/30(Mon) 15:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: shell関数のエラーがでる
下記でもだめでしょうか?

Private Sub Command1_Click()
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run "C:\Program Files\ACAD LT 2000\aclt.exe"
End Sub

投稿時間:2004/08/30(Mon) 21:19
投稿者名:simo
Eメール:
URL :
タイトル:
Re^6: shell関数のエラーがでる
> 下記でもだめでしょうか?
>
> Private Sub Command1_Click()
>     Dim WshShell As Object
>     Set WshShell = CreateObject("WScript.Shell")
>     WshShell.Run "C:\Program Files\ACAD LT 2000\aclt.exe"
> End Sub

ダメでした。それでもってMSGBOXを表示させる簡単なプログラムを作って、名前をaclt2.exe
としてみたのですが、そのところ上手く起動できました。どうやら魔界さんが仰ったCADの内部
的な問題みたいです。魔界さんのアドバイスを参考にレジストリ等もみてゆっくり挑戦しようか
と思っています。
また何か有りましたら花ちゃん、魔界さんよろしくお願いします。