Удалить все формы слоя чертежа Excel, соответствующие шаблону - PullRequest
3 голосов
/ 03 декабря 2010

Рассмотрим рабочий лист Excel с множеством форм.Чтобы выбрать две фигуры:

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

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

Я нашел пример, ссылающийся на MS VBScriptРегулярное выражение 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 ]

4 голосов
/ 03 декабря 2010

Вам не нужно регулярное выражение для поиска фигур произвольной формы.

Dim shape As Excel.shape

For Each shape In ActiveSheet.Shapes

    If Left(shape.Name, 8) = "Freeform" Then
        shape.Delete
    End If

Next
3 голосов
/ 03 декабря 2010

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

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

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