在活动 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
我需要在活动作品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