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

Vba 在特定列中使用范围查找方法,vba,excel,excel-2010,Vba,Excel,Excel 2010,我一直在修补这个有一段时间了,我有下面的代码工作,但它搜索比我希望它更多。我希望它只搜索C列,而不是整个工作表。我已尝试将单元格更改为范围(“C1:C10000”)。Find但不返回匹配项 我真的很难受 Dim r As Range Set r = Sheets("State Agent List").Range("C1:C10000").Find(What:=ComboBox22.Value, _ After:=ActiveCell, LookAt:=xlPart,

我一直在修补这个有一段时间了,我有下面的代码工作,但它搜索比我希望它更多。我希望它只搜索C列,而不是整个工作表。我已尝试将
单元格更改为
范围(“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    

您的问题是使用了
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)
属于您正在处理的区域的最后一个单元格。它可以工作,但可以这样显式编写:

searchRng.Cells(searchRng.Cells.Count)
为什么需要将
After
参数设置为最后一个单元格?

主要原因是搜索从第一个单元格开始。嗯

我想这样试试

  • 确保从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
    

我不明白为什么这不起作用(目前没有安装Excel的PC)。您可以通过如下方式强制执行逻辑:检查
如果不是r.Column=3,则设置r=Nothing
或者ComboBox22。值不在该范围内?也许有一些非打印字符是您没有考虑的?您的代码在这里似乎工作正常,有一个有效的参数为
What:=
Thanky you heaps,这解决了我的问题,并给了我一些如何改进工作簿的想法,我刚刚实现的工作簿也没有问题。非常感谢!您也可以省略
After
参数,在这种情况下-“如果不指定此参数,搜索将在区域左上角的单元格之后开始。”我想补充一点,您添加的After参数,在:=searchRng(searchRng.Cells.Count)之后,将导致与参数冲突,SearchDirection:=xlPrevious,它从底部开始搜索,而不是从顶部开始搜索。谢谢,我来试一试!