使VBA Excel中的搜索字段动态地聚焦结果

时间:2018-06-12 07:03:35

标签: excel vba excel-vba excel-2016

我有一张大型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 :(得分:1)

可能是当前所选但隐藏的活动单元格上方的第一个可见单元格。

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

我已将AutoFilter字段更改为1,因为Range中没有4个字段(" E6:E150");只有1.还删除了不必要的Operator:= xlFilterValues,因为只有在将数组用作Criteria1时才需要。

答案 1 :(得分:0)

抱歉不准确。 使用select并不是一个好主意,我可以从实现Jeepeds的答案中看到。 我找到了我想要的东西: Private Sub TextBox1_Change() With ActiveSheet .Range("E6:E150").AutoFilter Field:=4, Criteria1:="" & [G1000] & "" ActiveWindow.ScrollRow = 1 End With End Sub 就这么简单。