Задача проста. На одном листе отыскать строки с первой ячейкой, равной "Док", на другом листе отыскать строку с ячейкой N равной ячейке N первого листа. Если есть разница, то в третьем (сначала чистом) листе записать инфу о ней (номера строк первого и второго листов, значения). Строк в листах около 30 тыс. и простой перебор по for i=1 to lastcell.row по обоим листам требует много времени. А будут пары листов и на 60 тыс. строк в каждом. Решил применить метод find, но ...
Запусив в цикле один find, с удивлением обнаружил, что findnext из внешнего цикла ищет то, что было последний раз задано find'ом внутреннего.  

Если это особенность VBA, смирюсь 

 и реализую с просмотром по for.  Ниже код, который пользовал (написан на основе из help по find методу) . Может в нем принципиальная ошибка?
dim l,b,x as worksheets  'назначены заранее
' lr(x as worksheet) as integer  функция, возращающая последнюю строку листа х (сам писал) 
...
With l.Range("a1:a30000")                                'в диапазоне листа l
    Set e = .Find("Док=", , xlValues)                    'ищем первое вхождение "Док="
    If Not e Is Nothing Then                               ' нашли?
        firstAddress = e.Address                           '  да. получаем диапазон (ячейку)
        Do                                                        '   циклимся, чтобы найти все "Док="
            With b.Range("ax1:ax30000")                  '  в диапазоне листа b
                Set c = .Find(l.cells(e.row,50))              'ищем строку со значением равным                                   
                                                                            'ячейке 50 найденной в l строки
                If Not c Is Nothing Then                       'надено?
                        If l.Cells(e.Row, 3) <> b.Cells(c.Row, 3) Then  'да. проверяем суммы
                            br = lr(x) + 1                                           'не равны. определяем последнюю строку листа результатов х
                            x.Cells(br, 1) = "суммы не совпадают"             'выводим инфу
                            x.Cells(br, 2) = "Лок. док №" + l.Cells(e.Row, 3).Text
                            x.Cells(br, 3) = "Sum " + l.Cells(e.Row, 3).Text
                            x.Cells(br, 4) = "Office. док №" + b.Cells(e.Row, 3).Text
                            x.Cells(br, 5) = "Sum " + b.Cells(e.Row, 3).Text
                        End If
                     Else                                                                    'не надено
                        x.Cells(lr(x) + 1, 1) = "Док №"+l.Cells(e.Row, 2).Text+" не найден"
                End If
            End With                                                           '  второй лист просмотрен
            Set e = .FindNext(e)                                          ' продолжаем поиск на первом
                                                                  ' здесь то и затык, e=nothing
        Loop While Not e Is Nothing And e.Address <> firstAddress                    'весь лист l просмотрен?
    End If
End With
....