.FindNext () с xlPrevious - PullRequest
       1

.FindNext () с xlPrevious

0 голосов
/ 06 декабря 2018

Я пытаюсь найти все значения "O" снизу вверх.Я не могу использовать "нормальный" поиск, потому что я собираюсь offset некоторые значения и .Find() найдет их снова.

Проблема в том, что когда я использую .FindNext после .Find() с SearchDirection:=xlPrevious возвращается наверх, а не в направлении.

В целях тестирования я использую этот код:

Dim f As Range

Set ws = ThisWorkbook.ActiveSheet

ws.Cells(7, 5).Value = "O"
ws.Cells(6, 5).Value = "O"
ws.Cells(5, 5).Value = "O"
ws.Cells(5, 6).Value = "O"
ws.Cells(5, 7).Value = "O"

Set f = ws.Range("A1:AX50").Find(what:="O", SearchDirection:=xlPrevious)
Debug.Print f.Address
Set f = ws.Range("A1:AX50").FindNext(f)
Debug.Print f.Address

Он печатает $E$7 и $E$5.Я ожидал $E$7 и $E$6.

Я не уверен, что это лучший способ найти все значения снизу вверх.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 06 декабря 2018

Метод Range.FindNext явно не наследует аргумент SearchDirection: = xlPrevious.Вам нужен базовый метод Range.Find с аргументом After: = f.

Dim f As Range, addr As String, ws As Worksheet

Set ws = ThisWorkbook.ActiveSheet

ws.Cells(7, 5).Value = "O"
ws.Cells(6, 5).Value = "O"
ws.Cells(5, 5).Value = "O"
ws.Cells(5, 5).Value = "O"
ws.Cells(5, 6).Value = "O"
ws.Cells(5, 7).Value = "O"

With ws.UsedRange.Cells  'Range("A1:AX50")
    Set f = .Find(What:="O", after:=.Cells(1), SearchDirection:=xlPrevious, SearchOrder:=xlByRows)
    If Not f Is Nothing Then
        addr = f.Address(0, 0)
        Do
            Debug.Print f.Address
            Set f = .Find(What:="O", after:=f, SearchDirection:=xlPrevious, SearchOrder:=xlByRows)
        Loop Until addr = f.Address(0, 0)
    End If
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...