【发布时间】:2019-02-26 09:27:54
【问题描述】:
我使用这个超级有用的论坛已经有一段时间了,总能找到我问题的答案。你是最棒的!
但这一次我似乎无法找到一个简单案例的解决方案。尝试了几个建议,但似乎不起作用...
所以,我想使用 GUI 从另一个软件下载两个报告。但有时,Report1 或/和 Report2 不存在。
Sub Report_download()
On Error Goto RP1_err
'GUI codes to download Report(1)
On Error Goto RP2_err
'GUI codes to download Report(2)
MsgBox "Both Reports downloaded."
Exit Sub
RP1_err:
If MsgBox("Report(1) not found. Proceed to Report(2) download?",
vbYesNo) = vbNo Then Exit Sub
On Error Resume Next
'GUI codes to download Report(2)
If Err.Number > 0 Then
MsgBox "Neither Report(1) nor Report(2) Found"
End If
Exit Sub
RP2_err:
MsgBox "Report(1) downloaded, Report(2) not found. Review manually."
Exit Sub
End Sub
当我在报告 (1) 和报告 (2) 都不存在的情况下运行此程序时,RP1_err 错误处理程序中的“用于下载报告 (2) 的 GUI 代码”中发生错误(应该如此),在我之后按“是”。但是,接下来会出现一个调试对话框,而不是显示消息“既未找到报告(1)也未找到报告(2)”。我做错了什么?
感谢您的帮助!
【问题讨论】:
-
您需要使用
Resume语句清除活动异常(错误状态)(On Error Resume Next不算在内)。 (从技术上讲,您可以使用On Error Goto -1来清除它,但根据我的经验,这通常是糟糕设计的标志。 -
这是应该避免“此类”错误处理的情况之一。使用布尔变量。更容易处理
-
如果您分享
GUI codes to download Report(1)和GUI codes to download Report(2)的确切代码,那么也许我可以演示布尔变量的使用 -
最好的办法是重新组织您的代码并使用两个函数(由一个主函数调用)来下载每个报告。他们可以专注于处理一种错误并在下载成功时返回错误代码或布尔值,而 main 函数可以评估要回答用户的内容。
-
@SiddharthRout 有太多行要检查以审查数据,所以我不能但还是谢谢你!
标签: excel vba error-handling