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

Abh*_*sav 4 excel vba delete-row

如果特定列中有空白单元格,我正在编写一个 excel-vba 来查找和删除整行。如果至少有一个空白单元格,我的宏工作正常,但如果没有空白单元格,则显示错误 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
Run Code Online (Sandbox Code Playgroud)

A.S*_*S.H 5

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

n = Application.CountIf(Sheets("GPF").Range("D9:D" & LROW), "")
Run Code Online (Sandbox Code Playgroud)

另一种更好的方法是使用AutoFilter

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


Sid*_*out 2

随你挑选

方式 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
Run Code Online (Sandbox Code Playgroud)

方式2:使用自动过滤器

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
Run Code Online (Sandbox Code Playgroud)