excel - 删除 "unioned"非连续范围

标签 excel vba

当范围不连续且范围由 Union 构建时,我无法使用 rng.EntireRow.Delete

  1. 我知道我可以使用排序和自动过滤器根据条件删除多行。我想学习新东西。我对向后删除或使用循环不感兴趣,这太耗时了。
  2. 当范围“usun”不连续时,代码会失败。
  3. 调试时:范围“usun.Address”似乎构建正确,例如“$E$10:$E15,$E$20,$E$30:$E$32”
Sub delSomeRows()

    Set tbl = ThisWorkbook.Sheets("test").ListObjects(1)
       ' formulas into values
        tbl.DataBodyRange.Value = tbl.DataBodyRange.Value 

    ' Get the column reference to analysis
       Dim komorka      ' cell to be analysed
       Dim usun As Range    ' multiple ranges to delete
       Dim filter As Range  ' column in the table
       Set filter = tbl.ListColumns("Filtr").DataBodyRange

    ' Get Union range to delete
       For Each komorka In filter
           If Len(komorka.Value) <> 0 Then
                If usun Is Nothing Then
                    Set usun = komorka
                Else
                    Set usun = Application.Union(usun, komorka)
                End If
           End If
        Next komorka

    ' delete all rows at once
        usun.EntireRow.Delete ' ERROR 1004 HERE

End Sub

我正在尝试删除一些行,例如使用 EntireRow.Delete 在“Unioned”范围上同时使用第二个、第三个和第六个或其他。

最佳答案

您正尝试像这样删除表行:

non-contiguous entire sheet rows selected

当涉及表/列表对象时,Excel 不会让您删除不连续的整个工作表行 - 无论是通过编程方式还是通过 UI(好吧,至少从上下文菜单中 - 由于某种原因可在“主页”功能区选项卡中使用) .

你想做的是这样的:

listrows are selected; non-contiguous deletion works

您无法删除工作表行,但现在 Excel 可以理解我们想要实现的目标。诀窍是以编程方式获得此选择。

改为迭代ListObjectListRows,并Union ListRow.Range;然后,联合结果范围的 Delete 方法将起作用(不要使用 .EntireRow)。

这适用于我的虚拟表,从直接 Pane :

union(sheet1.ListObjects(1).ListRows(2).Range,sheet1.ListObjects(1).ListRows(4).Range).Delete

因此,使用您的代码,我将迭代 tbl.ListRowsUnion ListRow.Range 项 - 未经测试,但这应该工作:

Dim filterColumn As Long
filterColumn = tbl.ListColumns("Filtr").Index

Dim currentRow As ListRow
For Each currentRow In tbl.ListRows
    If Len(currentRow.Range.Cells(ColumnIndex:=filterColumn).Value) <> 0 Then
        If usun Is Nothing Then
            Set usun = currentRow.Range
        Else
            Set usun = Application.Union(usun, currentRow.Range)
        End If            
    End If
Next

If Not usun Is Nothing Then usun.Delete

关于excel - 删除 "unioned"非连续范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57529933/

相关文章:

excel - 字典键按行分配

excel - 在版本控制中跟踪 Excel 文件

php - 如何在 phpspreadsheet 中添加新行?

vba - 如何对不同工作表上的多个数据透视表中相应字段的行总计求和?

excel - 识别数组中的子单元格

excel - 在 Chrome 浏览器中打开多个 URL

java - 使用 Apache POI 刷新数据透视表

java - Apache POI : Excel Pivot Table - Row Label

SQL CopyFromRecordSet 在 VBA 中无故变慢

excel - 根据单元格值对整行着色