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
|
|
|
|
Die im Download befindliche *.bas-Datei kann in Word im VB-Editor importiert werden.
|
|