掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
タスクマネージャにExcelプロセスが残ってしまう (ID:148169)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
shu さん、ありがとうございます。 説明の為ソースを少し変更しました。 下記を参照願います。 説明不足で申し訳ありませんでした。 > 【エラー内容】System.Runtime.InteropServices.COMException は、下記ソース※Aで発生します。 ですので、WBは Nothing のままです。 よって Finally句での※Bでは False と判定されて※Cは実行されません。 是非とも引き続きアドバイスをお願い致します。 と、ここまで書いて「逆に※Dを実行した際、Sub MRComObject で※EによりExcelプロセスが残ってしまうのではないか」と 思いました。 ※Aでエラーになる為 WB は Nothing のままだが、Excelプロセスはセットされている、ということはありますでしょうか? ※EをREM文にすると※Fで「System.ArgumentNullException」が発生しますので外せません。 もし、そうならどうすれば良いでしょうか? Public Sub foo() Dim WBFullPath As String = "c:\hoge.mht" 'Wordで作成した.mhtファイル Try XL = New XLS.Application WBs = XL.Workbooks WB = WBs.Open(Filename:=WBFullPath) '※A WB.Close(SaveChanges:=False) Me.MRComObject(WB) Catch ex As Exception MessageBox.Show(ex.Message) Finally Try If Not IsNothing(WB) Then '※B WB.Close(SaveChanges:=False) '※C End If Catch ex As Exception '念の為の Catchブロック End Try Me.MRComObject(WB)'※D Me.MRComObject(WBs) XL.Quit() Me.MRComObject(XL) End Try MessageBox.Show("Complete") End Sub Private Sub MRComObject(Of T As Class)(ByRef objCom As T) 'http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=319 を参考にしました。 If objCom Is Nothing Then Return '※E Try If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then '※F Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) '.FinalReleaseComObject(でも同じ) If count <> 0 Then Try MessageBox.Show(TypeName(objCom) & " 要調査! デクリメントされていません。") Catch ex As Exception MessageBox.Show("Catch発生 要調査! デクリメントされていません。") End Try End If Else MessageBox.Show("ComObject ではありませんので、解放処理の必要はありません。") End If Catch ex As Exception MessageBox.Show(ex.Message) Finally objCom = Nothing End Try End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.