Encontrar referencias cruzadas a marcadores específicos (Microsoft Word)
James marca elementos en sus documentos para hacer referencias cruzadas. A veces, en el proceso de edición, es posible que deba eliminar algo que haya marcado previamente. James se pregunta si hay alguna manera de averiguar si hay referencias cruzadas al texto (y al marcador) que está pensando en eliminar.
Si solo necesita realizar esta tarea de vez en cuando, puede hacerlo manualmente. Sin embargo, cómo lo aborde dependerá de cómo creó la referencia cruzada. Verá, cuando inserta una referencia cruzada, Word muestra el cuadro de diálogo Referencia cruzada. (Ver figura 1)
Figura 1. Cuadro de diálogo Referencia cruzada.
En el cuadro de diálogo, utilizando la lista desplegable Tipo de referencia, puede elegir el tipo de referencia cruzada que desea crear. Cada tipo de referencia utiliza una variación diferente del campo REF para insertar la referencia cruzada real. Por ejemplo, si inserta una referencia cruzada a un marcador, entonces el campo que se inserta se ve así:
{ REF MyBookmark \h }
La parte «MyBookmark» es el nombre del marcador al que está haciendo referencias cruzadas.
El parámetro (en este caso \ h) se controla mediante la lista desplegable Insertar referencia a en el cuadro de diálogo Referencia cruzada. Si, en cambio, inserta una referencia cruzada a un encabezado en el documento, se verá similar a esto:
{ REF _Ref47603047 \h }
La parte «_Ref47603047» de este código de campo es un marcador generado por el sistema que está oculto. Se refiere al encabezado que seleccionó para su referencia cruzada. Puede ver estos marcadores ocultos si muestra el cuadro de diálogo Marcador y hace clic en la casilla de verificación Marcadores ocultos en la parte inferior del cuadro de diálogo.
En este consejo, debido a que James pidió específicamente encontrar referencias cruzadas al texto marcado como favorito, voy a asumir que cuando creó la referencia cruzada, lo hizo eligiendo Marcador en la lista desplegable Insertar referencia a de la Cruz -cuadro de diálogo de referencia. En realidad, esto también hace que sea un poco más fácil encontrar si su marcador tiene referencias cruzadas en cualquier lugar.
Empiece por averiguar el nombre del marcador que está en el texto que está considerando eliminar. En este caso, voy a asumir que es un nombre como MyBookmark. Todo lo que necesita hacer es presionar Alt + F9, lo que hace que Word muestre los códigos de campo en su documento en lugar de los resultados de los códigos de campo. En este punto, simplemente puede buscar el nombre del marcador (MyBookmark, en este caso) y podrá encontrar cualquier campo REF (recuerde, los campos REF se utilizan para referencias cruzadas)
que contiene el nombre del marcador. Si no encuentra el nombre del marcador, entonces no hay ninguna referencia cruzada a ese marcador y puede eliminar de forma segura el texto y el marcador que contiene. Cuando haya terminado, presione Alt + F9 nuevamente para apagar la visualización de códigos de campo.
Si necesita averiguar si se hace referencia a un marcador más de una vez cada tanto, o si desea realizar una búsqueda más completa que la que ofrece Buscar y reemplazar, debería considerar el uso de una macro. El siguiente conjunto de cuatro macros puede resultar útil en esta situación.
Sub IsBookmarkReferenced() Dim aStory As Range Dim aShape As Shape Dim aField As Field Dim bkName As String Dim bReffed As Boolean bReffed = False If Selection.Bookmarks.Count > 0 Then bkName = Selection.Bookmarks(1).Name For Each aStory In ActiveDocument.StoryRanges If TestForBookmark(aStory, bkName) Then bReffed = True Else Select Case aStory.StoryType Case wdMainTextStory, wdEvenPagesHeaderStory, _ wdPrimaryHeaderStory, wdEvenPagesFooterStory, _ wdPrimaryFooterStory, wdFirstPageHeaderStory, _ wdFirstPageFooterStory For Each aShape In aStory.ShapeRange If aShape.TextFrame.HasText Then If TestForBookmark(aShape.TextFrame.TextRange, bkName) Then bReffed = True End If Next End Select Next aStory Endif Next aStory sTemp = "Bookmark " & bkName & " is " If Not bReffed Then sTemp = sTemp & "NOT " sTemp = sTemp & "referenced in the document." Else sTemp = "There is no bookmark in the selected text." End If MsgBox sTemp End Sub
Function TestForBookmark(tRange As Range, bkName As String) As Boolean Dim aField As Field TestForBookmark = True For Each aField In tRange.Fields Select Case aField.Type Case wdFieldRef, wdFieldAsk, wdFieldBarCode, _ wdFieldGoToButton, wdFieldHyperlink, _ wdFieldNoteRef, wdFieldPageRef, wdFieldSet If BookRef(aField.Code.Text, aField.Type) = bkName Then Exit Function Case wdFieldTOC, wdFieldTOA If TOCRef(aField.Code.Text) = bkName Then Exit Function End Select Next aField TestForBookmark = False End Function
Function BookRef(str As String, typeCode As Long) As String Dim s As String Dim i As Long s = Trim(str) If s <> "" Then i = InStr(s, " ") If i > 0 Then s = Trim(Mid(s, i)) If typeCode = wdFieldHyperlink Then If InStr(s, "\l") > 0 Then s = Mid(s, InStr(s, """") + 1) i = InStr(s, """") If i > 1 Then s = Left(s, i - 1) Else s = "" End If Else i = InStr(s, " ") If i > 0 Then s = Trim(Left(s, i)) End If End If BookRef = s End Function
Function TOCRef(str As String) As String Dim s As String Dim i As Long s = Trim(str) i = InStr(s, "\b") If i = 0 Then TOCRef = "" Exit Function End If s = Trim(Mid(s, i + 2)) i = InStr(s, " ") If i > 0 Then s = Left(s, i - 1) TOCRef = s End Function
Para usar las macros, todo lo que necesita hacer es seleccionar el texto que está considerando eliminar y luego ejecutar la macro IsBookmarkReferenced.
A su vez, utiliza las otras tres funciones para averiguar si algún marcador en el texto seleccionado se hace referencia en otro lugar. La macro comprobará los campos no solo en el documento principal en sí, sino también en los encabezados, pies de página y cuadros de texto.
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 (7619) se aplica a Microsoft Word 2007, 2010, 2013, 2016, 2019 y Word en Office 365.