Denise está desarrollando una macro y necesita probar para ver si el punto de inserción se encuentra dentro de un marcador. Ella necesita saber esto porque si el punto de inserción está en un marcador, necesita que el código modifique el marcador; si no está en un marcador, entonces su código debe crear uno.

En teoría, el proceso es bastante sencillo. Todo lo que necesita hacer es verificar cuántos marcadores hay en la selección, de esta manera:

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

Esto funciona si la selección es un rango de texto o si la selección se contrae solo en el punto de inserción. Sin embargo, hay un par de posibles «trampas» a tener en cuenta. La primera es que si el punto de inserción está inmediatamente a la izquierda de un marcador (simplemente tocando el inicio del marcador), la propiedad Count seguirá siendo mayor que 0. Esto se debe a que la selección definida por el punto de inserción contraído es se considera que incluye el carácter justo a la derecha del punto de inserción.

La segunda cosa a tener en cuenta es que si su selección está contraída, no puede confiar en que la propiedad Count sea 0 o 1. De hecho, podría ser más de 1 porque es posible que los marcadores se «superpongan»

y, por tanto, que el punto de inserción esté dentro de más de un marcador simultáneamente. Por lo tanto, es posible que necesite su código para probar en qué marcadores se encuentra el punto de inserción. La forma más sencilla de hacer esto es examinar la propiedad Name de los marcadores, de esta manera:

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

Cuando se ejecuta este código, bFoundIt será True solo si el punto de inserción está dentro del marcador deseado. Note, también, la inclusión de un comando para contraer la selección para asegurar que realmente esté en un punto de inserción y no en un rango de texto seleccionado.

Un tercer problema potencial es que Word usa marcadores internamente para muchos propósitos. Por ejemplo, los usa para definir rangos de impresión, pero ese no es el único lugar. Sin embargo, los marcadores definidos por el sistema se pueden detectar porque siempre comienzan con un guión bajo. Si bien esto no sería un problema en el código anterior (ya que está buscando específicamente un marcador con un nombre en particular), sería un problema potencial si su código busca algún marcador. El siguiente código, escrito como una función invocable, puede ser útil en tal situación.

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

Para usar esta función desde dentro de su macro, podría usar algo tan simple como esto:

If Not InBookmark Then     ' create new bookmark End If

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.

link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

WordTips es su fuente de formación rentable en Microsoft Word.

(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (6905) se aplica a Microsoft Word 2007, 2010, 2013 y 2016.