首页 文章

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

提问于
浏览
2

如果在特定列中清空单元格,我正在编写一个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

3 回答

  • 1

    随便挑选

    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
    
  • 4

    您可以使用 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
    
  • 1

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

    由于您已经在检查n> 0,您只需在"n= "行上方添加 On Error Resume Next 即可 . 如果此后有更多代码,您可能希望在此部分之后放置 On Error GoTo 0 ,以便它不会忽略以后的错误 .

相关问题