错误

时间:2017-08-16 12:45:13

标签: vba excel-vba excel

我有一个应用程序首先创建一个不可见的应用程序:

        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

但是,如果在文件关闭之前发生错误,则不会关闭不可见文件和应用程序,并且将继续在操作系统中停留,不仅会占用内存和资源,还会阻止执行任何操作打开的文件 - 重命名,打开或编辑它。

我想知道是否有办法在发生错误时关闭文件和应用程序 - 在当前的宏中或者创建一个单独的宏来检测不可见的应用程序,没有变量指向并关闭它。

2 个答案:

答案 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