With Sheet(name)
.ListObjects(Table_name).ShowTotals = False
.ListObjects(Table_name).Range.AutoFilter _
Field:=8, Criteria1:=ListBox1.Value, _
Operator:=xlFilterValues
.ListObjects(Table_name).DataBodyRange.EntireRow.Delete
.ListObjects(Table_name).AutoFilter.ShowAllData
.ListObjects(Table_name).ShowTotals = True
End With
问题出在
.ListObjects("Table13").DataBodyRange.EntireRow.Delete
它不会删除行,我也不明白为什么...
答案 0 :(得分:0)
表的工作方式与常规范围不同。即使您进入Excel,也请单击表并尝试执行Alt-E-D(删除)。通常,它会为您提供向上移动单元格,向左移动单元格,删除整行或删除整列的选项,但是如果您从表中执行此操作,则不会执行任何操作。
我在猜测一点,但是我怀疑这与您的意外行为有关。
相反,如果只想删除行,则改为删除表行(ListRows):
.ListObjects(Table_name).ListRows(row_number).Delete
或者如果您要全部删除(显示在问题中):
For i = .ListObjects(Table_name).ListRows.Count To 1 Step -1
.ListObjects(Table_name).ListRows(i).Delete
Next i
如果您不后退,我很确定它会跳过行然后中断。
然后总是有焦土的方法:
.ListObjects(Table_name).DataBodyRange.Delete
除非您关心数据表之外的那些行中的内容,否则它们应该起作用。
答案 1 :(得分:0)
要删除自动过滤表中的行,必须使用
.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
以下示例程序对我有用。由于您的表已链接到“列表框”,因此请对条件进行适当的调整。 [删除前的表格]
Sub DeleteRows()
Application.DisplayAlerts = False
With ActiveSheet.ListObjects("Table1") 'Change table as per your requirement
If .Parent.FilterMode Then .Range.AutoFilter
.Range.AutoFilter Field:=1, Criteria1:="Margeret" 'Set criteria as per yr requirements
.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
.Range.AutoFilter
End With
Application.DisplayAlerts = True
End Sub