如何在vba使用自动筛选?

在excel工作表中,通过单击“数据”选项卡下的“排序和筛选”组中的“筛选”按钮可以创建单元格区域的自动筛选,如下图所示:

 

 

每个工作表通过上述方式有且只能创建一个单元格区域的自动筛选。

 

在vba中,Worksheet对象的AutoFilter属性可以返回上述工作表中的唯一的自动筛选AutoFilter对象,如果工作表中没有为单元格区域开启自动筛选,则AutoFilter属性返回 Nothing。

 

当为单元格区域添加自动筛选后,就可以通过显示的下拉箭头对各个字段进行筛选,不同的字段可以分别筛选,如下图所示分别对“姓名”、“月份”字段进行了筛选:

 

如果要用vba一次性取消所有字段的筛选,可以通过设置Worksheet对象的AutoFilterMode属性为False。

 '取消所有字段的筛选
 oWK.AutoFilterMode = False

 

但是不能通过设置Worksheet对象的AutoFilterMode属性为True对原单元格区域重新启用自动筛选。

 

如果要再次对原单元格区域重新启用自动筛选,可以先用AutoFilter对象的Range属性返回启用了自动筛选的单元格区域Range对象,然后再对Range对象执行AutoFilter方法即可。

 

代码如下:

 

Sub QQ1722187970()
    Dim oWK As Worksheet
    Set oWK = Excel.ActiveSheet
    Dim oAF As AutoFilter
    Dim oRng As Range
    Set oAF = oWK.AutoFilter
    '如果没有自动筛选
    If oAF Is Nothing Then
    '如果有自动筛选
    Else
        With oAF
            Set oRng = .Range
            '取消所有字段的筛选,同时取消自动筛选的下拉箭头
           oWK.AutoFilterMode = False
           '重新显示自动筛选
           oRng.AutoFilter
        End With
    End If
End Sub

除了通过设置Worksheet对象的AutoFilterMode属性为False清除所有字段的筛选,还可以使用AutoFilter对象的ShowAllData方法清除所有字段的筛选。通过AutoFilter对象的ShowAllData方法清除所有字段的筛选不会使得原单元格区域清空自动筛选,代码如下:

Sub QQ1722187970()
    Dim oWK As Worksheet
    Set oWK = Excel.ActiveSheet
    Dim oAF As AutoFilter
    Dim oRng As Range
    Set oAF = oWK.AutoFilter
    '如果没有自动筛选
    If oAF Is Nothing Then
    '如果有自动筛选
    Else
        With oAF
            '清除所有字段的筛选,同时保留自动筛选的下拉箭头
           .ShowAllData
        End With
    End If
End Sub

 

       

发表评论