在特定列中使用范围查找方法

时间:2015-02-05 00:08:59

标签: excel vba excel-vba excel-2010

我一直在修补这个问题一段时间了,我有下面的代码工作,但它搜索的次数比我想要的要多。我希望它只搜索C列而不是整个表。我尝试将Cells.Find更改为Range("C1:C10000").Find,但不返回任何匹配项。

真的难倒这个。

Dim r As Range

Set r = Sheets("State Agent List").Range("C1:C10000").Find(What:=ComboBox22.Value, _
            After:=ActiveCell, LookAt:=xlPart, SearchOrder:=xlByRows)

If Not r Is Nothing Then
    r.Select
    ActiveWindow.ScrollRow = ActiveCell.Row
Else
    MsgBox "Location not listed."
End If    

2 个答案:

答案 0 :(得分:1)

您的问题是ActiveCell的使用,如果恰好不在C1:C10000范围内,则不会返回任何内容。试试这个:

Dim searchRng As Range: Set searchRng = Sheets("State Agent List").Range("C1:C10000")
Dim r As Range
Set r = searchRng.Find(What:=ComboBox22.Value, After:=searchRng(searchRng.Count))

参数searchRng(searchRng.Count)与您正在处理的Range的最后一个单元格有关。它可以工作,但可以用这种方式明确写出:

searchRng.Cells(searchRng.Cells.Count)

为什么我们需要将After参数设置为最后一个单元格?
主要原因是搜索从第一个单元格开始。 HTH

答案 1 :(得分:0)

我会这样尝试

  • 确保您从C1开始搜索以防多个匹配(假设您正在设置滚动窗口)
  • xlFormulas在隐藏的行中找到单元格,xlValues会跳过它们
  • 不需要Select

    Dim rng1 As Range
    Set rng1 = Sheets("State Agent List").Range("C1:C10000").Find(CStr(ComboBox22.Value), [c10000], xlFormulas, xlPart, , xlNext)
    
    If Not rng1 Is Nothing Then
        ActiveWindow.ScrollRow = rng1.Row
    Else
        MsgBox "Location not listed."
    End If