在活动 sheet 中找到 Table 个对象以移除自动过滤器

Find Table objects in the active sheet to remove auto filter

我需要在活动作品sheet中找到table(一个作品sheet将只有一个Table)并找到第一列和最后一列table 并从第一列和最后一列中删除自动过滤器。

目前我正在这样做:- 问题是我必须手动输入字段值,因为 sheet 的名称以及 table[=13 的名称都会更改=]

Private Sub Worksheet_Activate()
' Select middle cell
ActiveSheet.Range("$A").Select
' Remove autofilter from first column in the table
With Range("$A")
    .AutoFilter Field:=1, VisibleDropDown:=False
End With
' Remove autofilter from last column in the table
With Range("$Q")
    .AutoFilter Field:=17, VisibleDropDown:=False
End With
End Sub
Private Sub Worksheet_Activate()
     
    With Me.ListObjects
        If .Count = 1 Then
            With .Item(1).Range
                .AutoFilter Field:=1
                .AutoFilter Field:=.Columns.Count
            End With
        End If
    End With

End Sub

从 Excel Table (Workbook_SheetActivate)

的列中删除过滤器
  • 将代码复制到 ThisWorkbook 模块中。
  • 激活(选择)另一个工作表时,如果它包含 Excel table,第一列和最后一列中的过滤器将被删除,它们的下拉箭头也将被删除。
  • 要对其进行测试,请按第一列、另一列和最后一列过滤 table。选择另一个工作表后,再选择第一个工作表,只剩下另一列的过滤器。
Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    
    Dim tbl As ListObject
    On Error Resume Next
        Set tbl = Sh.ListObjects(1)
    On Error GoTo 0
    
    If Not tbl Is Nothing Then
        With tbl.Range
            .Columns(1).AutoFilter 1, VisibleDropdown:=False
            .Columns(.Columns.Count).AutoFilter .Columns.Count, _
                VisibleDropdown:=False
        End With
    End If

End Sub

编辑:排除工作表

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    ' To exclude charts (kind of covered with 'On Error' statement).
    'If sh.Type <> xlWorksheet Then Exit Sub 
    
    Dim Exceptions As Variant: Exceptions = Array("Sheet1", "Sheet2")

    ' To exclude the sheets in the list:    
    If IsError(Application.Match(Sh.Name, Exceptions, 0)) Then
    ' To restrict to the sheets in the list:
    'If IsNumeric(Application.Match(Sh.Name, Exceptions, 0)) Then
        
        Dim tbl As ListObject
        On Error Resume Next
            Set tbl = Sh.ListObjects(1)
        On Error GoTo 0
        
        If Not tbl Is Nothing Then
            With tbl.Range
                .Columns(1).AutoFilter 1, VisibleDropdown:=False
                .Columns(.Columns.Count).AutoFilter .Columns.Count, _
                    VisibleDropdown:=False
            End With
        End If

    End If

End Sub