2015-02-10 2 views
0

В настоящее время я работаю над проектом Excel, которому нужна панель поиска. Я только начал работать с Excel, поэтому я действительно noob.Строка поиска в Excel

У меня есть TextBox, где я могу ввести текст. И рядом с ним кнопка, чтобы я мог выполнить поиск. Поиск должен искать из RANGE («A: E»). И мне нужно, чтобы выделить результат.

Пример:

У меня есть строка «привет» в ячейке («C12»), и если я печатаю в моем TextBox привет и нажмите кнопку я хочу, чтобы перейти в эту ячейку и выберите его.

Я пробовал все, искал в Интернете, и я не могу найти ничего, что могло бы поместиться.

Единственный, с кем можно работать, это 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 –

+0

'Me' просто ссылается на пользовательскую форму, а затем выбирает текстовое поле из пользовательской формы. Мне нравится, потому что он позволяет мне вводить только часть имени, а затем я могу выбрать, какой элемент управления (в данном случае текстовое поле) из автоматически сгенерированного списка. – tigeravatar

+0

Thx did not знаю, что полезный :) thx снова ты спас меня: * –

Смежные вопросы