2015-02-10 102 views
0

我目前正在開發一個需要搜索欄的Excel項目。我剛開始使用Excel,所以我真的是一個小菜鳥。Excel中的搜索欄

我有一個TextBox可以輸入文本。還有一個按鈕旁邊的按鈕,所以我可以執行搜索。搜索應從RANGE(「A:E」)搜索。我需要它來突出顯示結果。

例子:

我在細胞(「C12」)的字符串「你好」,如果我在文本框中鍵入打招呼,然後按下按鈕,我想它去到該單元格,選擇它。

我已經嘗試了一切,搜索網頁,我找不到任何可以適合的東西。

唯一可以工作的是VLOOKUP,但我需要它在1列以上,所以這是行不通的。這應該像ctr + F的東西一樣工作,但我找不到那樣的東西。

可以工作的唯一的代碼是一個在那裏我會去手動下來的每一個細胞,並檢查它的字符串:

Sub Button1_Click() 
Dim Column, Row As Integer 
Dim Search As String 
String = TextBox.Text 
For Column = 1 To 5 
    For Row = 1 To 1048576 
     If Cells(Row, Column).Value = Search Then 
      Cells(Row, Column).Select 
     End If 
    Next 
Next 

End Sub 

但這代碼提供溢出錯誤。如果你能幫助我,我會喜歡它。

回答

1

像這樣的東西應該適合你。它使用range.find循環而不是暴力循環,所以它更加高效,並且可以避免溢出錯誤

Private Sub Button1_Click() 

    Dim rngFound As Range 
    Dim rngSelect As Range 
    Dim strFind As String 
    Dim strFirst As String 

    If Len(Trim(Me.TextBox.Text)) = 0 Then 
     Me.TextBox.SetFocus 
     MsgBox "Must provide text to search for.", , "No Search Text" 
     Exit Sub 
    End If 

    strFind = Me.TextBox.Text 
    Set rngFound = Range("A:E").Find(strFind, Cells(Rows.Count, "E"), xlValues, xlPart, MatchCase:=False) 

    If rngFound Is Nothing Then 
     MsgBox "No matches found for [" & strFind & "]", , "No Matches" 
     Exit Sub 
    Else 
     strFirst = rngFound.Address 
     Set rngSelect = rngFound 
     Do 
      Set rngSelect = Union(rngSelect, rngFound) 
      Set rngFound = Range("A:E").FindNext(rngFound) 
     Loop While rngFound.Address <> strFirst 
    End If 

    rngSelect.Select 

End Sub 
+0

您可以請您解釋Me.TextBox引用。我從來沒有見過它,我不知道如何使用它。 Thx – 2015-02-10 16:20:06

+0

'Me'只是指用戶窗體,然後從用戶窗體中選擇文本框。我喜歡它,因爲它只允許輸入名稱的一部分,然後我可以從自動生成的列表中選擇哪種控件(本例中爲文本框)。 – tigeravatar 2015-02-10 16:30:56

+0

Thx did not知道這就是有用:) thx再次你救了我:* – 2015-02-10 16:38:37