如果在 VBA 中使用 "if statement" 没有发生错误,则跳过代码
Skip code if no error occurs by using an "if statement" in VBA
我需要一些意见,因为我是 VBA 的新手。
我有一部分代码在三个不同的路径位置寻找文件。代码尝试路径1,如果错误,它会继续下一条路径(完美)
我的问题是,如果文件路径适用于代码 "test 2" 和 "test 3",它将始终 运行 直到最后一个(即 "test 3")而不是跳转到代码的下一部分。如果位置路径适用于例如测试 1 或测试 2 位置,我不需要 运行 之后的以下行。
我怎样才能让我的代码跳过那部分?
'Test 1 location path
On Error GoTo Err1:
sFldr = "Path1"
Err1:
Resume Next
'Test 2 location path
On Error GoTo Err2:
sFldr = "Path2"
Err2:
Resume Next
'Test 3 location path
On Error GoTo Err3:
sFldr = "Path3"
Err3:
Resume Next
'next part of big code
more code here
选项 1:封装在函数中
最好将其包装在负责检索 sFldr 值的函数中。
选项 2:GoTo 语句 - 不推荐
如果 sFldr
的值不为 null
,或许可以添加一个 GoTo
'Test 1 location path
On Error GoTo Err1:
sFldr = "Path1"
If(sFldr <> "") Then Goto ContinueFunc
Err1:
Resume Next
'Test 2 location path
On Error GoTo Err2:
sFldr = "Path2"
If(sFldr <> "") Then Goto ContinueFunc
一个过程 = 一个错误处理程序。
就这么简单。
确保错误处理子例程只在错误状态下运行。
我真的不能给你比这更具体的答案了,因为你给我们看的代码实际上什么也没做;将字符串文字分配给字符串变量永远不会引发错误,...以及在 "normal" 执行路径 中从一行跳到另一行的工作流 不正常 - 你需要重组事物。我很乐意提供帮助,但我不知道您的代码是做什么的。
简而言之,您应该有如下所示的小程序:
Private Sub DoSomething()
On Error GoTo CleanFail
'procedure code here
CleanExit:
'cleanup code here
Exit Sub
CleanFail:
'error-handling code here
Resume CleanExit
End Sub
如果我理解正确,您需要逐步尝试(在这个人为的示例中)sFldr
的值,操作可能会出错。不用On Error Goto
,直接测试Err
对象有没有错误:
On Error Resume Next
sFldr = "Path1"
If Err.Number <> 0 Then
Err.Clear
sFldr = "Path2"
If Err.Number <> 0 Then
Err.Clear
sFldr = "Path3"
End If
End If
On Error GoTo 0 'Or resume your normal error handling.
'next part of big code
这样称呼它:
If GetFldrValue = vbNullString Then
'whatever you need to do if all 3 fail.
End If
'next part of big code
另一个选择是将整个事情提取到它自己的函数中(这可能不是一个坏主意 - 评论 "next part of big code" 表明例程可能做得太多)。如果这样做,您可以完全关闭错误处理并 return 找到第一个有效值:
Function GetFolderValue() As String
On Error Resume Next
GetFolderValue = "Path1"
If Err.Number <> 0 Then Exit Function
GetFolderValue = "Path2"
If Err.Number <> 0 Then Exit Function
GetFolderValue = "Path3"
End Function
我需要一些意见,因为我是 VBA 的新手。
我有一部分代码在三个不同的路径位置寻找文件。代码尝试路径1,如果错误,它会继续下一条路径(完美)
我的问题是,如果文件路径适用于代码 "test 2" 和 "test 3",它将始终 运行 直到最后一个(即 "test 3")而不是跳转到代码的下一部分。如果位置路径适用于例如测试 1 或测试 2 位置,我不需要 运行 之后的以下行。 我怎样才能让我的代码跳过那部分?
'Test 1 location path
On Error GoTo Err1:
sFldr = "Path1"
Err1:
Resume Next
'Test 2 location path
On Error GoTo Err2:
sFldr = "Path2"
Err2:
Resume Next
'Test 3 location path
On Error GoTo Err3:
sFldr = "Path3"
Err3:
Resume Next
'next part of big code
more code here
选项 1:封装在函数中 最好将其包装在负责检索 sFldr 值的函数中。
选项 2:GoTo 语句 - 不推荐
如果 sFldr
的值不为 null
GoTo
'Test 1 location path
On Error GoTo Err1:
sFldr = "Path1"
If(sFldr <> "") Then Goto ContinueFunc
Err1:
Resume Next
'Test 2 location path
On Error GoTo Err2:
sFldr = "Path2"
If(sFldr <> "") Then Goto ContinueFunc
一个过程 = 一个错误处理程序。
就这么简单。
确保错误处理子例程只在错误状态下运行。
我真的不能给你比这更具体的答案了,因为你给我们看的代码实际上什么也没做;将字符串文字分配给字符串变量永远不会引发错误,...以及在 "normal" 执行路径 中从一行跳到另一行的工作流 不正常 - 你需要重组事物。我很乐意提供帮助,但我不知道您的代码是做什么的。
简而言之,您应该有如下所示的小程序:
Private Sub DoSomething()
On Error GoTo CleanFail
'procedure code here
CleanExit:
'cleanup code here
Exit Sub
CleanFail:
'error-handling code here
Resume CleanExit
End Sub
如果我理解正确,您需要逐步尝试(在这个人为的示例中)sFldr
的值,操作可能会出错。不用On Error Goto
,直接测试Err
对象有没有错误:
On Error Resume Next
sFldr = "Path1"
If Err.Number <> 0 Then
Err.Clear
sFldr = "Path2"
If Err.Number <> 0 Then
Err.Clear
sFldr = "Path3"
End If
End If
On Error GoTo 0 'Or resume your normal error handling.
'next part of big code
这样称呼它:
If GetFldrValue = vbNullString Then
'whatever you need to do if all 3 fail.
End If
'next part of big code
另一个选择是将整个事情提取到它自己的函数中(这可能不是一个坏主意 - 评论 "next part of big code" 表明例程可能做得太多)。如果这样做,您可以完全关闭错误处理并 return 找到第一个有效值:
Function GetFolderValue() As String
On Error Resume Next
GetFolderValue = "Path1"
If Err.Number <> 0 Then Exit Function
GetFolderValue = "Path2"
If Err.Number <> 0 Then Exit Function
GetFolderValue = "Path3"
End Function