• ベストアンサー

ShellExecuteでエクセルファイルが起動しません。

 今、API関数GetOpenFileNameで「ファイルを開く」コモンダイアログを出して、  そこから選んだファイルのフルパスをテキストボックスに入れています。  さらにそのテキストボックスの中に入ったフルパスをAPI関数ShellExecuteで起動  させようとしているのですが、起動してくれません。  ちゃんとフルパスは入っています。  試しに新しいフォームを作ってShellExecute単独で、直接フルパスを  指定してやってみたところ起動できました。  問題は、パスではなく他の引数でしょうか??  ちなみに第1引数   : me.hwnd      第2引数   : "open"      第3引数   : フルパス      第4・5引数 : vbNullString      第6引数   : SW_SHOW と指定しました。  第4と5の引数はvbNullCharや""と指定してみました。  よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

ShellExecuteの戻り値は?

参考URL:
http://www.vbvbvb.com/jp/gtips/0951/gShellExecuteSwShowNormalOpen.html
hemakozo
質問者

補足

 戻り値は2でした。  参考URLへ行ったんですが、2なので  ERROR_FILE_NOT_FOUNDってことですよね??  ShellExecuteのみではちゃんと起動するんです・・・。    まだ、そのURLのプログラムを動かしていないのでこれから  やってみます。  引き続きおつきあいお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#4564
noname#4564
回答No.4

[仮説その1] GetOpenFileName の処理で、文字列バッファからNull文字を取り除いていない。(Len関数で文字列長を検証可能) 修正例は、下記。 Dim lngRet As Long lngRet = InStr(ofn.lpstrFile, vbNullChar) Select Case lngRet Case 0 strFullPath = ofn.lpstrFile Case 1 strFullPath = "" Case Is > 1 strFullPath = Left$(ofn.lpstrFile, lngRet - 1) End Select [仮説その2] パスをダブルクォートで括っている。 ファイルのパスを扱うルーチンでは、スペースを含むパス、DOSの8.3形式を超える(いわゆるLongFileName)パスはダブルクォートで括るのが定石ですが、ShellExecute関数は例外で、ダブルクォートなしで動作します。 ※ ダブルクォートがあると、NT4.0環境で動作しません。(Win9x環境および、Win2000以上の環境では問題なし) いまどき、NT4.0でもないので、仮説(1)が有力だと思われます。

hemakozo
質問者

お礼

 詳しいご説明ありがとうございました☆  実は・・・自分で解決いたしました。  報告が遅くなってしまって、お手数をおかけしました。  やっぱり問題になっていたところはパスの指定の仕方でした。  変数の中にフルパスが入ってたんですが、パスの中ではなく、後ろの方に  スペースが入ってたようです。  trimして入れたんですが・・・。  

すると、全ての回答が全文表示されます。
  • 2ch
  • ベストアンサー率51% (64/125)
回答No.3

いや カレントドライブの変更したら、いけないかなぁー という希望的観測から、ChDriveと言ってみた

すると、全ての回答が全文表示されます。
  • 2ch
  • ベストアンサー率51% (64/125)
回答No.1

ChDriveとか?

hemakozo
質問者

補足

 ヘルプでChDriveを調べてみましたが、いまいち私の質問との関連性が  わかりません・・・。  申し訳ありませんが、詳しく説明していただけませんか?  よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A