Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vba(visual basic)中,是否有任何方法可以确定已过滤的值,而无需遍历每行数据?_Vba - Fatal编程技术网

在vba(visual basic)中,是否有任何方法可以确定已过滤的值,而无需遍历每行数据?

在vba(visual basic)中,是否有任何方法可以确定已过滤的值,而无需遍历每行数据?,vba,Vba,在vba(visual basic)中,是否有任何方法可以确定已过滤的值,而无需遍历每行数据?我知道每一行都有一个.hidden值,如果数据被过滤,这个值是真的,但是有没有办法不经过每一行就知道哪些数据被过滤了呢?这会节省我很多时间 因此,是否有任何方法来确定,例如,值“4”、“5”和“6”已针对第1列进行筛选,值“1”、“2”和“3”已针对第2列进行筛选,而不必遍历每一行,而不是遍历每一行 谢谢 有点乱,但它能工作 脚本将把列ref和过滤的值打印到中间窗口中,每个列都是活动的过滤器 您需要根据

在vba(visual basic)中,是否有任何方法可以确定已过滤的值,而无需遍历每行数据?我知道每一行都有一个.hidden值,如果数据被过滤,这个值是真的,但是有没有办法不经过每一行就知道哪些数据被过滤了呢?这会节省我很多时间

因此,是否有任何方法来确定,例如,值“4”、“5”和“6”已针对第1列进行筛选,值“1”、“2”和“3”已针对第2列进行筛选,而不必遍历每一行,而不是遍历每一行


谢谢

有点乱,但它能工作

脚本将把列ref和过滤的值打印到中间窗口中,每个列都是活动的过滤器

您需要根据需要对其进行修改

Option Explicit

Sub CheckFilterSelection()

    Dim SomeSheetName As Worksheet
    Set SomeSheetName = ThisWorkbook.Sheets("Sheet1")

    Dim CurFilter As Filter

    Dim Crite1
    Dim Crite2
    Dim Op
    Dim CurFilterCrit As Variant

    Dim FilterNum As Long

    With SomeSheetName
        If .AutoFilterMode Then

            For FilterNum = 1 To .AutoFilter.Filters.Count

                If .AutoFilter.Filters(FilterNum).On Then
                    'If the Current Filter on a Column has 2 selections then it uses _
                        Criteria1 and Criteria2
                    'If the Current Filter has more than two then it sorts them into an array _
                        in Criteria1
                    If .AutoFilter.Filters(FilterNum).Count > 2 Then

                        For Each CurFilterCrit In .AutoFilter.Filters(FilterNum).Criteria1

                            Debug.Print "Column " & .AutoFilter.Filters(FilterNum).Parent.Range.Column + FilterNum - 1 & _
                                            " Criteria " & CurFilterCrit

                        Next CurFilterCrit

                    ElseIf .AutoFilter.Filters(FilterNum).Count = 2 Then

                        Debug.Print "Column " & .AutoFilter.Filters(FilterNum).Parent.Range.Column + FilterNum - 1 & _
                                        " Criteria " & .AutoFilter.Filters(FilterNum).Criteria1
                        Debug.Print "Column " & .AutoFilter.Filters(FilterNum).Parent.Range.Column + FilterNum - 1 & _
                                        " Criteria " & .AutoFilter.Filters(FilterNum).Criteria2

                    ElseIf .AutoFilter.Filters(FilterNum).Count = 1 Then

                        Debug.Print "Column " & .AutoFilter.Filters(FilterNum).Parent.Range.Column + FilterNum - 1 & _
                                        " Criteria " & .AutoFilter.Filters(FilterNum).Criteria1
                    End If


                End If
            Next FilterNum
        End If
    End With

End Sub

不,这是不可能的。有没有办法确定.AutoFilter.Filters(FilterNum).Criteria1中CurFilterCrit的数量?我试图使用.AutoFilter.Filters(FilterNum).Criteria1.Count,但这不起作用。@JSmith捕获所有信息并不容易,所以我必须解决这个问题。你需要它的目的是什么?我觉得我做得很出色,回答了你的问题。