我想在下面提一些关于我的代码的帮助。导入文件后使用宏录制器捕获此内容。 基本上,我导入了一个文本文件,并在将文件导入Excel后(宏开始)我删除行10-12并自动过滤它是有效的。 (宏观停止)
之后,我想从A10开始删除所有空/空行。所以我添加了代码(在"'ADDED to DELETE ROWS"
下)。
我需要的是用“TEST”删除所有行,删除所有空白行并过滤第一行。
代码的第一部分正常工作,但要删除空白行不起作用。 你能帮我辨认一下我的代码有什么问题吗? 请点击链接显示结果(之前和之后)。
谢谢你,感谢你的帮助。
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 :(得分: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
作为最后一个语句而不是在开头过滤,以确保所有行都用于自动过滤。