代码之家  ›  专栏  ›  技术社区  ›  Kresten

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

  •  -1
  • Kresten  · 技术社区  · 7 年前

    我有一个大的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
    

    它产生了这个

    感谢您的帮助。

    2 回复  |  直到 7 年前
        1
  •  1
  •   user4039065 user4039065    7 年前

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

    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,因为范围中没有4个字段(“E6:E150”);只有一个。还删除了不必要的运算符:=xlFilterValues,因为只有将数组用作条件1时才需要它。

        2
  •  0
  •   Kresten    7 年前

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