选择和删除多行

时间:2019-02-09 22:44:47

标签: excel vba listobject excel-tables

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

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

2 个答案:

答案 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

以下示例程序对我有用。由于您的表已链接到“列表框”,因此请对条件进行适当的调整。 [删除前的表格]

table before delete删除后的表格

table after 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