查找功能的 VBA 问题

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

我正在尝试查找某个值在一定范围内的行。这个范围是变化的,所以用变量来设置。在下面的示例中,范围设置为从第 1 行到第 441 行,它找到第 442 行中的值。它如何在设置范围之外找到该值?

Set myDataFile = Workbooks.Open(Filename:=myDataFolder & myFileName)
        If counter + n = 1 Then
            With myDataFile.Sheets(1).Range(Cells(nrlist(n), 1), Cells(nrlist(n + 1) - 1, 1))
            Set loc = Cells.Find(what:=list(j))
            If Not loc Is Nothing Then
                Debug.Print (loc.Row)
                i = loc.Row
                Else
                i = ""
            end if
excel vba find
1个回答
2
投票

在 VBA 中,如果您发现值超出指定范围,可能是因为

Cells.Find
方法不限于您定义的
With
块范围。为了确保它仅在指定范围内搜索,请在
.Find
块内使用
Cells.Find
而不是
With
。这是一个紧凑的更正:

Set myDataFile = Workbooks.Open(Filename:=myDataFolder & myFileName)
If counter + n = 1 Then
    With myDataFile.Sheets(1).Range(myDataFile.Sheets(1).Cells(nrlist(n), 1), myDataFile.Sheets(1).Cells(nrlist(n + 1) - 1, 1))
        Set loc = .Find(what:=list(j))
        If Not loc Is Nothing Then
            Debug.Print loc.Row
            i = loc.Row
        Else
            i = ""
        End If
    End With
End If

确保

.Find
以点为前缀,以将搜索限制在指定范围内。另外,请在
Cells
块内指定
With
的完整路径,以避免引用错误的工作表。

© www.soinside.com 2019 - 2024. All rights reserved.