2013-08-29 674 views
2

在執行一些長時間運行的VBA代碼時(偶爾運行24小時/天),有時會出現excel死機或崩潰的情況,而且我正在研究以編程方式處理excel重新啓動的方法。任何建議最好的方式去這個將不勝感激。如何自動強行關閉excel,然後重新啓動?

我的一個想法是編寫一個dotnet應用程序,可能是由例如'Event Name:APPCRASH'和'Faulting application EXCEL.EXE'等Windows日誌記錄錯誤事件觸發的,但我不知道如果這是可行的/明智的方式去解決它。

如果碰巧是一個明智的方法,我會設想應用程序可能執行以下任務;

1)自動關閉/取消任何窗口錯誤彈出框,如「您想發送有關該問題的更多信息嗎?」,「Microsoft Excel已停止工作」或「Microsoft Excel正試圖恢復您的信息。 「

2)力,如果仍然打開(例如,如果掛關閉Excel),以及殺死任何EXCEL.EXE處理

3)重新啓動Excel

是可以寫的dotnet這樣的應用程序?我應該尋找哪些參考/標籤以查找更多信息?

感謝, YUG

回答

3

一些挖後,我拼湊以下解決方案。下面的vbs代碼將強制taskkill任何優秀的excel.exe進程,然後打開指定的excel文件(從中可以從worksheet_open事件中自動重啓vba代碼)。

1)關閉Windows錯誤報告: 開始,搜索「問題報告和解決方案」,更改設置,高級設置,關閉問題報告

2)爲Excel禁用自動恢復:在 內WB問題,點擊;文件,選項,保存,禁用文件恢復此WB僅

3)在Windows事件查看器,應用程序日誌,突出顯示錯誤(錯誤Excel應用程序),右鍵單擊'創建一個基本任務',運行應用程序/腳本,並在4)中輸入所選文件的名稱。

4)將以下代碼粘貼到文本文件,然後保存爲一個VBScript文件(.VBS)

Option Explicit 

KillProcesses 
ExcelRestart 

Sub ExcelRestart()  
    Dim xlApp 
    Dim xlBook 
    Set xlApp = CreateObject("Excel.Application") 
    xlApp.DisplayAlerts = False 
    Set xlBook = xlApp.Workbooks.Open("C:\...\test.xlsx") 
    xlApp.visible = True 
    xlBook.activate 
    Set xlBook = Nothing 
    Set xlApp = Nothing 
End sub 

Sub KillProcesses 
    On error resume next 
    Dim objWMIService, WshShell 
    Dim proc, procList 
    Dim strComputer, strCommand 
    strCommand = "taskkill /F /IM excel.exe" 
    strComputer = "." 
    Set WshShell = WScript.CreateObject("WScript.Shell") 
    Set objWMIService = GetObject("winmgmts:"& "{impersonationLevel=impersonate}!\\"& strComputer & "\root\cimv2") 
    Set procList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'excel.exe'") 
    For Each proc In procList 
     WshShell.run strCommand, 0, TRUE 
    Next 

End sub 
+0

感謝提'Workbook.EnableAutoRecover = FALSE;' –

+0

這是在問題的好刺。但是,此方法會丟失通常在Excel啓動時加載的任何自定義插件。 – Robino

相關問題