我有一个应用程序首先创建一个不可见的应用程序:
Dim ExcelApp As Object
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = False
ExcelApp.ScreenUpdating = False
ExcelApp.DisplayAlerts = False
ExcelApp.EnableEvents = False
然后继续用它来无形地打开文件:
Do While fileTitle <> ""
Dim dataWorkbook As Workbook
Set dataWorkbook = ExcelApp.Application.Workbooks.Open(folderPath & fileTitle)
在使用文件宏的操作结束时,将关闭文件:
dataWorkbook.Close
fileTitle = Dir()
Loop
在子宏的末尾关闭应用程序:
ExcelApp.Quit
Set ExcelApp = Nothing
End Sub
但是,如果在文件关闭之前发生错误,则不会关闭不可见文件和应用程序,并且将继续在操作系统中停留,不仅会占用内存和资源,还会阻止执行任何操作打开的文件 - 重命名,打开或编辑它。
我想知道是否有办法在发生错误时关闭文件和应用程序 - 在当前的宏中或者创建一个单独的宏来检测不可见的应用程序,没有变量指向并关闭它。
答案 0 :(得分:5)
在程序的顶部使用错误处理程序,如
Set ExcelApp = CreateObject("Excel.Application")
On Error Goto CLOSE_FILE_ON_ERROR
'With that line you tell VBA to jump to the closing part if an error happens
并在关闭文件之前使用此goto标记。
CLOSE_FILE_ON_ERROR:
ExcelApp.Quit
End Sub
注意:您不需要Set ExcelApp = Nothing
,因为Excel会在End Sub
上自动执行此操作。
如果您需要显示错误消息或其他内容,那么您的代码必须像这样扩展:
ExcelApp.Quit 'This is needed to regularly quit if there is no error
Exit Sub 'Don't run into error handling if there was no exeption
CLOSE_FILE_ON_ERROR:
Application.StatusBar = "Error occured"
ExcelApp.Quit 'This is needed to quit after an exeption if there is an error
End Sub
答案 1 :(得分:4)
您可以尝试使用以下代码来杀死Excel,Chrome和Internet Explorer等应用程序。您可以将以下代码与On Error Goto
错误处理程序一起使用。
Public Function fnkilltask()
Dim objWMIService
Dim colProcessList
Dim objProcess
Dim strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts://./root/cimv2") ' Task mgr
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name in ('EXCEL.EXE','Chrome.exe','iexplore.exe') ")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
End Function