James inserisce i segnalibri nei suoi documenti per motivi di riferimenti incrociati. A volte, nel processo di modifica, potrebbe essere necessario eliminare qualcosa che aveva precedentemente aggiunto ai segnalibri. James si chiede se c’è un modo per scoprire se ci sono riferimenti incrociati al testo (e al segnalibro) che sta pensando di eliminare.

Se devi eseguire questa operazione solo una volta ogni tanto, puoi farlo manualmente. Il modo in cui ti avvicini, tuttavia, dipenderà da come hai creato il riferimento incrociato. Vedete, quando inserite un riferimento incrociato, Word visualizza la finestra di dialogo Riferimento incrociato. (Vedi figura 1.)

image

Figura 1. La finestra di dialogo Riferimento incrociato.

Nella finestra di dialogo, utilizzando l’elenco a discesa Tipo di riferimento, è possibile scegliere il tipo di riferimento incrociato che si desidera creare. Ogni tipo di riferimento utilizza una variazione diversa del campo REF per inserire il riferimento incrociato effettivo. Ad esempio, se inserisci un riferimento incrociato a un segnalibro, il campo inserito avrà questo aspetto:

{ REF MyBookmark \h }

La parte “MyBookmark” è il nome del segnalibro a cui stai facendo riferimento.

Il parametro (in questo caso \ h) è controllato dall’elenco a discesa Inserisci riferimento a nella finestra di dialogo Riferimento incrociato. Se invece inserisci un rimando a un’intestazione nel documento, sarà simile a questo:

{ REF _Ref47603047 \h }

La parte “_Ref47603047” di questo codice di campo è un segnalibro generato dal sistema nascosto. Si riferisce all’intestazione selezionata per il riferimento incrociato. È possibile visualizzare questi segnalibri nascosti se si visualizza la finestra di dialogo Segnalibro e si fa clic sulla casella di controllo Segnalibri nascosti nella parte inferiore della finestra di dialogo.

In questo suggerimento, poiché James ha specificamente chiesto di trovare riferimenti incrociati al testo con segnalibro, presumo che quando ha creato il riferimento incrociato, lo abbia fatto scegliendo Segnalibro nell’elenco a discesa Inserisci riferimento in della Croce -finestra di dialogo di riferimento. Questo in realtà rende anche un po ‘più facile scoprire se il tuo segnalibro ha riferimenti incrociati ovunque.

Inizia cercando di capire il nome del segnalibro che si trova nel testo che intendi eliminare. In questo caso, presumo che sia un nome come MyBookmark. Tutto quello che devi fare è premere Alt + F9, che fa sì che Word visualizzi i codici di campo nel tuo documento piuttosto che i risultati dei codici di campo. A questo punto puoi semplicemente cercare il nome del segnalibro (MyBookmark, in questo caso) e sarai in grado di trovare qualsiasi campo REF (ricorda, i campi REF sono usati per i riferimenti incrociati)

che contiene il nome del segnalibro. Se non trovi il nome del segnalibro, non ci sono riferimenti incrociati a quel segnalibro e puoi tranquillamente eliminare il testo e il segnalibro che contiene. Quando hai finito, premi di nuovo Alt + F9 per disattivare la visualizzazione dei codici di campo.

Se hai bisogno di scoprire se un segnalibro è referenziato più di una volta ogni tanto o se desideri eseguire una ricerca più completa rispetto a quella offerta da Trova e sostituisci, dovresti considerare l’utilizzo di una macro. Il seguente set di quattro macro può tornare utile in questa situazione.

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

Per utilizzare le macro, tutto ciò che devi fare è selezionare il testo che stai considerando di eliminare e quindi eseguire la macro IsBookmarkReferenced.

A sua volta, utilizza le altre tre funzioni per capire se qualche segnalibro nel testo selezionato è referenziato altrove. La macro controllerà i campi non solo nel documento principale stesso, ma anche in intestazioni, piè di pagina e caselle di testo.

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (7619) si applica a Microsoft Word 2007, 2010, 2013, 2016, 2019 e Word in Office 365.