我需要一些输入,因为我对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
答案 0 :(得分:3)
如果我理解正确,你需要逐步尝试(在这个设计的例子中)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
另一个选择是将整个事物提取到自己的函数中(这可能不是一个坏主意 - 注释“大代码的下一部分”表示例程可能做得太多)。如果这样做,您可以完全关闭错误处理并返回找到的第一个有效值:
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
答案 1 :(得分:2)
这很简单。
确保错误处理子程序仅在错误状态下运行。
我真的不能给你一个更具体的答案,因为你向我们展示的代码几乎没有任何东西;将字符串文字分配给字符串变量永远不会引发错误,...以及在“正常”执行路径中从一行向上和向下跳转的工作流不是理智 - 你需要重组事物。我很乐意帮忙,但我不知道你的代码是做什么的。
简而言之,您应该拥有如下所示的小程序:
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
答案 2 :(得分:1)
选项1:功能包装 最好将它包装在一个负责检索sFldr值的函数中。
选项2:GoTo声明 - 不推荐
如果GoTo
的值不为空
sFldr
'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