2010-12-04 37 views
0

J'ai une macro qui génère une étiquette de cas pour une liste de différents produits. Certains produits sont stériles et nécessitent le dessin d'un cercle à placer sur l'étiquette comme emplacement d'un point indicateur de rayonnement. Il y a également une zone de texte à l'intérieur du cercle qui marque le cercle comme l'emplacement du point. J'ai essayé de le faire en insérant une forme automatique d'un cercle et d'en faire un signet, puis en utilisant le code:MS Word 2003 VBA Suppression d'un objet graphique

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

pour supprimer le cercle sur toutes les parties qui ne sont pas stériles. Ce code permet de supprimer le texte de la zone de texte à l'intérieur du cercle, mais le cercle lui-même n'est pas supprimé. Il semble également que la zone de texte elle-même n'est pas supprimée, juste le texte à l'intérieur de la boîte. Est-ce que la commande bookmarks.Delete ne fonctionne pas sur les objets réels? et si ce n'est pas le cas, comment pourrais-je supprimer le cercle et la zone de texte? Merci

Répondre

0

Je suppose que vous devrez supprimer les formes par nom ou en boucle. Le parent du signet renvoie le document, pas la zone de texte. Ceci supprimera aussi bien la zone de texte et le cercle:

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

Merci. cela a parfaitement fonctionné –

0

Vous pouvez vous procurer des formes appartenant à un signet en utilisant la propriété ShapeRange de gamme du signet, et le texte de la forme en utilisant son 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 

La suppression de la forme supprimera également le texte contenu.

0

Vous pouvez supprimer tout sauf le texte et sa mise en forme en exécutant le code suivant dans l'éditeur de vba:

Sous 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