【问题标题】:VBA: How to close Excel.Application after a crashVBA:崩溃后如何关闭 Excel.Application
【发布时间】:2023-03-29 04:45:01
【问题描述】:

我的 Word 宏使用此代码打开和访问 Excel 工作簿:

Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook

Set exWb = objExcel.Workbooks.Open("C:\Folder\Filename.xls")   

 ' Main procedure

exWb.Close
Set exWb = Nothing

objExcel.Quit
Set objExcel = Nothing

由于我仍在调试,宏经常在到达关闭和退出命令之前停止,留下一个 Excel 实例和工作簿在后台打开。

我有时可以通过打开任务管理器并结束任务来关闭它们,但我怀疑这是最好的解决方案。我可以在 Word 中编写一个宏来关闭所有打开的工作簿并退出所有(后台)Excel 实例吗?

【问题讨论】:

  • 它停止是因为您要停止它还是因为出现错误?如果后者则使用 On Error resume next(或转到
  • 您可以使用 GetObject() 附加到打开的 Excel 实例并清理它们。但是,如果有多个实例,这可能会很棘手 - 无法告诉 GetObject 返回哪个实例...
  • Sorceri:在我看到你的答案前几分钟我就想到了这种预防方法,但无论如何我都会支持你!
  • Tim:我不熟悉 GetObject。你能告诉我怎么做吗?
  • 如果您的 VB 代码由于未处理的异常而退出,那么所有变量都将被清除,因此您无法在这种情况下存储工作簿名称。最好的办法是按照 ASH 的说明进行操作,并使用错误处理来确保在出现问题时可以恢复。

标签: excel vba ms-word


【解决方案1】:

以下是处理此类异常的传统方式:

Sub MySub()
    Dim objExcel As Excel.Application, exWb As Excel.Workbook
    On Error GoTo Cleanup

    Set objExcel = New Excel.Application
    Set exWb = objExcel.Workbooks.Open("C:\Folder\Filename.xls")

    ' Main procedure

Cleanup:
    If Err.number <> 0 Then MsgBox "Error " & Err.number & ": " & Err.Description
    If Not exWb Is Nothing Then exWb.Close False
    If Not objExcel Is Nothing Then objExcel.Quit
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多