/ タスクマネージャVB.netでExcel / Excelインスタンスが強制終了されない - excel、vb.net

タスクマネージャVB.netでExcelインスタンスが強制終了されない - excel、vb.net

タスクマネージャのExcelインスタンス(excel.exe)は、ボタンの実行が終了すると強制終了されません。

Private Sub Extract_Click(sender As Object, e As EventArgs) Handles Extract.Click
Dim xlApp As New Excel.Application
Dim wbXLsource As Excel.Workbook
Dim wbXLtarget As Excel.Workbook
Dim shXLsource As Excel.Worksheet
Dim shXLtarget As Excel.Worksheet
Dim datestart As Date = Date.Now
wbXLsource = xlApp.Workbooks.Open(xlSourcePath)
wbXLtarget = xlApp.Workbooks.Open(xlTargetPath)
Dim dateEnd As Date = Date.Now
End_Excel_App(datestart, dateEnd)
End Sub

Private Sub End_Excel_App(datestart As Date, dateEnd As Date)
Dim xlp() As Process = Process.GetProcessesByName("EXCEL")
For Each Process As Process In xlp
If Process.StartTime >= datestart And Process.StartTime <= dateEnd Then
Process.Kill()
Exit For
End If
Next
End Sub

私もガベージコレクタの概念を使用してみましたが、Excelインスタンスはアプリを閉じた後にのみ殺されています。ボタンの実行が終了したら、Excelインスタンス(excel.exe)を閉じる必要があります。

回答:

回答№1は0

このコードを使用してください。

For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL")
If proc.MainWindowTitle.Trim() = "" Then
proc.Kill()
End If
Next

そして、Try Catchエラーハンドラがある場合は...

Try

"stuff more stuff

Catch Ex as Exception

For Each Proc in System.......
......
Next
Finally
GC.Collect()
End Try

毎回動作します。


回答№2の場合は0

を呼び出してアプリケーションを閉じる xlApp.Quit() 閉じますが、メモリから削除されませんでした。

また、メモリを解放するためには、によって与えられたアドバイスに従うことができます Siddharth Rout "の素晴らしい答え

Private Sub ReleaseObject(ByVal obj As Object)
Try
Dim intRel As Integer = 0
Do
intRel = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
Loop While intRel > 0
MsgBox("Final Released obj # " & intRel)
Catch ex As Exception
MsgBox("Error releasing object" & ex.ToString)
obj = Nothing
Finally
GC.Collect()
End Try
End Sub