vlookup运行时错误1004.答案尚未找到

时间:2017-10-19 09:04:20

标签: excel vba

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"错误处理程序第一次错误处理程序工作正常。但错误处理程序第二次不工作。

我使用过的表:

enter image description here

3 个答案:

答案 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本身中导致错误,并且一旦返回您的代码可以以受控方式测试错误。