2
www.ChF-Online.de  

Textmarken füllen(II)

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
aktiv aktiv Verschiedenes
 Dateiname ohne Endung
 Dokumentstrukturanzeige
 Fenster anordnen
 Fensterliste
 Fensterliste (II)
 Kalender erstellen
 Kommentarinformationen
 Lesezeichen
 Beliebigen Ordner öffnen
 Position der Einfügemarke
 Seitenanfang/-ende
 Shapes ansprechen
 Sicherheitskopien erstellen
 Word-Startparameter
 Word-Startparameter II
 Startordner "Bild einfügen"
 Tags finden u. bearbeiten
 Tags finden/bearbeiten (II)
 Text2WordArt
 Textbausteine verwenden
 Textmarken (I)
aktiv  Textmarken (II)
 Überschrift zu Textmarke
 VBA-Konverter
 Wasserzeichen
 Zeichen tauschen
 Feld-Arbeiten
 Form-Sachen
 Menü-/Symbolleisten
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
 Fix-und-Fertiges/Projekte
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
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.


 Besucher: 2 online  |  19 heute  |  2998 diesen Monat  |  1649868 insgesamt | Seitenaufrufe: 185   Letzte Änderung: 02.08.2006 © 2001-14 Christian Freßdorf
  Ich würde lieber angegriffen werden als ignoriert. Das schlimmste, was einem Autor passieren kann, ist, daß die anderen zu seinen Arbeiten schweigen.
Samuel Johnson
 powered by phpCMS and PAX