如何解决excel-vba中的错误400

我正在写一个excel-vba来查找和删除整行,如果有空白单元格在一个特定的列。 我的macros工作正常,如果至less有一个空白单元格,但如果没有空白单元格显示错误400。 我的代码是

Sub GPF_Sign() Dim i As Integer, n as integer Dim LROW As Long LROW = Sheets("GPF").Range("B200").End(xlUp).Row n = Range("D9:D" & LROW).SpecialCells(xlCellTypeBlanks).Cells.Count If n > 0 Then Range("D9:D" & LROW).SpecialCells(xlCellTypeBlanks).EntireRow.Delete End If End Sub 

拿你的select

方法1:使用OERN(在错误恢复之后)

 Sub WAY_ONE() Dim ws As Worksheet, LROW As Long Dim rng As Range Set ws = Sheets("GPF") With ws LROW = .Range("B" & .Rows.Count).End(xlUp).Row On Error Resume Next Set rng = .Range("D9:D" & LROW).SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not rng Is Nothing Then rng.EntireRow.Delete End With End Sub 

方式2:使用自动filter

 Sub WAY_TWO() Dim ws As Worksheet, LROW As Long Dim rng As Range Set ws = Sheets("GPF") With ws .AutoFilterMode = False LROW = .Range("B" & .Rows.Count).End(xlUp).Row Set rng = .Range("D9:D" & LROW) With rng 'Filter, offset(to exclude headers) and delete visible rows .AutoFilter Field:=1, Criteria1:="" .Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete End With .AutoFilterMode = False End With End Sub 

您可以使用On Error Resume Next ,但这不是通常推荐的方法,因为它可能会掩盖其他错误。 相反,请尝试以无错方式计算n

 n = Application.CountIf(Sheets("GPF").Range("D9:D" & LROW), "") 

还有一个更好的方法是使用AutoFilter

 Sub GPF_Sign() With Sheets("GPF").Range("D8:D200") .AutoFilter 1, "" .Offset(1).EntireRow.Delete .AutoFilter End With End Sub 

您正在使用的方法“.SpecialCells(xlCellTypeBlanks)”试图返回一个范围。 如果没有空白单元格,下一部分“.cells.count”试图计数任何东西。 这就是为什么它给你一个错误。

由于您已经在检查n> 0,所以您可以在“n =”行上面添加On Error Resume Next 。 如果在这之后还有更多的代码,那么你可能想在这个部分后面加上一个On Error GoTo 0 ,所以它不会忽略以后的错误。