MS Word 2003 VBA Удаление графического объекта - PullRequest
0 голосов
/ 05 декабря 2010

У меня есть макрос, который генерирует метку регистра для списка различных продуктов.Некоторые из продуктов являются стерильными и требуют нанесения круга на этикетке в качестве места для точки индикатора радиации.Внутри круга также есть текстовое поле, которое помечает круг как местоположение точки.Я попытался сделать это, вставив авто форму круга и сделав ее закладкой, а затем с помощью кода:

ThisDocument.Bookmarks("GammaDot").Range.Delete 

, чтобы удалить круг на всех нестерильных частях.Этот код работает для удаления текста из текстового поля внутри круга, но сам круг не удаляется.Также кажется, что само текстовое поле не удаляется, просто текст внутри поля.Команда bookmarks.Delete не работает на реальных объектах?и если это не так, как бы я удалил круг и текстовое поле?Спасибо

Ответы [ 3 ]

0 голосов
/ 06 декабря 2010

Вы можете получить формы, принадлежащие закладке, используя свойство ShapeRange Range закладки, а текст формы - ее TextFrame:

Dim bkmk As Bookmark
Set bkmk = ActiveDocument.Bookmarks("circle")
Dim shp As Shape
Set shp = bkmk.Range.ShapeRange.Item(1)
Debug.Print shp.TextFrame.TextRange.Text
shp.Delete

Удаление фигуры также удалит содержащийся текст.

0 голосов
/ 02 августа 2017

Вы можете удалить все, кроме текста и его форматирования, запустив следующий код в редакторе vba:

Sub DeleteAllExceptText ()

Dim i As Integer

With ActiveDocument
    For i = .Tables.Count To 1 Step -1
        .Tables(i).Delete
    Next i
End With

Dim j As Integer

With ActiveDocument
    For j = .Shapes.Count To 1 Step -1
        .Shapes(j).Delete
    Next j

Dim k As Integer

With ActiveDocument
    For k = .InlineShapes.Count To 1 Step -1
        .InlineShapes(k).Delete
    Next k

End Sub

0 голосов
/ 05 декабря 2010

Подозреваю, вам придется либо удалять фигуры по имени, либо в цикле. Родитель закладки возвращает документ, а не текстовое поле. Это приведет к удалению как текстового поля, так и круга:

For i = ThisDocument.Shapes.Count To 1 Step -1
    ''Debug.Print ThisDocument.Shapes(1).Name
    ThisDocument.Shapes(i).Delete
Next
...