简体   繁体   中英

Run msgbox when items are gone

I have a set of shapes, which can be deleted. However if at least one of them is deleted, then I am getting an error, that the object under the specified name wasn't found.

Basically I would like to make a comment after all, informing me, that all of the shapes have been already deleted.

My code looks like this so far:

 Sub Civremov()
 ActiveSheet.Shapes("Tobyshape").Delete
 ActiveSheet.Shapes("Toby").Delete
 ActiveSheet.Shapes("Upturnshape").Delete
 ActiveSheet.Shapes("Upturndesc").Delete
 ActiveSheet.Shapes("Duct1").Delete
 ActiveSheet.Shapes("Duct2").Delete

 End Sub

Now, when I attempt to delete these elements again, the errors says, that the object under a specified name wasn't found. I would like to make a textbox like this:

     Msgbox("You have already deleted all civil features").

How can I do this?

You could catch an error, however personally I usually like to loop over shapes, check their properties (name in your case) and act accordingly. You could opt to delete shapes when their name is found in a certain array of names?

For example:

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("YourSheetName")
Dim arr As Variant: arr = Array("Tobyshape", "Toby", "Upturnshape", "Upturndesc", "Duct1", "Duct2")

For Each shp In ws.Shapes
    If IsNumeric(Application.Match(shp.Name, arr, 0)) Then
        shp.Delete
    End If
Next

Msgbox "All relevant shapes are deleted." 'Optional

End Sub

If we are speaking of a certain type of shape, you could also include that check into your For loop to minimize the times we call Application.Match

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