Denise sta sviluppando una macro e ha bisogno di verificare se il punto di inserimento si trova all’interno di un segnalibro. Ha bisogno di saperlo perché se il punto di inserimento è in un segnalibro, ha bisogno che il codice modifichi il segnalibro; se non è in un segnalibro, il suo codice deve crearne uno.

In teoria il processo è abbastanza semplice. Tutto quello che devi fare è controllare quanti segnalibri ci sono nella selezione, in questo modo:

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

Funziona sia che la selezione sia un intervallo di testo sia che la selezione sia compressa solo nel punto di inserimento. Tuttavia, ci sono un paio di potenziali “trucchi” di cui essere a conoscenza. Il primo è che se il punto di inserimento si trova immediatamente a sinistra di un segnalibro (toccando semplicemente l’inizio del segnalibro), la proprietà Count sarà comunque maggiore di 0. Questo perché la Selezione definita dal punto di inserimento compresso è considerato includere il carattere appena a destra del punto di inserimento.

La seconda cosa da tenere presente è che se la tua selezione è compressa, non puoi fare affidamento sul fatto che la proprietà Count sia 0 o 1. In effetti, potrebbe essere più di 1 perché è possibile che i segnalibri si “sovrappongano”

e, quindi, che il punto di inserimento si trovi all’interno di più di un segnalibro contemporaneamente. Potrebbe quindi essere necessario il codice per verificare in quali segnalibri si trova il punto di inserimento. Il modo più semplice per farlo è esaminare la proprietà Name dei segnalibri, in questo modo:

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

Quando viene eseguito questo codice, bFoundIt sarà True solo se il punto di inserimento si trova all’interno del segnalibro desiderato. Si noti, inoltre, l’inclusione di un comando per comprimere la selezione per assicurarsi che sia realmente in un punto di inserimento e non in un intervallo di testo selezionato.

Un terzo potenziale “problema” è che Word utilizza effettivamente i segnalibri internamente per molti scopi. Ad esempio, li utilizza per definire gli intervalli di stampa, ma non è l’unico posto. I segnalibri definiti dal sistema possono essere rilevati, tuttavia, perché iniziano sempre con un trattino basso. Anche se questo non sarebbe un problema nel codice precedente (dal momento che stai cercando specificamente un segnalibro con un nome particolare), sarebbe un potenziale problema se il tuo codice cerca un segnalibro. Il codice seguente, scritto come funzione richiamabile, può essere utile in una situazione del genere.

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

Per usare questa funzione dall’interno della tua macro, potresti usare qualcosa di semplice come questo:

If Not InBookmark Then     ' create new bookmark End If

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.

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

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