如何解决将On Error GoTo与If,elseIf语句一起使用,msg会重复自身
我是On Error GoTo的新手。我有一个检查客户端状态的功能。如果为0,则返回其他值,代码应为5-18。我试图将其定位到错误到达的位置,然后弹出一个带有该错误的消息框,一旦用户单击“确定”,我的应用程序将从头开始运行,并运行以查看该错误是否已解决或是否存在另一个错误。在那之后的错误。不知道On Error GoTo是否是对此的最佳方法。我不知道如何根据返回的数字而不是一条通用消息来显示每条消息。当前,当我运行时,我必须一直按ok,然后收到错误消息并按ok等。
On Error GoTo Error
Debug.Print "Starting Check."
TryAgain:
client.Read "State",State
If State <> 0 Then
ElseIf code = 5 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 6 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 7 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 8 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 9 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 10 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 11 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 12 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 13 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 14 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 15 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 16 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 17 Then
Message = "*** - ERROR: Description Here"
ElseIf code = 18 Then
Message = "*** - ERROR: Description Here"
End If
Else
MsgBox ("Successful")
Exit Function
End If
Error:
'display Message from above is what i am having trouble with
Resume TryAgain
解决方法
这是一个建议:
除了错误和退出处理“ on error goto”外,不要在VBA中使用GoTo作为控制程序流的方式。
它将引导您输入spaguetti代码
我通过一些重点重构了您的代码:
- 不要重复自己的原则
- 通过单独的功能处理错误消息
- 通过循环处理成功读取客户端的情况
我对变量类型和其他内容做了一些假设,因此请阅读代码的注释并对其进行自定义以满足您的需求。
PS。不要忘记添加退出和错误处理
希望这会让您走上正确的道路。让我知道是否有帮助。
代码
Public Function Test()
''''''Your code here'''''
Debug.Print "Starting Check."
Dim retry As Boolean
' Try to not repeat code / text if you can
Dim messagePrefix As String
messagePrefix = "*** - ERROR: "
Do
' Read and assign state
client.Read "State",State
If State = 0 Then
retry = False
MsgBox ("Successful")
Exit Do
Else
' State <> 0 Add error description
message = GetClientMessage(code)
'Display message from above
MsgBox messagePrefix & message
retry = False
End If
Loop While retry = False
' Do something else???
' Add the exit and error handling labels
End Function
Private Function GetClientMessage(ByVal code As Integer) As String
Dim message As String
Select Case code
Case 5
message = "Description Here"
Case 6
message = "Description Here"
Case 7
message = "Description Here"
Case 8
message = "Description Here"
Case Else
message = "Description Here"
End Select
GetClientMessage = message
End Function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。