Tipp 0036 Textmarken und ihr Verhalten
Autor/Einsender:
Datum:
  Angie
28.01.2005 (Update)
Entwicklungsumgebung:   Word 97
In diesem Tipp geht es nur um die Textmarken, die über das Menü Einfügen, Textmarke... festgelegt werden können (siehe dazu das Thema Hinzufügen einer Textmarke in der Word-Hilfe).  Eine Textmarke markiert eine Textstelle oder Textpassage, die beispielsweise zum späteren Nachschlagen festgelegt und benannt wird, oder aber auch um damit per VBA einer bestimmten Stelle Text zuzuweisen.
Wird lediglich eine Position in einem Word-Dokument als Textmarke definiert, und dieser dann per VBA ein Text zugewiesen, so wird der Text an der Textmarkenposition eingefügt. Eventuell bereits vorhandener Text wird nach rechts verschoben. Die Textmarke selbst bleibt erhalten.
Wird jedoch ein Wort, Satz oder Absatz im Dokument als Textmarke definiert, so ist damit ein Bereich als Textmarke definiert. Wird dieser Textmarke per VBA neuer Text zugewiesen, so wird sowohl der vorhandene Text als auch die Textmarke selbst überschrieben. Das heißt also, wenn man die Prozedur ein zweites Mal ausführt, wird es nicht mehr funktionieren, da die Textmarke nicht mehr vorhanden ist. Dies lässt sich jedoch durch eine Neudefinition der Textmarke nach dem Zuweisen des Textes bewerkstelligen.
Um Textmarken in einem Word-Dokument anzusprechen, stehen zwei Möglichkeiten zur Verfügung, die GoTo-Methode des Selection-Objekts und die Range-Eigenschaft des Bookmark-Objekts.
1.  Textmarken-Text mit der GoTo-Methode zuweisen
Mit der GoTo-Methode wird eine Textmarke "angesprungen", d. h., es wird im Dokument "herumgehüpft". Dies geht an sich ganz gut, allerdings wird es sehr umständlich, wenn eine Textmarke beispielsweise in der Kopf- und/oder Fusszeile "angesprungen" werden soll, da man dazu in die Kopf-/Fusszeilenansicht wechseln müsste. Das "Anspringen" einer Textmarke mit folgendem Code-Beispiel um Text zuzuweisen, ist also nicht zu empfehlen.
 
Sub BookmarksGoToMethod()
  Dim strBMName   As String
  Dim strBMText   As String
 
  strBMName = "tmTestGoTo"
  strBMText = "Hallihallo..."
 
  If ActiveDocument.Bookmarks.Exists(strBMName) Then
    Selection.GoTo What:=wdGoToBookmark, Name:=strBMName
    Selection.TypeText Text:=strBMText
  End If
End Sub
 
2.  Textmarken-Text mit der Range-Methode zuweisen
Da das Bookmark-Objekt auch über die Range-Eigenschaft verfügt, ist ein "Herumhüpfen" im Dokument nicht notwendig. Der Bereich, den man bearbeiten möchte, muss nicht unbedingt mit dem Bereich übereinstimmen, der im Dokument selektiert ist. Folgender Code bewirkt dasselbe wie das obige Beispiel, allerdings ohne "Herumgehüpfe" im Dokument.
 
Sub BookmarksRangeObjekt()
  Dim strBMName   As String
  Dim strBMText   As String
  
  strBMName = "tmTestRangeNV"
  strBMText = "Hallihallo..."
 
  With ActiveDocument
    If .Bookmarks.Exists(strBMName) Then
      .Bookmarks(strBMName).Range.Text = strBMText
    End If
  End With
End Sub
 
3.  Textmarken-Text mit der Range-Methode zuweisen und Textmarke neu definieren
Ist ein Bereich (z. B. Wort, Satz, Absatz) als Textmarke definiert, wird beim Zuweisen eines neuen Textes sowohl der im Bereich vorhandene Text als auch die Textmarke überschrieben. Um die Textmarke zu "erhalten", ist es notwendig, die Textmarke nach dem Zuweisen des Textes neu zu definieren.
 
Sub BookmarksRangeObjektDef()
  Dim strBMName   As String
  Dim rngBMRange  As Range

  Dim strBMText   As String

  strBMName = "tmTestNeuDef"
  strBMText = "Hallihallo..."

  With ActiveDocument
    If .Bookmarks.Exists(strBMName) Then
      Set rngBMRange = .Bookmarks(strBMName).Range

      rngBMRange.Text = strBMText
      .Bookmarks.Add Name:=strBMName, Range:=rngBMRange

      Set rngBMRange = Nothing
    End If
  End With
End Sub
 
Hinweis
Die im Download befindliche *.bas-Datei kann in Word im VB-Editor importiert werden.

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Word-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (1 kB) Downloads bisher: [ 2285 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 29. Mai 2011