Удалить все фигуры на листе excel, кроме элементов управления формой

У меня есть рабочий лист excel, где макрос, привязанный к кнопке, рисует динамические формы на основе пользовательских параметров ввода на листе.

Я пытаюсь написать новый макрос для очистки листа или, другими словами, удалить все фигуры на листе.

Я попытался использовать приведенный ниже код, и он действительно удаляет все фигуры, однако элементы управления формой кнопки также удаляются в процессе. Есть ли простой способ избавиться от фигур (стрелки, текстовые поля, эллипсы и т.д.) На листе? Спасибо, куча!!!

Sub DeleteAllShapes()

Dim Shp As Shape

For Each Shp In ActiveSheet.Shapes
    Shp.Delete
Next Shp

End Sub

Ответ 1

Чтобы удалить автошоп и текстовые поля, вы можете использовать:

Sub DeleteAllShapes()

Dim Shp As Shape

For Each Shp In ActiveSheet.Shapes
    If Shp.Type = msoAutoShape Or Shp.Type = msoTextBox Then Shp.Delete
Next Shp

End Sub

В качестве альтернативы вы можете работать наоборот и указывать типы, которые нельзя удалить. Вы можете использовать перечисленные типы, но более читабельны для использования имен типов. Следующий фрагмент удалит все, кроме элементов управления Form и OLE.

Sub DeleteAllShapes()

Dim Shp As Shape

For Each Shp In ActiveSheet.Shapes
    If Not (Shp.Type = msoOLEControlObject Or Shp.Type = msoFormControl) Then Shp.Delete
Next Shp

End Sub

Полный список типов форм MSO. http://msdn.microsoft.com/en-us/library/office/aa432678(v=office.12).aspx

Рон де Бруин имеет хорошую коллекцию фрагментов, которые могут иметь отношение к любому другому, кто сталкивается с этим вопросом. http://www.rondebruin.nl/controlsobjectsworksheet.htm