Search code examples
exceldelete-rowvba

How to resolve error 400 in excel-vba


I am writing an excel-vba to find and delete entire row if having blanks cell in a particular column. My macro is working fine if there is at least one blank cell but showing error 400 if there is no blank cell. My code is

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

Solution

  • Take your pick

    Way 1: Using OERN (On Error Resume Next)

    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
    

    Way 2: Using Autofilter

    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