Excel Range.Find没有像我想象的那样工作

时间:2018-05-01 17:36:57

标签: excel-vba vba excel

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

当我点击“搜索”按钮时,它会从文本框中获取文本,并将其用作搜索条件。我希望它跳过当前活动的任何行,这样只要我继续按下我的“搜索”按钮它就会继续前进,而不是继续找到同一行。我让它工作了很长时间,然后我升级到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 :(得分:0)

好的,一发布这个,我就知道我做错了什么。虽然我不知道为什么它在过去有效,然后停止了。也许我没有意识到改变了一些东西并搞砸了无论如何,我在D列中搜索一个值。一旦找到具有搜索标准的细胞,就选择并在该行中激活B至F列中的细胞。但是当我再次点击搜索时,它会在该行的B列之后开始。我认为它会跳到下一行,但它正在移动到下一列开始搜索。所以它再次遇到了相同的值,并重复了循环。

我刚刚将After条件更改为

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

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