0
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

它不会删除行,我不明白为什么......

4

2 回答 2

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
于 2019-02-10T03:36:51.843 回答
0

表格的工作方式与常规范围不同。即使您进入 Excel,单击表格并尝试执行 Alt-ED(删除)。通常,它会为您提供向上移动单元格、向左移动单元格、删除整行或删除整列的选项,但如果您从表格中执行此操作,它不会做任何事情。

我猜测了一下,但我怀疑这与您的意外行为有关。

相反,如果您只想删除行,请改为删除表行 (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

除非您关心数据表之外的相同行中的内容,否则这些应该可以工作。

于 2019-02-10T01:40:50.350 回答