【问题标题】:Select and Delete Multiple Rows选择和删除多行
【发布时间】:2023-03-23 15:06:01
【问题描述】:
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

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

【问题讨论】:

  • 有什么问题。请提供更详细的解释,并附上您正在使用的数据的屏幕截图或示例

标签: excel vba listobject excel-tables


【解决方案1】:

表格的工作方式与常规范围不同。即使您进入 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

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

【讨论】:

    【解决方案2】:

    对于删除自动过滤表中的行,必须使用

     .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
    

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 2014-02-28
      • 2012-07-30
      • 1970-01-01
      • 2019-01-18
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多