2010-12-04 2 views
0

У меня есть макрос, который генерирует метку case для списка разных продуктов. Некоторые из продуктов являются стерильными и требуют рисования круга для размещения на этикетке в качестве места для точки индикатора излучения. Существует также текстовое поле внутри круга, которое обозначает круг как место для точки. Я пытался сделать это, вставив автофигур круга и делают его закладку, а затем с помощью кода:MS Word 2003 VBA Удаление графического объекта

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

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

ответ

0

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

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

Спасибо. что отлично работало – 2010-12-07 20:33:07

0

Вы можете разжиться форм, принадлежащих к закладке, используя 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

Вы можете удалить все, кроме текста и его форматирование, выполнив следующий код в редакторе 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

Смежные вопросы