|
分類:[VB.NET/VB2005 以降]
言語:VB 2008
環境:Windows 7・Word 2010
お世話に成ります。
今、VBでWordファイルを読み込み、Word上で加工して保存するようなプログラムを作っていますが、
プログラム実行前にWordファイルが開かれている場合、以下の条件で、元々開いていたWordファイルが
タスクバーから復帰できなくなり、このウィンドウを開くことができなくなります。
1.任意のWordファイルをWord 2010で開く
2.開いたWordのウィンドウを最小化(タスクバーに格納)する。
(複数のWordファイルを開いている場合はすべて最小化する)
3.『特許ストーリー』で任意のWordファイルの読込を行う。
→現象発生
(開いたWordファイルの内、1つだけウィンドウを開くことができなくなる)
以下にソースサンプルを載せますが、何かコード上問題となる個所はございますでしょうか?
今回のケースでは元々Wordファイルを開いているので、GetObject(, "Word.Application")が行われます。
また、Wordでの処理時にWord画面がチラチラするのが嫌なので、oWord.Visible = False(非表示)としていますが、
Wordを非表示にしなければ今回の問題は発生しません。
なお、この現象が発生したのはWindows 7&Word 2010のPCでした。
Windows Vista&Word 2007では問題が発生しませんでしたが、Windows 7&Word 2007の組み合わせでは
この現象が発生するものとしないものがありました。
(そういう意味では、OSとWordのバージョンに依存するとは限らないかもしれません。)
Try
Try
oWord = GetObject(, "Word.Application")
Catch ex As Exception
oWord = CreateObject("Word.Application")
IsNew = True
End Try
oWord.DisplayAlerts = False
oWord.Visible = False
oWordDocs = oWord.Documents
oWordDoc = oWordDocs.Open(対象のWordファイル)
'処理色々(以下略)
Finally
If Not oWord Is Nothing Then
'処理で使用したComオブジェクトを解放(以下略)
If Not oWordDoc Is Nothing Then
Try
oWordDoc.Close(False)
Catch ex As Exception
'何もしない
End Try
End If
oWord.DisplayAlerts = True
If IsNew Then
oWord.Quit()
Else
oWord.Visible = True
End If
MRComObject(oWordDoc) 'Marshal.FinalReleaseComObjectを呼んでいるメソッド(以下同様)
MRComObject(oWordDocs)
MRComObject(oWord)
End If
End Try
以上、宜しくお願い申し上げます。
|