Запустите msgbox, когда элементы исчезнут - PullRequest
1 голос
/ 22 апреля 2020

У меня есть набор фигур, которые можно удалить. Однако, если хотя бы один из них удален, я получаю сообщение об ошибке, что объект с указанным именем не найден.

В основном я хотел бы все-таки оставить комментарий, сообщив мне, что все фигуры уже были удалены.

Мой код выглядит так:

 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

Теперь, когда я пытаюсь снова удалить эти элементы, в ошибках говорится, что объект под указанным именем не найден. Я хотел бы сделать текстовое поле так:

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

Как я могу это сделать?

1 Ответ

2 голосов
/ 22 апреля 2020

Вы можете обнаружить ошибку, однако лично мне обычно нравится l oop над фигурами, проверять их свойства (имя в вашем случае) и действовать соответственно. Вы можете удалить фигуры, если их имя найдено в определенном массиве имен?

Например:

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

Если мы говорим о фигуре определенного типа, вы также можете включите этот чек в ваш For l oop, чтобы свести к минимуму время, которое мы называем Application.Match

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...