[英]Removing SpecialType Blank Cells using Excel VBA
该脚本“有效”,但前提是我运行两次。 任何人都知道为什么会这样吗? 处理特殊类型一直是一场噩梦,我不确定这是我还是已知问题。 在Windows 7上使用Excel2010。我尝试重复两次代码,但无济于事。 我尝试将其放在“直到”中,并且总是在我第一次执行时陷入永久循环。 我不确定为什么第二次执行似乎有效
'Remove all Blank Cells
On Error Resume Next
For i = Cells.SpecialCells(xlCellTypeBlanks).Count To 1 Step -1
Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Next i
If Cells.SpecialCells(xlCellTypeBlanks).Count = 0 Then
ActiveWorkbook.Close (True)
编辑 :更新的答案显示了如何删除“ specialcells”范围不会重置工作表的UsedRange
属性,以及这如何导致问题。
尝试在带有或不带有Activesheet.UsedRange
调用的工作表上多次运行此子项Activesheet.UsedRange
注释掉...
Sub Tester()
Dim rng As Range
On Error Resume Next
Set rng = ActiveSheet.Cells.SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rng Is Nothing Then
Debug.Print "have empty cells"
rng.EntireRow.Delete
ActiveSheet.UsedRange
Else
Debug.Print "no empty cells"
End If
End Sub
保存并重新打开似乎还会重置UsedRange ...
EDIT2,您应该非常小心地使用它! 即使该行中有非空白单元格,它也会删除整行。 某些类型的数据布局可以,但其他类型则不能。 在某些情况下,调用“删除”时,您可能还会看到错误“无法在重叠选择上使用该命令”。
我将通过@TimWilliams的答案更为优雅的方式对此加以说明,但是您可以尝试以下操作:
Sub Deletes()
Dim rng As Range
Set rng = ActiveSheet.UsedRange
' Check each cell in the range and if its value is empty, delete the row
For Each Cell In rng
If Cell.Value = "" Then
Cell.EntireRow.Delete
End If
Next Cell
' Close
ActiveWorkbook.Close
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.