Excel Range.Find не работает так, как я думал - PullRequest
0 голосов
/ 01 мая 2018

Итак, я пытался выяснить, почему это не работает, и я очень расстроен.

Когда я нажимаю на кнопку «Поиск», она берет текст из текстового поля и использует его в качестве критерия поиска. Я хочу, чтобы он пропускал любую строку, активную в данный момент, так что, пока я продолжаю нажимать кнопку «Поиск», она будет двигаться дальше и не будет продолжать находить одну и ту же строку. И у меня это работало долгое время, затем я обновился до Windows 10, и все перестало работать. Это единственное, чего я не могу понять. Я внес некоторые изменения в свой оригинал, так что это не тот код, который раньше работал. Независимо от того, что я делаю, он продолжает показывать мне одну и ту же строку, несмотря на то, что одна ПРАВАЯ НИЖЕ имеет одинаковые данные. Как и на рисунке ниже, если я ищу TRACE, выбирается третья строка данных, но когда я снова нажимаю «Поиск», она не переходит к следующей строке, как должно. Я использую Range.Find (What: =, After: =) и устанавливаю диапазон After в самую левую ячейку текущего активированного диапазона. Который должен начать поиск в следующей строке. Но этого не происходит.

enter image description here

Private Sub Search_Next_Click()
    Dim Fnd As Range
    Dim S_Range as Range
    Dim CurrRow As Integer: CurrRow = ActiveCell.Row
    Dim CurrColumn As Integer: CurrColumn = ActiveCell.Column

'Last row of data
    LastRow = Range("B24").End(xlDown).Row

    AC = ActiveCell.Address
''If the Find button is pressed and the current active cell is outside the range of my data
''this makes sure that the active cell moves to the upper left of that range

    If AC = "" Or CurrRow < 24 Or CurrColumn > 10 Then
        AC = "B24"
        Range(AC).Activate
    End If
    ACr = ActiveCell.Row
    On Error Resume Next
    Set S_range = Range("B24" & ":J" & LastRow)

    Set Fnd = S_range.Find(what:=SearchBox.Text, after:=Range(AC))
    FR = Fnd.Row
    If FR = "" Then
        MsgBox ("No Match Found")
        DoCmd.CancelEvent
        SearchBox.SetFocus
        Exit Sub
    End If
    On Error GoTo 0
    Scell = "B" & FR & ":J" & FR
    ActiveSheet.Range(Scell).Select
    ActiveSheet.Range(Scell).Activate
End Sub

1 Ответ

0 голосов
/ 01 мая 2018

ОК, как только я написал это, я понял, что я сделал не так. Хотя я не знаю, почему это работало в прошлом, а потом остановилось. Может быть, я что-то изменил, не осознавая этого, и облажался. Во всяком случае, я искал значение в столбце D. Как только была найдена ячейка с критериями поиска, в этой строке были выбраны и активированы ячейки в столбцах с B по F. Но когда я снова нажал «Поиск», он начался после столбца «Б» в этой строке. Я думал, что он перейдет к следующему ряду, но он двигался к следующему столбцу, чтобы начать поиск. Таким образом, он снова столкнулся с тем же значением, и цикл повторился.

Я только что изменил критерии после на

After:=Range("B" & ACr + 1)

Затем начался поиск в следующей строке, как я и хотел. Я оставляю это на всякий случай, если кто-нибудь еще столкнется с этой ошибкой. Надеюсь, я смогу помочь кому-то еще понять, что они не единственные, кто совершает глупые ошибки .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...