我不能使用rng.EntireRow.Delete
当范围不连续时,并且范围是由 Union 构建的。
- 我知道我可以使用排序和自动筛选根据条件删除多行。我想学习新东西。我对向后删除或使用循环不感兴趣,这太耗时了。
- 当范围“usun”不连续时,代码将失败。
- 调试时:范围“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”范围上同时使用第二个、第三个和第六个或其他。
您正在尝试像这样删除表行:
当涉及表/列表对象时,Excel 不会让您删除不连续的整个工作表行 - 无论是通过编程方式还是通过 UI(好吧,至少从上下文菜单 - 由于某种原因可以从“主页”功能区选项卡工作)。
你想做的是这样的:
您无法删除工作表行,但现在 Excel 可以理解我们想要实现的目标。诀窍是以编程方式获得此选择。
迭代ListObject
's ListRows
相反,并且Union
the ListRow.Range
;联合结果范围Delete
然后方法将起作用(不要使用.EntireRow
).
这适用于我的虚拟表,从直接窗格:
union(sheet1.ListObjects(1).ListRows(2).Range,sheet1.ListObjects(1).ListRows(4).Range).Delete
所以用你的代码,我会迭代tbl.ListRows
and Union
the 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)