Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 错误时为变量赋值_Vba_Excel_Error Handling - Fatal编程技术网

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这就是我所想的,因此我提出了问题。非常感谢。