2017-10-19 47 views
0
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”错误处理程序。第一次错误处理程序工作正常,但错误处理程序第二次不能正常工作。vlookup运行时错误1004.答案尚未找到

表我用:

enter image description here

+0

我从来没有见过“运行时错误1004。回答尚未找到”的消息之前 - 你确定这就是它说的吗?!?! – YowE3K

回答

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财产时,这是你想要获得或设置的财产。
  • 当你的意思是一个单元格时,最好是指定一个单元格,而当你指的是一个范围时指定一个范围。诚然,从技术上讲,单元格是一个范围,但是如果你明确地写出它,读取你的代码会更容易。
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 

我推荐使用上的错误继续下一步。

现在,如果你已经拥有了数据在I = 2至5,范围( “F” &我),那么我建议你使用

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 

当我们使用变量瓦尔测试它VLOOKUP返回没有。

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