Private Sub CommandButton1_Click()
For i = 2 To 5
On Error GoTo X1:
Range("F" & i) = Application.WorksheetFunction.VLookup(Range("E" & i), Range("A2:B5"), 2, 0)
GoTo X2:
X1:
Range("F" & i) = "No Value found"
X2:
Next
End Sub
在上面的代码中,我使用了" On Eror goto"错误处理程序第一次错误处理程序工作正常。但错误处理程序第二次不工作。
我使用过的表:
答案 0 :(得分:0)
这可能就是你要找的东西。
Private Sub CommandButton1_Click()
Dim Rslt As Variant
Dim Rng As Range
Dim R As Long
Set Rng = Range("A2:B5")
For R = 2 To 5
Rslt = "No value found"
On Error Resume Next
Rslt = Application.WorksheetFunction.VLookup(Cells(R, "E").Value, Rng, 2, 0)
Cells(R, "F").Value = Rslt
Next R
End Sub
Rslt
被分配了Vlookup不成功时应具有的值。
尝试为其分配查找值。
如果失败,Rslt
将保留尝试前的值。
同时,On Error Resume Next
允许代码继续。
在下一行中,Rslt
的当前值被分配给F列中的单元格。
GoTo
。Value
属性。答案 1 :(得分:0)
Sub CommandButton1_Click()
For i = 2 To 5
On Error Resume Next:
Range("F" & i) = Application.WorksheetFunction.VLookup(Range("E" & i), Range("A2:B5"), 2, 0)
If Range("F" & i) = "" Then: Range("F" & i) = "No Value Found"
Next
End Sub
我建议使用On Error Resume Next。
现在如果您已经有i = 2到5,范围(“F”和i)的数据,那么我建议使用
Sub CommandButton1_Click()
For i = 2 To 5
On Error Resume Next:
vall = ""
vall = Application.WorksheetFunction.VLookup(Range("E" & i), Range("A2:B5"), 2, 0)
If vall = "" Then
Range("F" & i) = "No Value Found"
Else: Range("F" & i) = vall
End If
Next
End Sub
我们使用变量vall来测试它,VLookup什么都没有返回。
答案 2 :(得分:0)
当您仍处于错误处理模式时,不会再捕获更多错误。您错过了Resume
语句以退出错误处理模式:
Private Sub CommandButton1_Click()
For i = 2 To 5
On Error GoTo X1:
Range("F" & i) = Application.WorksheetFunction.VLookup(Range("E" & i), Range("A2:B5"), 2, 0)
GoTo X2:
X1:
Range("F" & i) = "No Value found"
Resume X2 'Finished error-handling, resume normal processing
X2:
Next
End Sub
更好的方法是做你正在做的事情:
Private Sub CommandButton1_Click()
Dim i As Long
Dim result As Variant
For i = 2 To 5
result = Application.VLookup(Range("E" & i), Range("A2:B5"), 2, 0)
If IsError(result) Then
result = "No Value found"
End If
Range("F" & i) = result
Next
End Sub
使用Application.VLookup
代替Application.WorksheetFunction.VLookup
,允许将VLookup
生成的错误条件返回到您的代码,而不是在VBA本身中导致错误,并且一旦返回您的代码可以以受控方式测试错误。