首页 > 解决方案 > Excel Range.Find 没有按照我想象的方式工作

问题描述

所以我一直试图弄清楚为什么这不起作用,我真的很沮丧。

当我单击“搜索”按钮时,它会从文本框中获取文本,并将其用作搜索条件。我希望它跳过当前处于活动状态的任何行,这样只要我继续按下“搜索”按钮,它就会继续前进,而不是继续寻找同一行。我让它工作了很长时间,然后我升级到 Windows 10 并且东西停止工作了。这只是我似乎无法弄清楚的一件事。我对我的原始代码进行了一些更改,因此这与以前的代码不同。无论我做什么,它都会向我显示同一行,即使它下面的那一行具有相同的数据。如下图所示,如果我搜索 TRACE,则选择了第三行数据,但是当我再次点击“搜索”时,它并没有像应有的那样移动到下一行。我正在使用 Range.Find(What:= ,之后:=) 并将 After 范围设置为当前激活范围的最左侧单元格。哪个应该在下一行开始搜索。但这并没有发生。

在此处输入图像描述

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

标签: excelvba

解决方案


好的,一旦我发布了这个,我就知道我做错了什么。虽然我不知道为什么它在过去起作用,然后停止了。也许我在不知不觉中改变了一些东西,把自己搞砸了。无论如何,我在 D 列中搜索一个值。一旦找到具有搜索条件的单元格,就会在该行中选择并激活 B 到 F 列中的单元格。但是当我再次点击搜索时,它开始于该行的 B 列之后。我以为它会跳到下一行,但它正在移动到下一列开始搜索。所以它再次遇到相同的值,并重复循环。

我刚刚将 After 标准更改为

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

然后它像我想要的那样开始搜索下一行。我留下这个,以防其他人遇到这个错误。希望我可以帮助其他人意识到他们不是唯一犯愚蠢错误的人......


推荐阅读