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: 0 online  |  0 heute  |  0 diesen Monat  |  2228573 insgesamt | Seitenaufrufe: 47   Letzte Änderung: 02.08.2006 © 2001-18 Christian Freßdorf
  Die letzte Stimme, die man hören wird, bevor die Welt explodiert, wird die eines Experten sein, der sagt: "Das ist technisch unmöglich!"
Sir Peter Ustinov
 powered by phpCMS and PAX