此代码使Excel无响应。任何人都知道为什么会这样吗?
Sub delblank()
On Error Resume Next
ActiveSheet.UsedRange.Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
If Err Then
MsgBox "No blank cells"
End If
End Sub
答案 0 :(得分:3)
问题是UsedRange
不接受Range("A:A")
作为属性,因为工作表中使用的范围不包含Excel工作表从上到下的整列,即从第1行开始排1048756.
您想要的是引用UsedRange
的第一列:将Range("A:A")
替换为Columns(1)
,如下所示:
ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
现在可行。
当你有一长串的方法和属性给你带来麻烦时,为了找到错误的根源,更容易将其分解为其成分。这就是我所做的:
Dim r1 As Range
Dim r2 As Range
Dim r3 As Range
Dim sh As Worksheet
Set sh = ActiveSheet
Set r1 = sh.UsedRange
Set r2 = r1.Range("A:A") ' Aha, error occurs here! Wow, that was easy to find.
Set r3 = r1.SpecialCells(xlCellTypeBlanks)
r3.EntireRow.Delete
当错误消失时,可以将链条重新组合在一起以摆脱混乱。
除非你完全确定这是你想要的,否则不要使用On Error Resume Next
,因为它只会吞下错误而不会告诉你它们来自哪里。
答案 1 :(得分:0)
尝试这样的事情:
Public Sub Tester()
On Error Resume Next
Columns(1).SpecialCells(xlBlanks).EntireRow.Delete
On Error GoTo 0
End Sub
答案 2 :(得分:-1)
尝试以下代码
Sub delblank()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim rng As Range
On Error Resume Next
Set rng = ActiveSheet.UsedRange.Range("A:A").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "No cells found"
Else
rng.EntireRow.Delete
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub