Vba 错误时为变量赋值
我想做的是,如果出现错误,某些值会被重置。比如:Vba 错误时为变量赋值,vba,excel,error-handling,Vba,Excel,Error Handling,我想做的是,如果出现错误,某些值会被重置。比如: Dim r As Integer Dim feeder As String Dim origen As String On Error GoTo errhandler: For j=1 to 100 r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)") Next j Exit Sub errhan
Dim r As Integer
Dim feeder As String
Dim origen As String
On Error GoTo errhandler:
For j=1 to 100
r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")
Next j
Exit Sub
errhandler:
r = 0
End Sub
但是,如果出现错误,如何强制它返回到
的,而不是ErrHanlding,您可以使用iError设置r
的值:
Sub t1()
Dim feeder As String
Dim origen As String
For j = 1 To 100
Dim r As Variant
If IsError(Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")) Then
r = 0
Else
r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")
End If
Debug.Print r ' Just for you to check
Next
End Sub
您可以使用iError在错误时设置r
的值,而不是ErrHanlding:
Sub t1()
Dim feeder As String
Dim origen As String
For j = 1 To 100
Dim r As Variant
If IsError(Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")) Then
r = 0
Else
r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")
End If
Debug.Print r ' Just for you to check
Next
End Sub
只需使用Resume Next
语句即可
Dim r As Integer
Dim feeder As String
Dim origen As String
On Error GoTo errhandler:
For j=1 to 100
r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")
Next j
Exit Sub
errhandler:
r = 0
resume Next
End Sub
只需使用Resume Next
语句即可
Dim r As Integer
Dim feeder As String
Dim origen As String
On Error GoTo errhandler:
For j=1 to 100
r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")
Next j
Exit Sub
errhandler:
r = 0
resume Next
End Sub
首先在循环中将r声明为变量。然后使用isError(r)
确定是否执行任何操作。为什么必须在循环中声明它?因为一旦它设置为整数,它将不再接受错误。所以我们每次都需要重新定义变量的尺寸。这就是为什么声明变量很重要的原因。我可能错了,但这样做是可行的。但是@EoinS提供了一个很好的选择。首先在循环中将r声明为一个变量。然后使用isError(r)
确定是否执行任何操作。为什么必须在循环中声明它?因为一旦它设置为整数,它将不再接受错误。所以我们每次都需要重新定义变量的尺寸。这就是为什么声明变量很重要的原因。我可能错了,但这样做是可行的。但是@EoinS给出了一个很好的选择。是否真的需要“下一步继续出错”?@user3598756不,iError会捕获错误,因此它永远不会尝试在r中输入错误。@ScottCraner这就是我所想的,因此我提出了问题。谢谢你真的需要“下一个错误恢复”吗?@user3598756不,iError会捕获错误,因此它不会试图在r中输入错误。@ScottCraner这就是我所想的,因此我提出了问题。非常感谢。