简体   繁体   中英

Delete worksheet if cells are empty

This would be a very simple question. But I am not sure why this is not working in my excel vba code.

Sheets("I- ABC").Select
If IsEmpty(Range("A3").Value) = True And _
    IsEmpty(Range("A4").Value) = True And _
    IsEmpty(Range("A5").Value) = True And _
    IsEmpty(Range("A6").Value) = True Then
    Sheets("I- ABC").Delete
End If

What type of error do you get? I tried this code and Excel displays only warning message:

警告信息

You can avoid this message by adding:

Application.DisplayAlerts = False

and

Application.DisplayAlerts = True

at the beginning and at the end of your code respectively.

--Edited code

Sub Example()

Application.DisplayAlerts = False

With Sheets("I- ABC")
    If Application.WorksheetFunction.CountA(.Range("A3:A6")) = 0 Then
        .Delete
    End If
End With

Application.DisplayAlerts = True

End Sub

Try Similiar to This

Sub Test()
    Application.DisplayAlerts = False
    With Sheets("Sheet1")
     Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With
    Application.DisplayAlerts = True
End Sub

PS: It works for me and deletes rows containg empty cells in `A:A``

Approach Suggested by @Tim Williams also works for me as per following code in my situation

Sub Test6()
  Dim r As Range, rows As Long, i As Long
  Set r = ActiveSheet.Range("A3:A6")
  rows = r.rows.Count
  For i = rows To 1 Step (-1)
    If WorksheetFunction.CountA(r.rows(i)) = 0 Then r.rows(i).Delete
  Next
End Sub

It works even if we use Application instead of WorksheetFunction

If If Application.CountA(Range("A3:A6")) = 0 Then is not working as Tim suggested then that means the cells have blank spaces or unprintable characters.

Try this

Sub Sample()
    Dim pos As Long

    With Sheets("I- ABC")
        pos = Len(Trim(.Range("A3").Value)) + _
              Len(Trim(.Range("A4").Value)) + _
              Len(Trim(.Range("A5").Value)) + _
              Len(Trim(.Range("A6").Value))

        If pos = 0 Then
            Application.DisplayAlerts = False
            .Delete
            Application.DisplayAlerts = True
        Else
            MsgBox "The cells are not empty"
        End If
    End With
End Sub

With skkakkar's idea expanded.

Sub Hello()
    Dim rng As Range
    Application.DisplayAlerts = 0
    On Error GoTo er
    Set rng = Range("A3:A6").SpecialCells(xlCellTypeConstants, 23)
    Exit Sub
er:     MsgBox "ActiveSheet.Delete" 'delete sheet
End Sub

If the spaces are the issue, then you can try this code:

Public Sub RemoveIfEmpty()

    Application.DisplayAlerts = False

    With Sheets("I- ABC")
        If Trim(.Range("A3") & .Range("A4") & .Range("A5") & .Range("A6")) = "" Then
            .Delete
        End If
    End With

    Application.DisplayAlerts = True

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM