2015-02-05 24 views
2

我一直在修補這一段時間,我有下面的代碼工作,但它比我想要的更多。我希望它只是搜索列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

我不明白爲什麼這不起作用(目前不在安裝Excel的PC上)。你總是可以通過檢查像'如果不是r.Column = 3然後設置r =沒有' –

+0

強制邏輯,也許ComboBox22.Value不存在於該範圍內?也許有一些非打印字符,你沒有考慮?你的代碼在這裏似乎可以正常工作,並且有一個有效的參數:What:=' –

回答

0

你的問題是使用的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參數傳遞給最後一個單元格?
主要原因是搜索從第一個單元開始。 HTH

+0

謝謝你,這解決了我的問題,並給了我一些關於如何改進我的工作簿的想法。不勝感激! – FaytZero

+2

您也可以忽略'After'參數,在這種情況下 - 「如果您沒有指定此參數,則搜索將在範圍左上角的單元格之後開始。」 https://msdn.microsoft.com/en-us/library/office/ff839746%28v=office.15%29.aspx –

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 
    
+0

謝謝,我會給這個鏡頭! – FaytZero