使用VBA删除Excel表中的空行
我试图运行一个代码,在整行没有数据的情况下删除行。我目前正在使用下面的代码,但即使一个单元格为空,它也会删除行。我想我需要使用intersect函数,但还不确定如何使用使用VBA删除Excel表中的空行,excel,row,vba,Excel,Row,Vba,我试图运行一个代码,在整行没有数据的情况下删除行。我目前正在使用下面的代码,但即使一个单元格为空,它也会删除行。我想我需要使用intersect函数,但还不确定如何使用 Dim Rng As Range Dim MainSheet As Worksheet Set MainSheet = Sheet9 MainSheet.Select On Error Resume Next Set Rng = MainSheet.Range("table3")
Dim Rng As Range
Dim MainSheet As Worksheet
Set MainSheet = Sheet9
MainSheet.Select
On Error Resume Next
Set Rng = MainSheet.Range("table3").SpecialCells(xlCellTypeBlanks)
On Error Resume Next
If Not Rng Is Nothing Then
Rng.Delete Shift:=xlUp
End If
这完全取决于你所说的空是什么意思。我注意到您使用的是
xlcelltypebanks
,因此如果您想继续使用range属性,那么您可以将行的单元格计数与SpecialCells
单元格计数进行比较-如果它们匹配,则您有一个“空”行
还有很多其他方法可以做到这一点,但我不知道有哪种方法不需要迭代表中的每一行。假设您想走SpecialCells
路线,您的迭代可能是这样的:
Dim lo As ListObject
Dim lRow As ListRow
Dim rng As Range
Dim delRows As Collection
Set lo = Sheet1.ListObjects("Table1") 'change to your table name
On Error Resume Next
For Each lRow In lo.ListRows
Set rng = Nothing
Set rng = lRow.Range.SpecialCells(xlCellTypeBlanks)
If Not rng Is Nothing Then
If rng.Count = lRow.Range.Cells.Count Then
If delRows Is Nothing Then
Set delRows = New Collection
delRows.Add lRow
Else
delRows.Add lRow, Before:=1
End If
End If
End If
Next
On Error GoTo 0
If Not delRows Is Nothing Then
For Each lRow In delRows
lRow.Delete
Next
End If
这是另一种解决方案,但应以错误的形式考虑,因为它在删除行时实际上改变了表计数。这就是糟糕的编程实践 此外,如果有嵌入的空格,它也不会捕捉它们。仅供参考,我使用表1而不是表9进行调试 从好的方面来说,它更简洁(不管它值多少钱) 还有一些VBA的怪癖,我并不完全理解。例如,如果用它的表达式替换find命令中的“RNG”,你会得到一个错误,除非有人知道这是有道理的,否则我会考虑反直觉。p>
Sub DeleteEmptyTableRows()
Dim MainSheet As Worksheet
Dim tabRng As Range, rng As Range, found As Range
Dim row As Integer
Set MainSheet = Sheet1
MainSheet.Select
Set tabRng = MainSheet.Range("table3")
row = 1
Do While row < tabRng.Rows.Count + 1:
Set rng = tabRng.Rows(row)
Set found = rng.Find("*", rng.Cells(, 1), SearchDirection:=xlPrevious)
If found Is Nothing Then
tabRng.Rows(row).EntireRow.Delete Shift:=xlUp
Else
row = row + 1
End If
Loop
End Sub
Sub-DeleteEmptyTableRows()
将主工作表调整为工作表
尺寸标签rng As Range、rng As Range、FIND As Range
将行设置为整数
设置主图纸=图纸1
主工作表。选择
设置tabRng=MainSheet.Range(“表3”)
行=1
行
如果你发现任何错误,请告诉我。除了不删除有空格的条目外,它还适用于我使用的任何测试数据