VBA代码在集合的for循环中使用Vlookup

我很难将Vlookup集成到for循环中,我必须显示我的集合的每个值。 在这个背景下,如果我必须检查列中的单元格,以确保它们是合格的助记符。 我列出了所有可能的助记符,所以如果vlookup返回一个值,那么它是一个助记符。 为了使这个快速检查,我的集合将显示不同的值,我试图显示在不同值旁边的vlookup结果。 我不能让vlookup循环,我想我也需要一个error handling程序,我只是不能确定如何做到这一点。 它的编码方式现在它将工作的第一个值,但它不会循环,而且如果第一个值不是一个助记符,它将无法正常工作。

Sub QualityAssurance() Dim lngLastRow As Long Dim rngCell As Range, _ rngMyData As Range Dim clnMyList As New Collection Dim varMyList As Variant Dim strMyList As String Dim Mtch As Variant 'Assumes the dataset is from A2 to A[whatever the last row in Column A is]. 'Change to suit lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row Set rngMyData = Range("A2:A1000" & lngLastRow) Application.ScreenUpdating = False On Error Resume Next 'Need to ignore errors as a Collection can only contain unique values For Each rngCell In rngMyData clnMyList.Add Item:=rngCell.Value, Key:=CStr(rngCell.Value) Next rngCell On Error GoTo 0 'Nullify error handler For Each varMyList In clnMyList If strMyList = "" Then strMyList = varMyList & " = " & Application.WorksheetFunction.VLookup(varMyList, Sheet1.Range("P2:Q8"), 2, 0) Else: strMyList = strMyList & vbNewLine & varMyList End If Next varMyList MsgBox strMyList Application.ScreenUpdating = True End Sub 

如果删除WorksheetFunction ,则在没有匹配的情况下不会收到运行时错误,而是可以testing返回值以查看是否为错误:

 Dim r '.... For Each varMyList In clnMyList If Len(strMyList) > 0 Then strMyList = strMyList & vbNewLine r = Application.VLookup(varMyList, Sheet1.Range("P2:Q8"), 2, 0) strMyList = strMyList & varMyList & " = " & _ IIf(IsError(r), "?Not Found?", r) Next varMyList