トップ回答者
VB2010からWord2010を開き、処理後削除しようとすると「別のプロセスで使用されているため、プロセスはファイル○○○にアクセスできません」となる。

質問
-
いつもお世話になっています。
VB2010からWORD2010ファイルのコピーを作業ファイルとして、開き、処理終了後
削除したいのですが、標記の例外が出て困っています。
WinWord.EXEと同期をすることは出来ないのでしょうか?
ちなみにWord文書は最大250ファイルほどあります。
<例外の出るプログラム>
Imports Word = Microsoft.Office.Interop.Word Imports System.Windows.Forms Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim wdApp As Word.Application Dim wdDoc As Word.Document '作業ファイルを作成する。 Dim workoutf As String = "c:\test\testx.docx" Dim inf As String = "c:\test\test.docx" '旧ファイルを削除、元ファイルをコピー System.IO.File.Delete(workoutf) System.IO.File.Copy("c:\test\test.docx", workoutf, True) 'WORDを開く wdApp = CreateObject("Word.Application") wdDoc = wdApp.Documents.Open(workoutf) wdApp.Visible = False '記号を削除する。 With wdApp.Selection.Find .ClearFormatting() .Text = "☆" With .Replacement .ClearFormatting() .Text = "" End With .Execute(Replace:=Word.WdReplace.wdReplaceAll) End With With wdApp.Selection.Find .ClearFormatting() .Text = "★" With .Replacement .ClearFormatting() .Text = "" End With .Execute(Replace:=Word.WdReplace.wdReplaceAll) End With 'その他の処理(省略) 'ファイルを閉じて、削除 wdApp.Quit(SaveChanges:=True) wdDoc = Nothing System.IO.File.Delete(workoutf) '<--ここで例外が発生 End Sub End Class
回答
-
以下のコードで、COMの参照カウントを解放してみて下さい。
Imports System.Runtime.InteropServices ・ ・ ・ Marshal.ReleaseComObject(wdDoc) Marshal.ReleaseComObject(wdApp)
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク MitsuoTAKEI 2013年10月9日 7:58
すべての返信
-
以下のコードで、COMの参照カウントを解放してみて下さい。
Imports System.Runtime.InteropServices ・ ・ ・ Marshal.ReleaseComObject(wdDoc) Marshal.ReleaseComObject(wdApp)
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク MitsuoTAKEI 2013年10月9日 7:58
-
尚、WinWord.EXEがCOMを解放するまでAPは待たされること
になるのでしょうか?
ご質問の意味がはっきりわからなかったのですが、こういうことでしょうか?★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/