在vba Excel中查找多个请求(查找内查找)

我试图执行一种嵌套的查找请求,用例是我需要在一个工作表上查找一个组,如果find从发现的行中的单独列中获取用户ID值,然后search该ID另一张纸。 然后它应该执行一系列操作,然后在第一个表单中find下一个组的下一个事件。

我有的代码是

LookupGroup = Split("GroupName1,GroupName2", ",") For I = 0 To UBound(LookupGroup) With Worksheets("RawData").Range("C:C") Set C = .Find(LookupGroup(I), LookIn:=xlValues) If Not C Is Nothing Then FirstAddress = C.Address Do LookupId = Sheets("RawData").Cells(C.Row, 7).Value IdExist = False 'Check to ensure ID does not exists on Team Members Tab Set IdRange = Sheets("Team Members").Range("A:A").Find(LookupId, LookIn:=xlValues) If IdRange Is Nothing Then IdExist = True End If If Not IdExist Then Highlight = True 'trigger to Set row to bold red font If RecordsFound > 0 Then TotalRecords = TotalRecords + RecordsFound End If End If Set C = .FindNext(C) Loop While Not C Is Nothing And C.Address <> FirstAddress End If End With Next I 

这是第一次正常工作,但是在达到Set C = .FindNext(C)时,该命令返回“Nothing”而不是下一个事件。

如果我注释掉第二个发现

 Set IdRange = Sheets("Team Members").Range("A:A").Find(LookupId, LookIn:=xlValues) 

然后第一个search工作正常,并find所有实例

我究竟做错了什么?

更容易采取查找()逻辑,把它放在一个单独的function…

 Sub Tester() Dim LookupGroup, rngGrp As Range, rngMember As Range, I Dim g As Range, m As Range LookupGroup = Split("GroupName1,GroupName2", ",") For I = 0 To UBound(LookupGroup) Set rngGrp = FindAll(Worksheets("RawData").Range("C:C"), LookupGroup(I)) If Not rngGrp Is Nothing Then For Each g In rngGrp.Cells Set rngMember = FindAll(Sheets("Team Members").Range("A:A"), _ g.EntireRow.Cells(7)) If Not rngMember Is Nothing Then For Each m In rngMember.Cells 'do something with m Next m Else 'flag not found... End If Next g End If Next I End Sub 'find all matching cells in a given range Function FindAll(rngLookIn As Range, LookFor) As Range Dim rv As Range, c As Range, FirstAddress As String With rngLookIn Set c = .Find(LookFor, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then FirstAddress = c.Address Set rv = c Do Set c = .FindNext(c) If Not c Is Nothing Then Set rv = Application.Union(rv, c) Loop While Not c Is Nothing And c.Address <> FirstAddress End If End With Set FindAll = rv End Function