我一直在修补这个问题一段时间了,我有下面的代码工作,但它搜索的次数比我想要的要多。我希望它只搜索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
答案 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)
我会这样尝试
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