環境:WindowsXP VB6.0(SP6)
VBで作ったアプリケーションで、既存のエクセルファイルを開こうとしています。
次のようにプログラムを書きました。
Dim appXLS As Excel.Application
Dim appXBK As Excel.Workbook
Dim path As String
path = "エクセルファイルのパス名"
Set appXLS = CreateObject("Excel.Application")
Set appXBK = appXLS.Workbooks.Open(path) '←エラー
appXLS.Visible = True
エクセルファイルのパス名は、
イントラネット内のサーバに置いてあるエクセルです。
上のプログラムで、ファイルによって開くファイルと、
開かないファイルがあるのです。
開かないファイルは「'←エラー」の部分でエラーが起こります。
エラー内容は、「実行エラー1004 ファイルが見つかりません」とのことです。
何度も見直しましたが、パス名に間違いはございません。
VBで作成したアプリで開かなかったファイルを、
Excelで開くことはできました。
以上の内容で考えられる原因は何かわかりますでしょうか?
わかる方、どうかお願いします。
追加報告です。
イントラネット内には、サーバが2つありまして、
サーバAのエクセルファイルは開き、
サーバBのエクセルファイルが開かないようです・・・。
サーバに対する権限の問題なのでしょうか?
サーバBのエクセルファイルはExcelですと普通に開くのですが・・・。
うーん。どうだろう(悩)。とりあえず ping でのレスポンスは
サーバAとBでどのくらい違いますか?
>特攻隊長まるるうさん
書き込みありがとうございます。
>ping でのレスポンス
サーバAは127msec、サーバBは128msecでした。
>path = "エクセルファイルのパス名"
この、"エクセルファイルのパス名"は、サーバBからのフルパスですか?
もし、該当ファイルのあるフォルダをネットワークドライブに設定しているのならば、
パス名をサーバBのフルパスから書いてみるというのはどうでしょうか?(まぁ関係ないかもしれないですけど)
>molさん
書き込みありがとうございます。
サーバAのパスもサーバBのパスもフルパスで書いております。
レス付かないね。(^^;)
…結構めんどうな質問だと思います。
>サーバに対する権限の問題なのでしょうか?
この辺りはネットワーク管理者に聞くべき事で
ここで質問してもどうにもならない場合が多い…
>何度も見直しましたが、パス名に間違いはございません。
前の質問見てるから
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200508/05080020.txt
…まぁ、間違いはないと思うけど、
・パス名に日本語やスペースや半角かななどを含んでいて誤動作している。
・パス名が長すぎて認識できなくなっている。
なんて事があるかもしれない。もう一度確認テストしてみて?。
>サーバAは127msec、サーバBは128msecでした。
ちょっと遅い気がするので一番ありがちなのはエクセルが
ファイル起動時の応答待ちでタイムアウトしてファイルが
無いと思っちゃってる可能性だけど…2つのサーバでそれほど
応答速度が違わないなら原因不明。
>サーバBのエクセルファイルはExcelですと普通に開くのですが・・・。
それはあまり参考にならない。…何故か?ってゆーとファイルを
開く時点でエクスプローラでファイルを見てるよね?
つまりエクスプローラでパスが通ってるから時間が掛からず
制限もなく開けて不思議じゃないです。ただ、プログラム起動
の時もネットワークドライブを使ってるなら同じ気もする
…原因不明。
あと、エクセル含め Office アプリケーションってのは、
クライアントでの動作を前提にしてる裏設定が多いから、
サーバのファイルを操作するのに強くないかも。アウトルック
からファイルを開く時も一度ローカルコピーして開いてるしね。
とりあえず、エクセルの問題か?もうちょっと追求するために
Workbooks.Open するんじゃなくて FileSystemObject
あたりで1つのファイルとしてサーバのファイルをローカルコピー
して結果を教えて下さい。
あと、エクスプローラでサーバBのフォルダを開いた直後に
プログラムからWorkbooks.Open してみても結果は
同じですか?。そして、毎回サーバBだけ成功しないですか?
サーバAとBで違う点でなにか気になる事はありませんか?
サーバのOSのバージョンも公開して欲しいです。
>特攻隊長まるるうさん
いつも書き込みありがとうございます。
>レス付かないね。(^^;)
>…結構めんどうな質問だと思います。
すぐにレスがつけられず、申し訳ありません・・・!
molさんが書き込んで下さってから、3日経ってますよね・・・。
molさんも本当にすいません・・・。
特攻隊長まるるうさん、いろいろ考えて下さってありがとうございます。
特攻隊長まるるうさんの書き込みをヒントに
もう一度自分の力でやってみようと思いました。
>Workbooks.Open するんじゃなくて FileSystemObject
>あたりで1つのファイルとしてサーバのファイルをローカルコピー
>して結果を教えて下さい。
>あと、エクスプローラでサーバBのフォルダを開いた直後に
>プログラムからWorkbooks.Open してみても結果は
>同じですか?。そして、毎回サーバBだけ成功しないですか?
>サーバAとBで違う点でなにか気になる事はありませんか?
>サーバのOSのバージョンも公開して欲しいです。
もう一度パス名確認、コード確認、テスト確認を行い、
上記の確認を行ってみます。
結果報告はもうしばらくお待ち下さい。
>すぐにレスがつけられず、申し訳ありません・・・!
>molさんが書き込んで下さってから、3日経ってますよね・・・。
いや(汗)、ボクが言ってるのは回答者のレスw『回答付かないね』
って書いた方が良かったねm(__)m
ま、質問者がすぐにレス付けようと思ってるのは好印象です。ただ、
オイラは個人的に思うのは、回答に対してテスト・調査・勉強しようと
思ったらレス付けるのに時間が掛かる場合もある…と。時間が
掛かっても続けてくれるなら全然うれしいです。
>結果報告はもうしばらくお待ち下さい。
の書き込みは良いですね(^^)
>特攻隊長まるるうさん
長らくお待たせしました。
>いや(汗)、ボクが言ってるのは回答者のレスw『回答付かないね』
>って書いた方が良かったねm(__)m
勘違いしてしまい、大変申し訳ありませんでした!
おかしな質問ですし、それに回答者の皆様が
このような環境を試しにつくれるほど容易なことでもないですしね・・・。
厄介な質問をしてすいませんです・・・。
あれから、もう一度真っ白にして、1からコードを書き直しました。
付け加えたり変更したりと、様々に変更させたプログラムでしたから、
かなりごちゃごちゃとしたコードとなってしまっておりましたので・・・。
そして、新しくできあがったコードで、
サーバA、Bのエクセルファイルを両方開くことができるようになりました。
一体何が原因だったのか、結局よくわからなかったのですが、
コードを書き換えて無事解決したということは、どこかのコードが
おかしかったのかもしれません。
パス名の取得がきちんとできていなかったのかな・・・と自分では思っています。
とりあえず、今後の教訓として、
・見やすくわかりやすいコードを書く
・テストは様々な状況を想定して行う
ことを心がけていきたいと思います。
特攻隊長まるるうさん、molさん、この書き込みを見て下さった皆さん、本当にお世話になりました。
いずれは私も回答者側となって、質問に答えられるような人になりたいと思います。
本当に本当にありがとうございました。
ツイート | ![]() |