環境XP
.net2002
officeXP
先日は色々とお手数をかけ、アドバイスを戴き有難うございました。
再び、投稿になりすみません。
お陰さまで無事、最終ビルドに辿りつきました。
が、ここに来て出来上がった.EXEファイルを他のOSがXPのoffice2003パソコン(VB.net2002はインストールされていない)で使おうとする際、
エクセルを開いて書き込むようなコマンドボタンを作っているんですが、
そのボタンをクリックすると、、
「・・・・・・アセンブリ名interop Excelまたはその依存関係のファイルが見つかりません」
などと、エラーのダイアログが出てしまいます。
microsoft Excel 10.0object libraryを参照設定しております。
ちなみにVB.net2002をインストールしている自分のパソコンでは、エラーも出ずに正確に動作します。
一応ネット上を色々調べたつもりですが、なかなか同じ環境でのこのエラーが見つからずに困っています。
お忙しい中、誠にすいません、どうか宜しくお願いします。
実行環境の Excel バージョンは何ですか?
OfficeXP(Excel 2002) を参照設定して作成されたコードを実行するには、
実行環境にも、同じバージョン(Excel 2002) がインストールされていなければなりません。
Excel がインストールされていなかった場合は、Excel の機能を呼び出す事はできません。
また、Excel が入っていても、そのバージョンが異なっていた場合には、
バージョン依存のメソッド等を使った場合に、問題が生じる可能性があります。
(特に、実行環境の方が古いバージョンの Excel を使っていた場合)
もう一つ。参照設定に PIA を用いている場合には、実行環境の
グローバル アセンブリ キャッシュにも、その PIA が存在している
必要があります。
Office XP の PIA については、下記を参照してみてください。
http://support.microsoft.com/kb/328912/ja
魔界の仮面弁士さん、早々なるご返答ご教授に感謝します。
エラーの出る実行環境には、Excel 2003が入っています。
が、プログラミングに使っている手元のパソコン(OSがXP,OfficeXP(Excel 2002))に、ご紹介戴いたPIAのサイトに行き、訳もわからず取りあえずインストールの実行をしてしまいました。
すると、手元のパソコンでも、その作った.EXEファイルを実行すると下記のように他のパソコンと同様に、全く同じエラーが出るようになってしまいました。
「ファイルまたはアセンブリ名 Interop.Excel、またはその依存関係の1つがみつかりませんでした。」
との内容です。
これにより原因はそこにあると確信しましたが対処法がなかなか見つかりません。
一応、VB2002をインストールし直したりしてもダメで、2週間前の状態に戻そうとシステムの復元をしようとすると、システムが変更になっていません、、出ました。
ちなみに、binフォルダにある.EXEファイル??は、そのフォルダを移動しなければプログラミングに使っているパソコン内でエラーは出ません。
が、フォルダから出すと、やはりこれも同じエラーが出ます。
エラーダイアログの中にある、詳細のボタンをクリックすると、一番下の方には、また下記の内容が出てきましたが、・・・
その内容とは・・・
************** JIT デバッグ **************
Just-In-Time (JIT) デバッグを有効にするには、
このアプリケーション、またはコンピュータ (machine.config) の構成ファイルの
jitDebugging 値を system.windows.forms セクションで設定しなければなりません。
アプリケーションはまた、デバッグを
有効にしてコンパイルされなければなりません。
例 :
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
JIT デバッグが有効なときは、このダイアログで処理するよりも、ハンドルされていない例外はすべて
コンピュータに登録された JIT デバッガに設定されなければなりません。
と出ています。どこでどうすればいいんでしょうか?
ほんっと、全くの素人で混乱させて申し訳ないです。どうもすみません。
こんなんですが何かヒントになるような事があれば、少しでもいいので、是非宜しくお願いします。
とりあえず、報告ですが
binフォルダの中の.EXEだけ動くので、そのbinフォルダにある、
Interop.Microsoft.Office.Core.dll
Interop.DAO.dll
Interop.VBIDE.dll
Interop.Excel.dll
この4つのファイルをコピーして、Releaseフォルダに入れて
その中に出来ている.EXEファイルを実行すると、これもエラーなく動作しました。
ビルドがうまく行ってないんでしょうか??
ちょっとまた調べてみますが、お気づきの事が何か少しでもあれば、ご多忙のところ本当に恐れ入りますがまたご教授お願いします。
2002を使ったことが無く、全くの的外れかもしれませんが。
ビルドするとReleaseフォルダの中に出来る.ExEファイルのみの移動でしょうか?
同時に出来る中間ファイル.pdbファイルや.XMLも.EXEファイルと一緒に目的の場所へコピーするとどうでしょう。
また、VB内で一度もデバッグをかけずにビルドしていますか?
1度デバッグをし、その後ビルドされてみてはどうでしょう。
ペンさん
有難うございます。
既にReleaseフォルダにある.EXEではエラーが出ます。
デバッグもビルドも何度もやり直しましたが無理でした。
Office 2003 用の PIA はこちら。
http://msdn.microsoft.com/ja-jp/library/aa159923.aspx
なお、一つの EXE で複数バージョンに対応させる事は避けてください。
たとえば、Excel 2003 対応の EXE を作りたいのであれば、
Ofiice 2003 + VB.NET の環境でコンパイルするようにし、
そして、Excel 2002 対応の EXE を作りたいのであれば、
Office XP + VB.NET の環境でコンパイルするという事です。
もし、どうしても複数のバージョンに対応させたいのであれば、
参照設定せず、レイトバインドで実装することを検討してみてください。
ただしその場合には、各バージョンごとの引数定義の違いなどを
把握していなければなりませんし、解放処理の手間も増える事になります。
魔界の仮面弁士さん
色々とお手数をかけてしまい申し訳ございません。
とりあえず、仰る様に、レイトバインドで実装してみたところ問題なく一応は動作しました。これでいってみようかと思います。
ただ引数の定義などはほぼ皆無ですが。
やはり、実行環境を同じ環境でプログラミングが基本ですね。
反省します。
今のOSをいったん入れ替えて時間を見つけてまた頑張ってみます。
色々とご教授戴き、本当に有難うございました、感謝します。