Сделать поле поиска в VBA Excel динамически фокусировать результаты - PullRequest
0 голосов
/ 12 июня 2018

У меня есть большой лист Excel, к которому я добавил текстовое поле динамического поиска, и это прекрасно работает.

Private Sub TextBox1_Change()
    ActiveSheet.Range("E6:E150").AutoFilter Field:=4, Criteria1:="*" & [G1000] & "*", Operator:=xlFilterValues
End Sub

Проблема в том, что, если я отфильтрую, скажем, строку номер 500, результат не будетвидимый, поэтому я должен вручную переместить курсор вверх.

Я пробовал это (и многие другие вещи) без успеха.

Private Sub TextBox1_Change()
    With ActiveSheet.Range("E6:E150").AutoFilter Field:=4, Criteria1:="*" & [G1000] & "*", Operator:=xlFilterValues
        .Select
    End With
End Sub

Это дает

«ошибка времени выполнения« 424 »: требуется объект»

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Извините за неточность.Использование select не очень хорошая идея, которую я вижу по реализации ответа Jeepeds.Я нашел то, что я ищу: Private Sub TextBox1_Change() With ActiveSheet .Range("E6:E150").AutoFilter Field:=4, Criteria1:="<em>" & [G1000] & "</em>" ActiveWindow.ScrollRow = 1 End With End Sub Просто так просто.

0 голосов
/ 12 июня 2018

Возможно, первая видимая ячейка выше выбранной, но скрытой активной ячейки.

Private Sub TextBox1_Change()
    with ActiveSheet
        .Range("E6:E150").AutoFilter Field:=1, Criteria1:="*" & [G1000] & "*"
        if activecell.EntireRow.hidden then
            dim i as long
            for i=activecell.row to 6 step-1
                if not .cells(i, activecell.column).EntireRow.hidden then
                    .cells(i, activecell.column).select
                    exit for
                end if
            next i
        end if
    end with
End Sub

Я изменил поле автофильтра на 1, поскольку в диапазоне нет 4 полей ("E6: E150");есть только 1. Также удалены ненужные операторы: = xlFilterValues, поскольку это требуется только при использовании массива в качестве критерия1.

...