删除空白行

时间:2017-05-30 00:43:44

标签: excel-vba vba excel

我想在下面提一些关于我的代码的帮助。导入文件后使用宏录制器捕获此内容。 基本上,我导入了一个文本文件,并在将文件导入Excel后(宏开始)我删除行10-12并自动过滤它是有效的。 (宏观停止)

之后,我想从A10开始删除所有空/空行。所以我添加了代码(在"'ADDED to DELETE ROWS"下)。 我需要的是用“TEST”删除所有行,删除所有空白行并过滤第一行。

代码的第一部分正常工作,但要删除空白行不起作用。 你能帮我辨认一下我的代码有什么问题吗? 请点击链接显示结果(之前和之后)。

results-image

谢谢你,感谢你的帮助。

Sub Macro2()
    Rows("10:12").Select
    Selection.Delete Shift:=xlUp
    Selection.AutoFilter

    'ADDED to DELETE ROWS
    'Worksheets("Sheet1").Activate
    On Error Resume Next
    With Range("A10:A")
        .Value = .Value
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With
End Sub

的问候,wezzer

1 个答案:

答案 0 :(得分:1)

  • 我强烈建议您避免使用On Error Resume Next,因为这样只会使错误消息静音,而您却看不到发生了什么。

  • 始终使用Range等工作表限定myWs.Range,以避免选择错误的工作表并弄乱数据。永远不要假设工作表。

  • 避免使用Select。选择会大大减慢代码的速度。

最后你的代码看起来像这样:

Sub DeleteSeveralRows()
    Dim myWs As Worksheet
    Set myWs = ThisWorkbook.Worksheets("MySheetName") 'set your sheet name

    'Delete rows 10 to 12 and autofilter
    With myWs.Rows("10:12")
        .Delete Shift:=xlUp
        .AutoFilter
    End With

    Dim lastRow As Long
    lastRow = myWs.Range("A" & myWs.Rows.Count).End(xlUp).Row 'find last used row

    With myWs.Range(myWs.Cells(10, "A"), myWs.Cells(lastRow, "A"))
        .Value = .Value  'convert formulas to values whithin the range from with block (column A only)
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'delete rows where column A is blank
    End With
End Sub

作为.Value = .Value的替代方法,它仅将A列中的公式转换为值(只有列{A}在with - 块中引用)。您可以使用.EntireRow.Value = .EntireRow.Value来转换整行。

我还建议使用myWs.UsedRange.Autofilter作为最后一个语句而不是在开头过滤,以确保所有行都用于自动过滤。