【发布时间】:2012-03-03 22:00:36
【问题描述】:
我希望有人可以帮我看看并整理一下;我不得不说错误处理不是我的强项。我有下面的代码块,我一直在玩一些错误句柄,但这并不是我真正想要的。
我要做的是确保如果在任何时候出现错误,我打开的工作簿和 excel 实例都会正常关闭。
我确信有比我想出的更好、更简单的方法来实现这一点。
Sub QOScode()
On Error GoTo Fail
Dim app As New Excel.Application
app.Visible = False 'Visible is False by default, so this isn't necessary
Dim book As Excel.Workbook
Set book = app.Workbooks.Add(ActiveWorkbook.Path & "\QOS DGL stuff.xlsx")
'set up error handeling so if any thing happens the instance of excel with QOS sheets is closed gracefully
On Error GoTo Closebook
' MsgBox book.Sheets("ACLS").Cells(3, 3)
'Do what you have to do
'
Closebook:
On Error Resume Next
book.Close SaveChanges:=False
app.Quit
Set app = Nothing
On Error GoTo 0
Fail:
End Sub
我想要的是一个单一的 On 错误 - 关闭应用程序并退出子程序。
任何人都可以提供一个示例,说明执行此操作的最佳做法是什么?
干杯
亚伦
所以下面这段代码,当工作表不存在时会报错,为什么不跳过“book.close”语句,我知道这会报错,但我希望它忽略它?
Sub QOScode()
On Error GoTo Closebook
Dim app As New Excel.Application
app.Visible = False
Dim book As Excel.Workbook
Set book = app.Workbooks.Add(ActiveWorkbook.Path & "\QOaS DGL stuff.xlsx") 'this sheet does not exist
'
MsgBox book.Sheets("ACLS").Cells(3, 3)
'Do what you have to do
'
Closebook:
Err.Clear
On Error Resume Next
book.Close SaveChanges:=False 'Object variable or with block variable not set (error 91)
app.Quit
Set app = Nothing
On Error GoTo 0
End Sub
【问题讨论】:
-
那么,您当前的代码到底有什么问题?你希望什么不会发生?
-
好吧,没什么 :) 当然,除非出于某种原因,一个错误过早地关闭了工作簿,然后调用了“on error GOTO Closebook”。即使使用“GOTO next”语句,它仍然会在 book.close SaveChanges:=False 上退出,并出现对象不存在的错误。有没有办法检查“书”是否存在,所以我可以做“如果书存在,那么 book.close”
-
但是
On Error Goto Next将使它进入下一个语句,即app.Quit,此时一切都如你所愿...... -
对不起,我的意思是在我当前的代码中输入“on error resume Next”,如果由于任何原因应用程序或工作簿意外关闭(没有它们的实例)。 “book.close”行中的代码错误我预计“继续下一个”它会跳过该行。我认为可能是 err.clear 可能是我需要的。
标签: vba error-handling excel