VB6からワードを編集するアプリケーションを使用しております。
先日より開発環境のPCをXP + Word2003からVista + Word2007に変更したところ、開発環境のPCでは従来通り作動するものの、クライアントのXP + Word2003の環境で、ワードが起動に失敗するようになりました。
調査したところ、
Set wdDoc = wdApp.Documents.Open(CommonDialog1.FileName)
の部分でエラーが発生していることがわかりましたが、今まで動いていたアプリですので、原因は開発環境にあると思うのですが、どこをチェックすればいいのか、ご存知の方いらっしゃいますでしょうか?
よろしくお願いいたします。
開発環境を再整備して、Word 2003 に差し戻すことを強くお勧めします。
Office のライブラリは、下位バージョンに対するバイナリ互換性がありません。
ですから、開発環境と実行環境のOfficeバージョンは一致させるのが原則です。
今回のように、上位バージョンのライブラリで作成したものを下位バージョンで動作させるのは、かなり難易度が上がります。
バージョンが上がると、メソッドに「省略可能な引数が追加」されていたり、SubメソッドがFunctionメソッドに拡張されるなどの変化があります。こうした違いは、VBA のコードや、レイトバインドのコードに対してはほとんど影響を与えませんが、参照設定してアーリーバインディングするような場合には正しく動作しなくなってしまいます。各バージョンのライブラリの違いを調査し、互換性を保つようなコードを書ける自信が無いのであれば、Word 2003 環境で参照設定とコンパイルをやり直した方が良いでしょう。
早速に回答をいただきましてありがとうございます。
そのような問題があるとは考えておりませんでした。勉強になりました。とりあえず、Word2003の環境を整備してコンパイルしようと思います。
ありがとうございました。
>そのような問題があるとは考えておりませんでした。
確認項目の「漏れ」がこれだけであることを期待します。
> 各バージョンのライブラリの違いを調査し
調べてみました。
手元に Word 97/2000/2003 が無く、Word 98/2002/2007 のみの比較ですが、
《Word 2007 の Documents.Open》
・メソッド名="Open" , DispId=19, 引数=16個, 戻り値=あり
・メソッド名="Open2002", DispId=18, 引数=15個, 戻り値=あり, 不可視属性
・メソッド名="Open2000", DispId=15, 引数=12個, 戻り値=あり, 不可視属性
・メソッド名="OpenOld" , DispId=12, 引数=10個, 戻り値=あり, 不可視属性
《Word 2002 の Documents.Open》
・メソッド名="Open" , DispId=18, 引数=15個, 戻り値=あり
・メソッド名="Open2000", DispId=15, 引数=12個, 戻り値=あり, 不可視属性
・メソッド名="OpenOld" , DispId=12, 引数=10個, 戻り値=あり, 不可視属性
《Word 98 の Documents.Open》
・メソッド名="Open" , DispId=12, 引数=10個, 戻り値=あり
という結果になっていました。
ですから今回の場合(Word 2007 のライブラリを利用)、問題になっている
> Set wdDoc = wdApp.Documents.Open(CommonDialog1.FileName)
の部分のみに関して言えば、
Set wdDoc = wdApp.Documents.Open2002(CommonDialog1.FileName)
に変更することで、Word 2002/2003/2007 の環境でも動作する可能性があります。
御連絡が遅くなりました。
開発環境を元に戻すことで、とりあえず対処できました。
またOpenメソッド詳細を調べて頂きましてありがとうございます。
Vista+2007の環境で、調べて頂いた Open2002、Open2000、OpenOld を試みてみましたが、残念ながらうまくはゆきませんでした。報告まで。
いろいろありがとうございました。
ツイート | ![]() |