Simao ha alcune macro che eseguono molte ricerche e sostituzioni. Tuttavia, quando le macro finiscono, vorrebbe ripristinare la ricerca e sostituire i parametri con quelli in vigore appena prima di eseguire le macro. Quindi, Simao si chiede dove trovare tutte le proprietà per la ricerca e la sostituzione in modo da poterle salvare all’inizio di ogni macro e quindi ripristinarle alla fine.

Come allude Simao, “buona pratica” è fare in modo che la macro restituisca tutto ciò che cambia allo stato in cui si trovava prima dell’esecuzione della macro.

In questo modo la tua macro non rovinerà nient’altro che l’utente potrebbe fare.

L’idea nell’implementazione di questa pratica è seguire questi passaggi:

  1. Scopri cosa cambierà la tua macro. Creare variabili in cui memorizzare tutte le proprietà che verranno modificate. Memorizza le proprietà nelle variabili che hai creato. Fai il tuo lavoro. Ripristina quelle proprietà dalle variabili che hai impostato in precedenza nel passaggio 3

La chiave qui è il passaggio 1. Se non riesci a capire cosa cambierà la tua macro, non puoi procedere con gli altri passaggi. Quando si eseguono operazioni di ricerca e sostituzione, è possibile coinvolgere numerosi oggetti e ciascuno di essi ha un buon numero di proprietà.

Un modo semplice per capire le cose è semplicemente registrare una macro che esegue l’operazione Trova e sostituisci, quindi esaminare il codice prodotto dal registratore. Ad esempio, ho registrato cercando la parola “the”

e sostituendolo con la parola “THE”. Quando ho fermato il registratore di macro e ho guardato cosa ha creato, questa è la parte rilevante di ciò che ho visto:

Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find     .Text = "the"

.Replacement.Text = "THE"

.Forward = True     .Wrap = wdFindContinue     .Format = False     .MatchCase = True     .MatchWholeWord = False     .MatchWildcards = False     .MatchSoundsLike = False     .MatchAllWordForms = False End With

Tornerò tra un momento alle prime due righe di questo codice, ma guarderò tutte le altre righe prodotte. Con l’oggetto .Find, viene specificato un intero passel di proprietà. Si tratta di proprietà corrispondenti alle impostazioni nella finestra di dialogo Trova e sostituisci. Quindi, ora hai un elenco di variabili che devi definire, come minimo, in modo da poter salvare le impostazioni di ciascuna di queste proprietà e successivamente ripristinarle.

Ora torniamo a quelle prime due righe del codice; rappresentano la grande mosca nell’unguento. Il metodo .ClearFormatting elimina qualsiasi formattazione definita per l’operazione Trova e sostituisci. Per vedere quali proprietà sono interessate se definisco la formattazione in Trova e sostituisci, ho nuovamente registrato una macro della stessa operazione Trova e sostituisci, ma questa volta specificando che il testo sostitutivo deve essere in grassetto e sottolineato. Tutto ciò che il registratore ha registrato era lo stesso, con l’eccezione di quattro righe di codice aggiunte subito dopo la seconda riga mostrata sopra:

With Selection.Find.Replacement.Font     .Bold = True     .Underline = wdUnderlineSingle End With

Queste sono le righe che specificano la formattazione che volevo usare nella sostituzione. Nel codice precedente, il registratore di macro mostra tutte le proprietà dell’oggetto .Find. In questo caso, l’unica cosa registrata è ciò che sto cambiando, che si trova nell’oggetto .Font. Ci sono, sfortunatamente, altri oggetti che possono essere specificati oltre all’oggetto .Font -. Paragraph, .Tabs, .Language e così via. Inoltre, non solo possono essere impostati per l’oggetto .Find, ma anche per l’oggetto .Replacement. Questo è il potenziale di centinaia di proprietà che devono essere conservate e ripristinate.

Sembra impossibile? Probabilmente non impossibile, ma è decisamente scoraggiante. Utilizzando il metodo di registrazione delle macro, sarebbe necessario eseguire una ricerca (o una sostituzione; i concetti sono gli stessi) e modificare la formattazione di ogni possibile proprietà di formattazione che potrebbe essere trovata o sostituita.

Se riesci a farlo, finirai con la lista.

Ecco, ad esempio, il codice generato per l’oggetto Selection.Find.Font:

With Selection.Find.Font     .Size = 14     .Bold = True     .Underline = wdUnderlineSingle     .StrikeThrough = True     .DoubleStrikeThrough = False     .Hidden = True     .SmallCaps = True     .AllCaps = False     .Color = wdColorRed     .Superscript = True     .Subscript = False End With

In altre parole, 11 diverse proprietà da salvare e ripristinare. Ma aspetta!

C’è più! (Sembra una pubblicità di un coltello Ginsu, giusto?) Non ho apportato alcuna modifica alla scheda Avanzate della finestra di dialogo Trova carattere, che senza dubbio avrebbe ampliato questo elenco. È possibile avere un’idea del numero totale di proprietà per l’oggetto .Font esaminando i documenti Microsoft per le proprietà di quell’oggetto. (Assicurati di espandere il collegamento Proprietà per l’oggetto .Font utilizzando l’elenco a discesa a sinistra della pagina.)

https://docs.microsoft.com/en-us/office/vba/api/word.font

Vedrai oltre 50 proprietà lì. E, ricorda, c’è un oggetto .Font separato che appartiene all’oggetto .Replacement e ci sono oggetti accoppiati simili per altri elementi di formattazione (.Paragraph, .Tabs, ecc.

Decisamente scoraggiante.

Dopo aver compreso quante proprietà sono interessate quando si esegue un’operazione Trova e sostituisci, si inizia a capire perché molte persone rinunciano a salvare e ripristinare le impostazioni di formattazione per le operazioni. È fattibile; non è un’impresa da poco, però.

_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 (13762) si applica a Microsoft Word 2007, 2010, 2013, 2016, 2019 e Word in Office 365.