我使用这个超级有用的论坛已有一段时间了,总是能找到我问题的答案。你是最棒的!
但是这一次我似乎找不到解决简单情况的解决方案。尝试了一些建议,但似乎不起作用...
因此,我想使用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
当我针对既不存在Report(1)也不存在Report(2)的情况运行此程序时,我执行RP1_err错误处理程序后,“如果要下载Report(2)的GUI代码”错误就会发生,按“是”。但是,下面是,而不是显示消息“找不到Report(1)或Report(2)”,而是出现了一个调试对话框。我在做什么错了?
感谢您的帮助!
答案 0 :(得分:0)
感谢您的所有评论!根据您的建议,我使用
提出了快速解决方案makeaclitem
在我的情况下效果很好。然后,我研究了布尔函数的工作原理并提出了解决方案。 (尽管,我相信我的代码相当令人恶心...)
快速修复:
on Error goto -1
布尔值
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 "FVD reports downloaded."
Exit Sub
RP1_err:
AppActivate Application.Caption
DoEvents
If MsgBox("RP1 not found. Proceed to RP2?", vbYesNo) = vbNo Then Exit Sub
On Error GoTo -1
On Error GoTo VDC_err
'GUI codes to download Report(2)
Exit Sub
Both_err:
AppActivate Application.Caption
DoEvents
MsgBox "No VDC report saved."
Exit Sub
RP2_err:
AppActivate Application.Caption
DoEvents
MsgBox "RP1 saved. RP2 not saved."
Exit Sub
End Sub
不确定这是否是“使用布尔值”的意思,无论这是一次学习经历。谢谢!
此外,由于它们很长且包含一些敏感数据,因此我无法共享GUI的确切代码,因此我需要逐行检查它们。抱歉!
答案 1 :(得分:0)
我会像这样重构您的代码:
Option Explicit
Sub Report_download()
Dim blnSuccess1 As Boolean: blnSuccess1 = DownloadReport1
Dim blnSuccess2 As Boolean: blnSuccess2 = DownloadReport2
If blnSuccess1 = False And blnSuccess2 = False Then
Debug.Print "Both reports failed to download"
ElseIf blnSuccess1 = False And blnSuccess2 = True Then
Debug.Print "Report 1 failed to download"
ElseIf blnSuccess1 = True And blnSuccess2 = False Then
Debug.Print "Report 2 failed to download"
Else
Debug.Print "Both reports successfully downloaded"
' Process the results
End If
End Sub
Function DownloadReport1() As Boolean
On Error GoTo ErrorHandler
' Your code to do the actual download 1, which may cause error
On Error GoTo 0
DownloadReport1 = True
Exit Function
ErrorHandler:
DownloadReport1 = False
End Function
Function DownloadReport2() As Boolean
On Error GoTo ErrorHandler
' Your code to do the actual download 2, which may cause error
On Error GoTo 0
DownloadReport2 = True
Exit Function
ErrorHandler:
DownloadReport2 = False
End Function
这样,由于您只需要关注每个函数中的一个问题,就更容易理解错误处理。
此外,调试更容易,因为您可以跳过DownloadReport1或DownloadReport2。
此外,它更加灵活:您可以删除报告1和2,也可以轻松添加报告3。
随后,您可能具有用于报告1、2和3的功能,以及用于下载报告1和2的子菜单,以及用于下载1和3的子菜单。在这种情况下,您可以避免冗余(两次编码以下载报告1)