@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Officeオートメーション:Word.Documents.Open()でエラー

1
投稿者投稿内容
ハカセ
会議室デビュー日: 2004/01/20
投稿数: 3
投稿日時: 2004-01-20 18:53
こんにちは。初めて投稿させていただきます。
VB.net初めて間もないので用語など不適切かもしれませんが、
おゆるしください。

現在、以下の環境でOfficeオートメーションを使い
WindowsアプリからWORDを制御するものを作っています。
VisualBasic.net Standard
Windows2000
Word2002

ある程度動くようになったので、
コンパイルした実行ファイルその他を
WindowsNT,Word2000の環境で実行したところ
WORDの文書を開く部分で
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
というエラーが起こってしまいます。

'ソース--------------------------------
Dim objWord As New Word.Application()
Dim strFileName as String = "c:\\test.doc"

Debug.Write(objWord.Version) ←ここは動くのに
objWord.Documents.Open(strFileName) ←このメソッドはエラー発生
'-------------------------------------

参照設定でWORDのプロパティをみると、
"説明:Microsoft Word 10.0 Object Library"
となっているので、実行先のWord2000(=Word9.0)では動かないのかと思いきや、
Open()以外の基本的なメソッド(Documents.Add()など)でエラーは起こりません。

なぜOpen()だけエラーになるのか・・・
どなたかアドバイスお願い致します。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-01-21 13:45
バージョンが違うのが問題でしょう。やっぱり。
バージョンが違うために、Wordのオブジェクトを
生成できない、という状況だと思います。

Open以外の部分が動作する、というのは参照設定の
ほうを変更して試してみたんですよね?
Documents.Add()とかはWord側が持っているメソッド
ですから、Word2000とWord2002で同じメソッドを
持っていれば動作して当然です。

このあたり、どのバージョンでも動くようにするには
レイトバインディングを利用するような形にプログラムを
変更する必要があると思います。

#サポート情報あたりに参考情報がのっていた気がする。
ハカセ
会議室デビュー日: 2004/01/20
投稿数: 3
投稿日時: 2004-01-21 16:28
小野様:
お教えいただいたようにレイトバインディングを調べて
以下ソースのように変更したところ、Word2002でも2000でも
正常に動くようになりました。
ありがとうございました。m(_ _)m

'ソース--------------------------------
Dim objWord = CreateObject("Word.Application")
Dim strFileName as String = "c:\\test.doc"

Debug.Write(objWord.Version)
objWord.Documents.Open(strFileName)
'--------------------------------------

ところで
>Open以外の部分が動作する、というのは参照設定の
>ほうを変更して試してみたんですよね?
いえ。Word2002の参照設定のままです。
この設定のままコンパイルして、Word2000環境で実行した結果
Openだけが動かなかったのです。
でもやはりどう考えてもVerの問題だと思うので、
逆にWord2000の参照設定(事前バインディング)を作成し
Word2002環境で実行してみようかと思います。

>サポート情報あたりに参考情報がのっていた気がする。
ここにありました。
http://support.microsoft.com/default.aspx?scid=kb;JA;304661
1

スキルアップ/キャリアアップ(JOB@IT)