Удалить все формы слоя чертежа Excel, соответствующие шаблону

Рассмотрим таблицу Excel с большим количеством форм. Чтобы выбрать две формы:

ActiveSheet.Shapes.Range(Array("Freeform 314", "Freeform 278")).Select

Цель состоит в том, чтобы удалить все фигуры, начиная с "Freeform".

Я нашел пример, ссылающийся на MS VBScript Regular Expression 5.5, но формы не находятся на определенных ячейках. Количество или определенное количество фигур почти не показано. Таким образом, уродливым решением может быть грубая сила имен строк, с другой стороны, я надеюсь, что вы можете помочь мне в достижении элегантного решения.

Код ниже не работает, но вы можете лучше понять проблему.

Sub DeleteShapes()
 Dim re As New RegExp
 re.Pattern = "Freeform*"
 Dim cell As Range
 For Each cell In ActiveSheet.Shapes.Range(Array(re.Pattern)).Select
 Selection.delete
 Next cell
End Sub
2 ответа

Похоже, это было бы намного проще, если бы вы пошли

Dim shape as Variant
For each shape in ActiveSheet.Shapes
 If instr(1, shape.Name, "Freeform") <> 0 then shape.delete
Next shape

Протестировано, и оно работает. Он принимает всю коллекцию фигур на активном листе, и для каждого из них он удаляет его, если слово "Freeform" находится в имени формы.

Если вы хотите специально удалить только фигуры, начиная с "Freeform", то вместо тестирования: instr (1, shape.Name, "Freeform" ) <> 0 Вы должны использовать: instr (1, shape.Name, "Freeform" ) = 1


Вам не нужно регулярное выражение, чтобы найти формы Freeform.

Dim shape As Excel.shape
For Each shape In ActiveSheet.Shapes
 If Left(shape.Name, 8) = "Freeform" Then
 shape.Delete
 End If
Next

licensed under cc by-sa 3.0 with attribution.