Aktuelle Seite:
/vba/vbatextmarken2.htm
Letzte Änderung: 02.08.2006

Getestet unter Word97Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003  
Makro/Datei speichern
Print

Das Ändern von Text in einer (geschlossenen) Textmarke sollte eigentlich kein großes Problem darstellen. Aber leider zeigt hier VBA eine seiner Schwächen: Beim Ändern oder Füllen eines Textmarkenbereiches wird die Textmarke gelöscht.

Beispiel:
Es soll der Text der existierende Textmarke Test durch den Text Neuer Text ersetzt werden.

Activedocument.Bookmarks("Test").Range.Text="Neuer Text"

Beim Ausführen dieser Anweisung wird aber die Textmarke gelöscht.

Um das Löschen der Textmarke zu vermeiden, muss man sich mit einem kleinen Trick behelfen:
Man merkt sich in einem Range-Objekt den Range-Bereich der Textmarke, ändert im Range-Objekt den Text und erstellt eine neue Textmarke gleichen Namens um die Grenzen des Range-Objektes:

If oDoc.Bookmarks.Exists(strBMName) Then
    Set rng = oDoc.Bookmarks(strBMName).Range
    rng.Text = strBMText
    oDoc.Bookmarks.add strBMName, rng
End If

In eine Funktion gekapselt erfolgt der Aufruf mit Angabe des Dokumentes (als Objektverweis), des Textmarken-Namens und des neuen Textmarken-Inhalts.
Die vollständige Funktion und der Aufruf sehen dann folgendermaßen aus:

Function fkt_ReplaceBookmarkText(oDoc As Document, strBMName As String, strBMText As String)  
Dim rng As Range
If oDoc.Bookmarks.Exists(strBMName) Then
    Set rng = oDoc.Bookmarks(strBMName).Range
    rng.Text = strBMText
    oDoc.Bookmarks.add strBMName, rng
    Set rng = Nothing
End If
End Function  
Sub Aufruf_ReplaceBookmarkText() ' Aufruf fkt_ReplaceBookmarkText ActiveDocument, "TextmarkenName", "TextmarkenInhalt" End Sub

Ein Anwendungsbeispiel, in dem über ein UserForm alle Textmarken (auch verborgene) angezeigt und bequem geändert werden können, folgt demnächst.


 www.chf-online.de/vba/vbatextmarken2.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)