你好,我想删除一个表的空行,我发现问题。删除表格的空行
Dim rng As Range
rng = Sheets("NewForecast").ListObjects("Table").Range.Select
If rng.Rows = 0 Then
rng.EntireRow.Delete
End If
我不知道怎么写,我试了几种方法,看了这里,但无法找到一个具体的解决方案。如果行是完全空的,我想删除它。任何帮助非常感谢!
你好,我想删除一个表的空行,我发现问题。删除表格的空行
Dim rng As Range
rng = Sheets("NewForecast").ListObjects("Table").Range.Select
If rng.Rows = 0 Then
rng.EntireRow.Delete
End If
我不知道怎么写,我试了几种方法,看了这里,但无法找到一个具体的解决方案。如果行是完全空的,我想删除它。任何帮助非常感谢!
尝试像
Dim ws as Worksheet
Set ws = ActiveWorkbook.Worksheets("SHEET NAME HERE")
Dim lRow as long
Dim rng as range
lRow = ws.Range("A" & Rows.Count).end(xlUp).row
'Assuming your table starts in column A, put in start/end row numbers
For each rng in ws.Range("A1:A" & lRow)
If ws.Range("A" & rng.row) = vbNullString then
ws.Rows(rng.row).Delete
End if
Next rng
不工作..第一行和第三行出现错误。 –
试试我的更新版本。我在飞行中写了这个。 – InternInNeed
没有。此行对于ws.Cells(Cells(start row,1),cells(end row,1))中的每个rng不起作用 –
当试图在一个表中删除行,总是用一个落后For
环(For i = 100 to 1 Step -1
例如)。
当检查某个Range
或是否完全为空时,WorksheetFunction.CountA
非常方便。
Option Explicit
Sub DeleteEmptyRows()
Dim Rng As Range
Dim LastRow As Long
Dim lRow As Long
With Sheets("NewForecast")
Set Rng = .ListObjects("Table").Range
' find last row in "Table"
LastRow = .ListObjects("Table").Range.Rows.Count
' loop through all "Table" rows, loop backwards when deleting
For lRow = LastRow To 2 Step -1
' use CountA to check if entire row is empty
If WorksheetFunction.CountA(.Rows(lRow)) = 0 Then
.Rows(lRow).EntireRow.Delete
End If
Next
End With
End Sub
没有工作,代码似乎对我很好..不知道为什么.. –
@LeandroMoreira你有'NewForecast“表中的'表'对象?那个表的名字是“Table”? –
是的。它是表。但我设法工作..看看。 –
这是可能的,而不循环。
然后用这个:
Rows(firstRow & ":" & lastRow).EntireRow.Delete
这可能是昂贵的(需要较长时间),如果你的价值观的领域是非常大的,但适用于表以及表,快于(更好)循环。
我喜欢你的想法,认为这可以工作,虽然它说“错误13”,类型不匹配 –
是的,我只是扔了一些步骤。 –
我成功了!感谢所有真正打开我的思想的人。看下面,它很简单,做我想做的事情,宏也变得更快。
Range("Table[#Headers]").Select
Selection.AutoFilter
ActiveSheet.ListObjects("Table").Range.AutoFilter Field:=2, Criteria1:="="
Range("Table").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
Range("Table[#Headers]").Select
ActiveSheet.ShowAllData
我添加了一些推荐的代码来摆脱宏录制器喜欢放在那里的所有“选择”。不确定它会在第一次尝试中发挥作用,但希望能有所帮助。可能需要一些调试。 –
请在我的回答下面检查我的代码,并让我知道它是否适合您的需求 –