Excel VBA – 删除表中的空白行

我试图运行一个macros,select表格列中的空白单元格,并删除整个行。

下面的脚本除了删除部分,它会提示run-time error 1004 - "Delete method of Range class failed"

任何想法如何解决这个问题? 谢谢

 Sub test() Range("Table1[[New]]").Activate Selection.SpecialCells(xlCellTypeBlanks).Select Selection.EntireRow.Delete End Sub 

很好的问题! 没有表, .EntireRow.Delete总是工作,但在表内,它看起来像它不。

这工作:

 Sub Test() Dim Rng As Range On Error Resume Next Set Rng = Range("Table1[[New]]").SpecialCells(xlCellTypeBlanks) On Error Goto 0 If Not Rng Is Nothing Then Rng.Delete Shift:=xlUp End If End Sub 

实际上你可以一次完成,但需要使用ListObject对象及其DataBodyRangeListColumns属性:

 Sub ClearBlankCellsInColumnNew() Dim rngBlanks As Excel.Range With Worksheets("Sheet1").ListObjects("Table1") On Error Resume Next Set rngBlanks = Intersect(.DataBodyRange, .ListColumns("New").Range).SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not rngBlanks Is Nothing Then rngBlanks.Delete End If End With End Sub 

第1步:在表格中添加一个帮助器列,检查该行中是否有空白字段。 例如,如果您的表格中有3列:A(价格),B(数量)和C(成本),则可以添加第四列D并将其标记为“任何空白?”。 等式可以是=IF(OR(ISBLANK([@Price]),ISBLANK([@Quantity]),ISBLANK([@Cost])),"Yes","No")

这会给你一个列来过滤查看所有的空白。

第2步:在VBA中,您将执行以下操作:

 Range("MyTableNameHere").AutoFilter Field:=Range("MyTableNameHere[Any Blanks?]").Column, Criteria1:="Yes" Application.DisplayAlerts = False Range("MyTableNameHere").ListObject.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete Application.DisplayAlerts = True Range("MyTableNameHere").AutoFilter Field:=Range("MyTableNameHere[Any Blanks?]").Column 

这基本上是使用助手列过滤到您想要在表中删除的行,select表中的所有可见数据,并且不对表格进行过滤。 我正在search如何删除表中所有可见的行,发现这个和弄乱,直到我知道这将工作。 把它和一个帮助栏组合起来,select所有空白的行看起来就像你想要的一样。

修改以前的答案:

 On Error Resume Next Set Rng = ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not Rng Is Nothing Then Rng.Delete Shift:=xlUp End If