2017-10-19 86 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本身中導致錯誤,並且一旦回到代碼中,您可以以受控方式測試錯誤。