Denise entwickelt ein Makro und muss testen, ob sich die Einfügemarke innerhalb eines Lesezeichens befindet. Sie muss dies wissen, denn wenn sich die Einfügemarke in einem Lesezeichen befindet, muss der Code das Lesezeichen ändern. Wenn es sich nicht in einem Lesezeichen befindet, muss ihr Code eines erstellen.

Theoretisch ist der Prozess recht einfach. Sie müssen lediglich auf folgende Weise überprüfen, wie viele Lesezeichen in der Auswahl enthalten sind:

If Selection.Bookmarks.Count > 0 Then     ' Inside a bookmark End If

Dies funktioniert unabhängig davon, ob es sich bei der Auswahl um einen Textbereich handelt oder ob die Auswahl nur auf die Einfügemarke reduziert ist. Es gibt jedoch einige potenzielle „Fallstricke“, die beachtet werden müssen. Das erste ist, dass, wenn sich die Einfügemarke unmittelbar links von einem Lesezeichen befindet (nur den Anfang des Lesezeichens berühren), die Count-Eigenschaft immer noch größer als 0 ist. Dies liegt daran, dass die Auswahl, die durch die reduzierte Einfügemarke definiert wird, ist Es wird davon ausgegangen, dass das Zeichen rechts von der Einfügemarke enthalten ist.

Das zweite, was Sie beachten sollten, ist, dass Sie sich beim Reduzieren Ihrer Auswahl nicht darauf verlassen können, dass die Count-Eigenschaft entweder 0 oder 1 ist. In der Tat kann sie mehr als 1 sein, da Lesezeichen möglicherweise „überlappen“

und daher muss sich die Einfügemarke gleichzeitig in mehr als einem Lesezeichen befinden. Möglicherweise benötigen Sie daher Ihren Code, um zu testen, in welchen Lesezeichen sich die Einfügemarke befindet. Der einfachste Weg, dies zu tun, besteht darin, die Name-Eigenschaft der Lesezeichen folgendermaßen zu untersuchen:

Dim bFoundIt As Boolean Dim J As Integer

bFoundIt = False Selection.Collapse If Selection.Bookmarks.Count > 0 Then     ' Inside a bookmark     For J = 1 To Selection.Bookmarks.Count         If Selection.Bookmarks(J).Name = "DesiredName" Then             bFoundIt = True         End If     Next J End If

Wenn dieser Code ausgeführt wird, ist bFoundIt nur dann wahr, wenn sich die Einfügemarke innerhalb des gewünschten Lesezeichens befindet. Beachten Sie auch die Aufnahme eines Befehls zum Reduzieren der Auswahl, um sicherzustellen, dass sie sich wirklich in einer Einfügemarke und nicht in einem Bereich ausgewählten Textes befindet.

Ein drittes potenzielles „Gotcha“ ist, dass Word Lesezeichen für viele Zwecke intern verwendet. Zum Beispiel werden sie verwendet, um Druckbereiche zu definieren, aber das ist nicht der einzige Ort. Systemdefinierte Lesezeichen können jedoch erkannt werden, da sie immer mit einem Unterstrich beginnen. Während dies im vorhergehenden Code kein Problem darstellt (da Sie speziell nach einem Lesezeichen mit einem bestimmten Namen suchen), wäre es ein potenzielles Problem, wenn Ihr Code nach einem Lesezeichen sucht. Der folgende Code, der als aufrufbare Funktion geschrieben wurde, kann in einer solchen Situation hilfreich sein.

Function InBookmark() As Boolean     ' Returns True if the insertion point is inside     ' any non-system bookmark. Also collapses the     ' selection to an insertion point

Dim bFoundIt As Boolean     Dim J As Integer

bFoundIt = False     Selection.Collapse

For J = 1 To Selection.Bookmarks.Count         If Left(Selection.Bookmarks(J).Name) <> "_" Then             bFoundIt = True         End If     Next J

InBookmark = bFoundIt End Function

Um diese Funktion in Ihrem Makro zu verwenden, können Sie Folgendes verwenden:

If Not InBookmark Then     ' create new bookmark End If

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.

(Microsoft Word ist die beliebteste Textverarbeitungssoftware der Welt.) Dieser Tipp (6905) gilt für Microsoft Word 2007, 2010, 2013 und 2016.