.FindNext()与xlPrevious

问题描述 投票:1回答:1

我试图从下到上找到所有值“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

我不确定这是从下到上查找所有值的最佳方法。任何帮助都会受到重视。

excel vba
1个回答
2
投票

Range.FindNext method显然没有继承SearchDirection:= xlPrevious参数。您需要使用基数Range.Find method和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
© www.soinside.com 2019 - 2024. All rights reserved.