Page 1 of 2 12 LastLast
Results 1 to 10 of 15

Thread: VBA Confirm Message Before Deleting Row

  1. #1
    Junior Member
    Join Date
    Jul 2013
    Posts
    18
    Rep Power
    0

    Exclamation VBA Confirm Message Before Deleting Row

    Hello guys, I have a macro that can delete an entire row, At the End of the macro It will display a MessageBox Saying "Number of Deleted rows: (no. of rows deleted)". I know this macro is working fine, but my problem is, I want to have a Confirm/MessageBox first, saying "Would you like to delete (no. of rows to delete) Rows?" If Yes is pressed It will delete the rows, and when No is pressed It will End the process.

    I hope you guys can help me. I badly need it because macro do not have a UNDO so I want to have a verification first if I have a correct no. of rows to be deleted. Thank you!


    Here is my Code.

    Code:
    Sub Delete_Row()
        Dim calcmode As Long
        Dim ViewMode As Long
        Dim myStrings As Variant
        Dim FoundCell As Range
        Dim I As Long
        Dim ws As Worksheet
        Dim strToDelete As String
        Dim DeletedRows As Long
        
        'for speed purpose
        With Application
            calcmode = .Calculation
            .Calculation = xlCalculationManual
            .ScreenUpdating = False
        End With
            
        'back to normal view, do this for speed
        ViewMode = ActiveWindow.View
        ActiveWindow.View = xlNormalView
        'Turn off Page Breaks, do this for speed
        ActiveSheet.DisplayPageBreaks = False
        
        'search strings here
        strToDelete = Application.InputBox("Enter value to delete", "Delete Rows", Type:=2)
        If strToDelete = "False" Or Len(strToDelete) = 0 Then
            ActiveWindow.View = ViewMode
            With Application
                .ScreenUpdating = True
                .Calculation = calcmode
            End With
            Exit Sub
        End If
        
        'make search strings array for more than one
        myStrings = Split(strToDelete)
        
        'Loop through selected sheets
        For Each ws In ActiveWorkbook.Windows(1).SelectedSheets
            
            'search the values in MyRng
            For I = LBound(myStrings) To UBound(myStrings)
                
                Do 'Make the loop
                
                    'search the used cell/range in entire sheet
                    Set FoundCell = ws.UsedRange.Find(What:=myStrings(I), _
                                                      LookIn:=xlFormulas, _
                                                      LookAt:=xlWhole, _
                                                      SearchOrder:=xlByRows, _
                                                      SearchDirection:=xlNext, _
                                                      MatchCase:=False)
                                               
                    If FoundCell Is Nothing Then Exit Do 'end loop if no result found
                    
                    FoundCell.EntireRow.Delete      'Delete row
                    DeletedRows = DeletedRows + 1   'Count deleted rows
                    
                Loop
                    
            Next I
        
        Next ws
                            
        ActiveWindow.View = ViewMode
        With Application
            .ScreenUpdating = True
            .Calculation = calcmode
        End With
        
        If DeletedRows = 0 Then
            MsgBox "No Match Found!", vbInformation, "Delete Rows Complete"
        Else
            MsgBox "Number of deleted rows: " & DeletedRows, vbInformation, "Delete Rows Complete"
        End If
        
    End Sub

  2. #2
    Administrator Admin's Avatar
    Join Date
    Mar 2011
    Posts
    1,123
    Rep Power
    10
    Hi

    Welcome to ExcelFox!!

    Try

    Code:
    Option Explicit
    
    Sub Delete_Row()
        Dim calcmode As Long
        Dim ViewMode As Long
        Dim myStrings As Variant
        Dim FoundCell As Range
        Dim I As Long
        Dim ws As Worksheet
        Dim strToDelete As String
        Dim DeletedRows As Long
        Dim c       As Range
        Dim fa      As String
        
        'for speed purpose
        With Application
            calcmode = .Calculation
            .Calculation = xlCalculationManual
            .ScreenUpdating = False
        End With
            
        'back to normal view, do this for speed
        ViewMode = ActiveWindow.View
        ActiveWindow.View = xlNormalView
        'Turn off Page Breaks, do this for speed
        ActiveSheet.DisplayPageBreaks = False
        
        'search strings here
        strToDelete = Application.InputBox("Enter value to delete", "Delete Rows", Type:=2)
        If strToDelete = "False" Or Len(strToDelete) = 0 Then
            ActiveWindow.View = ViewMode
            With Application
                .ScreenUpdating = True
                .Calculation = calcmode
            End With
            Exit Sub
        End If
        
        'make search strings array for more than one
        myStrings = Split(strToDelete)
        
        'Loop through selected sheets
        For Each ws In ActiveWorkbook.Windows(1).SelectedSheets
            
            'search the values in MyRng
            For I = LBound(myStrings) To UBound(myStrings)
                Set c = ws.UsedRange.Find(What:=myStrings(I), _
                                                      LookIn:=xlFormulas, _
                                                      LookAt:=xlWhole, _
                                                      SearchOrder:=xlByRows, _
                                                      SearchDirection:=xlNext, _
                                                      MatchCase:=False)
                Set FoundCell = Nothing
                If Not c Is Nothing Then
                    fa = c.Address
                    Do 'Make the loop
                        If FoundCell Is Nothing Then
                            Set FoundCell = c
                        Else
                            Set FoundCell = Union(FoundCell, c)
                        End If
                        DeletedRows = DeletedRows + 1   'Count deleted rows
                        'search the used cell/range in entire sheet
                        Set c = ws.UsedRange.FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> fa
                End If
            Next I
            If Not FoundCell Is Nothing Then
                If MsgBox("Would you like to delete (" & FoundCell.Areas.Count & ") Rows?", vbQuestion + vbYesNo) = vbYes Then
                    FoundCell.EntireRow.Delete
                End If
            End If
        Next ws
        If DeletedRows Then
            MsgBox "Number of deleted rows: " & DeletedRows, vbInformation, "Delete Rows Complete"
        Else
            MsgBox "No Match Found!", vbInformation, "Delete Rows Complete"
        End If
        
        ActiveWindow.View = ViewMode
        With Application
            .ScreenUpdating = True
            .Calculation = calcmode
        End With
        
    End Sub
    Cheers !

    Excel Range to BBCode Table
    Use Social Networking Tools If You Like the Answers !

    Message to Cross Posters

    @ Home - Office 2010/2013/2016 on Win 10 (64 bit); @ Work - Office 2016 on Win 10 (64 bit)

  3. #3
    Junior Member
    Join Date
    Jul 2013
    Posts
    18
    Rep Power
    0
    Hi Sir,

    Thank you for the codes admin!.

    It works! but when I click the 'No' in the confirmation MsgBox it still show the number of deleted rows even if it does not delete any rows. It is almost done

  4. #4
    Junior Member
    Join Date
    Jul 2013
    Posts
    18
    Rep Power
    0
    The problem is when I press 'NO'

    msgbox1.jpg

    It shows the MsgBox

    msgbox2.jpg

    Thank you so much for help admin!

  5. #5
    Administrator Admin's Avatar
    Join Date
    Mar 2011
    Posts
    1,123
    Rep Power
    10
    HI

    OK. See the changes highlighted.

    Code:
    If Not FoundCell Is Nothing Then
                If MsgBox("Would you like to delete (" & FoundCell.Areas.Count & ") Rows?", vbQuestion + vbYesNo) = vbYes Then
                    FoundCell.EntireRow.Delete
                Else
                    GoTo 1
                End If
            End If
        Next ws
        If DeletedRows Then
            MsgBox "Number of deleted rows: " & DeletedRows, vbInformation, "Delete Rows Complete"
        Else
            MsgBox "No Match Found!", vbInformation, "Delete Rows Complete"
        End If
    1:
        ActiveWindow.View = ViewMode
        With Application
            .ScreenUpdating = True
            .Calculation = calcmode
        End With
    Cheers !

    Excel Range to BBCode Table
    Use Social Networking Tools If You Like the Answers !

    Message to Cross Posters

    @ Home - Office 2010/2013/2016 on Win 10 (64 bit); @ Work - Office 2016 on Win 10 (64 bit)

  6. #6
    Junior Member
    Join Date
    Jul 2013
    Posts
    18
    Rep Power
    0
    Hi Admin

    The code works! thank you so much for your fast response. while exploring it more, I found another problem.

    The code loops through different/multiple worksheet that is selected by the user. but using your provided codes when I delete rows from different or MULTIPLE SELECTED WORKSHEETS it only compute the total number of rows in each worksheet. not the total number of rows deleted. You can try it yourself, try to select multiple worksheet and use the macro to delete. Sorry I cannot provide anymore Images. I dont know what happened. I cannot upload anymore

    The problem is with the confirmation MsgBox again. It can only display the total number of rows in each worksheet. but not the total number of rows that should be deleted.

    for example:

    in Sheet1

    MsgBox1 : would you like to delete (1) rows

    in Sheet2

    MsgBox2 : would you like to delete (2) rows

    in Sheet3

    MsgBox3 : would you like to delete (3) rows

    Last MsgBox
    MsgBox4 : number of deleted rows (6)
    Last edited by mackypogi; 08-07-2013 at 02:36 PM.

  7. #7
    Administrator Admin's Avatar
    Join Date
    Mar 2011
    Posts
    1,123
    Rep Power
    10
    Hi

    That's not correct. I used the variable DeletedRows which is calculating the total number of rows to be deleted on all selected sheets.

    Also please be noted that if you select multiple sheets, the deletion happens sheetwise, so the rows count will be for that sheet only.
    Cheers !

    Excel Range to BBCode Table
    Use Social Networking Tools If You Like the Answers !

    Message to Cross Posters

    @ Home - Office 2010/2013/2016 on Win 10 (64 bit); @ Work - Office 2016 on Win 10 (64 bit)

  8. #8
    Junior Member
    Join Date
    Jul 2013
    Posts
    18
    Rep Power
    0
    Quote Originally Posted by Admin View Post
    Hi

    That's not correct. I used the variable DeletedRows which is calculating the total number of rows to be deleted on all selected sheets.

    Also please be noted that if you select multiple sheets, the deletion happens sheetwise, so the rows count will be for that sheet only.

    Sir I would like to delete rows from multiple Worksheets. See my Example on Above code.

  9. #9
    Administrator Admin's Avatar
    Join Date
    Mar 2011
    Posts
    1,123
    Rep Power
    10
    It deletes. Try yourself first.
    Cheers !

    Excel Range to BBCode Table
    Use Social Networking Tools If You Like the Answers !

    Message to Cross Posters

    @ Home - Office 2010/2013/2016 on Win 10 (64 bit); @ Work - Office 2016 on Win 10 (64 bit)

  10. #10
    Junior Member
    Join Date
    Jul 2013
    Posts
    18
    Rep Power
    0
    Quote Originally Posted by Admin View Post
    It deletes. Try yourself first.
    You are right sir, It deletes the rows. the problem is, I will get alot of confirmation button if I select many worksheets/tab.

    For Example: Im going to delete 'try'

    in Sheet1 : try

    MsgBox1 : would you like to delete (1) rows?

    in Sheet2 : try try

    MsgBox2 : would you like to delete (2) rows?

    in Sheet3: try try try

    MsgBox3 : would you like to delete (3) rows?

    Last MsgBox
    MsgBox4 : number of deleted rows (6)
    Last edited by mackypogi; 08-07-2013 at 03:07 PM.

Similar Threads

  1. Deleting a Row with a specific data shown.
    By jffryjsphbyn in forum Excel Help
    Replies: 1
    Last Post: 07-18-2013, 03:41 PM
  2. VBA code message box added
    By rich_cirillo in forum Excel Help
    Replies: 6
    Last Post: 07-08-2013, 05:19 PM
  3. Deleting Records Using Join
    By MMishra in forum MS-Access Tips And Tricks
    Replies: 0
    Last Post: 04-24-2013, 04:06 PM
  4. VBA Show Message On Sheet Activate
    By Howardc in forum Excel Help
    Replies: 2
    Last Post: 10-29-2012, 08:17 PM
  5. Deleting blank rows
    By Rasm in forum Excel and VBA Tips and Tricks
    Replies: 0
    Last Post: 04-14-2011, 03:14 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •