2016-12-12 30 views
0

私のvb.netアプリケーションでExcelに抽出を作成しました。私はそれにデータを書いて保存し、それを開くかどうかをユーザーに尋ねます。問題は、それらが表示されないように選択した場合、正常に終了し、プロセス内で実行されていないことです.-それをExcelで表示して閉じても、WTMプロセスで実行されています。これは...私のコードですExcelの開閉インスタンス - プロセスはまだバックグラウンドで実行中です

Dim FileNam As String = "C:\Me\" & ReportName & Format(DateTime.Now, "yyyyMMddhhmmtt") & ".xlsx" 

If System.IO.File.Exists(FileNam) Then 
    System.IO.File.Delete(FileNam) 
End If 
wBook.SaveAs(FileNam) 
answer = MsgBox("Your extract has been saved here: " & strFileName & vbCrLf & vbCrLf & 
         "Would you like to view the file?",vbYesNo) 

If answer = vbYes Then 
    System.Diagnostics.Process.Start(FileNam) 
End If 

編集:私は、これはすべてのTRYのCATCHステートメント内で追加される場合があります - プロセスを強制終了

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

... ガベージコレクションを含むが、良いアイデアではありませんすることができます!またはプロセスを手動で終了する – BobSki

答えて

1

が良くない...これが最後の部分であります多くの理由でアイデアは、それらの1つは、あなたが手動で開いているエクセルのインスタンスも殺すとあなたはあなたの変更を失うことです。このようにしたい場合は、PIDでプロセスを終了し、アプリケーションを起動するときに既存のプロセスを保存します。

それとも....などエクセル、ワード、などの近くにオフィスオートメーションアプリケーションについては、

..あなたがそのようなことしてみてください。.. COMオブジェクトを配置する必要があります。

oApp.ActiveWorkbook.Close(True) 
Application.DoEvents() 
oApp.Quit() 

System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oApp) 
oApp = Nothing 

をもちろんoAppはオフィスApplicationです。

また、プロセスを取り除く唯一のことは、アプリケーションを閉鎖さ

GC.Collect() 'Start .NET CLR Garbage Collection 
GC.WaitForPendingFinalizers() 'Wait for GC to finish 
+0

しかし、それは私のアプリケーションに結び付けられたこのプロセスのようです。私がそれを見てExcelのアプリを開いていない場合 - それはいいです。それを見たときにプロセス内で実行されたままです。その後、私のアプリケーションを閉じると、プロセスからはExcelが消えます。 – BobSki

+1

次に、あなたのExcelを表示するために使用するコードの後に​​、プロセスを閉じる必要があります。関数を記述し、必要なときにいつでも呼び出すことができます。 ;) – Tyler

関連する問題