2017-05-30 109 views
1

我想问下我的代码的一些帮助。这是在导入文件后使用宏记录器捕获的。 基本上,我导入了一个文本文件,并将文件导入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

+0

范围(“A10:A”)将无法选择单元格A10下的其余列。在这里寻找替代品:https://stackoverflow.com/questions/6301665/how-to-count-the-number-of-rows-in-excel-with-data/14390619#14390619 – xthestreams

+0

谢谢xthestreams,我是新的以超越宏观。该代码来自其他帖子,我编辑它。基本上,我想删除空白行,以及像“文本”的文本行。 – wezzer

回答

1
  • 我强烈建议避免使用On Error Resume Next因为这只是静音错误消息和你没有看到发生了什么。

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

  • 避免使用选择。选择减慢你的代码很多。

最后你的代码可能看起来类似的东西:

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作为上次声明而不是在开始时进行筛选,以确保所有行都用于自动筛选。

+0

非常感谢! – wezzer

+0

@wezzer如果此答案解决了您的问题,请考虑将其标记为解决方案,以便任何人都可以看到此问题已解决。 –