2016-11-18 183 views
0

你好,我想删除一个表的空行,我发现问题。删除表格的空行

Dim rng As Range 
    rng = Sheets("NewForecast").ListObjects("Table").Range.Select 
    If rng.Rows = 0 Then 
    rng.EntireRow.Delete 
    End If 

我不知道怎么写,我试了几种方法,看了这里,但无法找到一个具体的解决方案。如果行是完全空的,我想删除它。任何帮助非常感谢!

+0

请在我的回答下面检查我的代码,并让我知道它是否适合您的需求 –

回答

0

尝试像

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 
+0

不工作..第一行和第三行出现错误。 –

+0

试试我的更新版本。我在飞行中写了这个。 – InternInNeed

+0

没有。此行对于ws.Cells(Cells(start row,1),cells(end row,1))中的每个rng不起作用 –

0

当试图在一个表中删除行,总是用一个落后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 
+0

没有工作,代码似乎对我很好..不知道为什么.. –

+0

@LeandroMoreira你有'NewForecast“表中的'表'对象?那个表的名字是“Table”? –

+0

是的。它是表。但我设法工作..看看。 –

0

这是可能的,而不循环。

  1. 过滤表格,显示的值是您要删除
  2. 找到的第一个“可删除”行(其中cell.value =“”)在表的最后一列(将最通常的那些大多数人不使用最后一列),
  3. 然后找到最后一个“deletable”行(其中cell.value =“”)。

然后用这个:

Rows(firstRow & ":" & lastRow).EntireRow.Delete 

这可能是昂贵的(需要较长时间),如果你的价值观的领域是非常大的,但适用于表以及表,快于(更好)循环。

+0

我喜欢你的想法,认为这可以工作,虽然它说“错误13”,类型不匹配 –

+0

是的,我只是扔了一些步骤。 –

1

我成功了!感谢所有真正打开我的思想的人。看下面,它很简单,做我想做的事情,宏也变得更快。

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 
+0

我添加了一些推荐的代码来摆脱宏录制器喜欢放在那里的所有“选择”。不确定它会在第一次尝试中发挥作用,但希望能有所帮助。可能需要一些调试。 –