【发布时间】:2016-05-12 21:41:12
【问题描述】:
我似乎遇到了一个以前没有遇到过的独特问题,无法通过谷歌找到答案。
我编写了一个小子程序来简单地打开一个包含“控制”一词的特定工作簿。
问题:尽管有一个可以工作的错误处理程序,但我从 excel 中得到一个弹出框,说它无法打开工作簿。
代码如下:
Sub OpenControlSheet(index As Integer)
Dim strFilePath As String
Dim strFileName As String
On Error GoTo ErrorHandler
strPlan = arrPlanPeriods(index)
ResumePoint:
strFilePath = "S:\Misc. Budget\" & strPlan & "\" & "*Control*"
strFileName = Dir(strFilePath)
ResumePoint2:
Set wb = Workbooks.Open("S:\Misc. Budget\" & strPlan & "\" & strFileName)
ErrorHandler:
If Err.Number <> 0 Then
'Do stuff
End if
End sub
基本上,错误处理程序所做的是操纵文件路径,直到找到正确的名称。例如,如果“92 Pol”不起作用,请尝试“92 Poll”。但在尝试新路径之前,我总是会收到以下错误对话框:
“无法打开 'S:\Misc. Budget\92 Pol'”
然后它会通过错误处理程序并打开正确的工作簿。
我认为如果它通过错误处理程序,那么我不应该弹出任何错误对话框。知道为什么会发生这种情况吗?
【问题讨论】:
-
如果我没有要打开的工作簿,我会得到
Run time error 1004 Sorry we couldn't find xyz is it possible it was moved, renamed or deleted?(Excel 2013),没有错误处理,并且使用 goto errhandle 可以按预期工作。 -
你在代码上有一些标签,我猜你要跳回去。为什么不显示相关的错误处理代码?特别是尝试将执行引导回标签的代码....
-
我建议一种更健壮(即不依赖错误处理程序作为代码逻辑的一部分)的方法是使用
Dir函数来确定文件是否存在。不要将错误处理用作逻辑的一部分。错误处理程序是“错误捕获所有”,它们不是程序逻辑。
标签: excel vba error-handling