Instrumentul Găsire și înlocuire din Word poate fi util în unele macrocomenzi. Aveți posibilitatea să îl utilizați, de exemplu, pentru a ajusta rapid mai multe stiluri într-un întreg document. Sau, ați putea automatiza procesul de finalizare a documentelor (verificarea ortografică, revizuirea informațiilor corporative, în căutarea de referințe vechi, sau orice rutină care trebuie să fie făcută înainte de publicare).
Pentru a accesa caracteristicile Găsire și înlocuire Word prin VBA, utilizați obiectele Find și Replacement. Această secțiune ilustrează modul de lucru cu metoda Execute a obiectului Find, de obicei cea mai bună metodă de utilizat atunci când lucrați cu Find. De obicei, veți specifica parametrii pentru operațiunea Find ca argumente în comanda Execute, dar îi puteți specifica în prealabil utilizând proprietățile dacă preferați această abordare.
Tabelul următor descrie proprietățile Find care sunt utile pentru majoritatea operațiilor.
Utilizați obiectul Replacement pentru a specifica criteriile de înlocuire într-o operație de înlocuire. Obiectul Replacement are următoarele proprietăți, care corespund proprietăților obiectului Find (dar în schimb se referă la operațiunea de înlocuire): Font, Highlight, ParagraphFormat, Style și Text.
Înțelegerea sintaxei metodei Execute
Sintaxa pentru metoda Execute este următoarea:
expression.Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format,
ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl, MatchPrefix, MatchSuffix, MatchPhrase, IgnoreSpace, IgnorePunct)
Ultimele cinci argumente, începând cu MatchPrefix, nu sunt afișate în instrumentul Auto List Members din Editor, nici în lista de parametri MSDN. Cu toate acestea, ele pot fi utilizate în cod, ca de exemplu, IgnoreSpace:=True
.
Argumentele cel mai frecvent utilizate pentru această metodă sunt explicate aici:
Aveți posibilitatea să căutați caractere speciale utilizând aceleași caractere speciale pe care le utilizați atunci când utilizați interactiv caseta de dialog FInd din Word (de exemplu, ^p pentru un marcaj de paragraf sau ^t pentru caracterul tab) și metacaractere utilizând metacaracterele Windows tradiționale. Pentru ca metacaracterele să funcționeze într-o macrocomandă, trebuie să setați MatchWildcards la True. Aveți posibilitatea să căutați un simbol introducând caracterul ^ și un zero, urmat de codul său de caracter. De exemplu, caracterul pentru ghilimele de închidere duble (”), specificați ^0148, deoarece codul său de caracter este 148.
Cum se pot folosi obiectele grafice în câmpul ReplaceWith
Pentru a utiliza un obiect grafic așa cum este descris mai sus, obiectul trebuie să se afle în stratul de text (nu plutind peste text). Dacă graficul plutește peste text, ^c înlocuiește cu conținutul anterior al textului din Clipboard.
Această
frază
devine echivalentă cu
această frază.
Căutare practică: Nu uitați să ștergeți formatarea
Un comportament în Word care poate încurca chiar și pe utilizatorii și dezvoltatorii cu experiență este că setările din caseta de dialog Find persistă. De exemplu, să spunem că căutați un stil, cum ar fi Heading1. Totul merge bine, găsiți titlurile și închideți caseta de dialog Find And Replace (sau, dacă căutați folosind codul VBA, macrocomanda termină executarea).
Apoi, oarecum mai târziu, executați o altă macrocomandă care folosește caseta de dialog Find And Replace sau utilizați caseta pentru a căuta un cuvânt, cum ar fi program, despre care știți că apare de mai multe ori în document, dar utilitarul Find afișează un mesaj care afirmă că "Elementul de căutare nu a fost găsit" (“The search item was not found.”). Ce nu e bine?
Căutarea inițială pentru acel stil titlu persistă într-o sesiune din Word. Chiar și trecerea la un alt document în timpul sesiunii curente nu va șterge criteriile de căutare, inclusiv orice stil, font sau alte criterii speciale de căutare, ar fi MatchCase, care ar fi putut fi utilizate anterior.
Cu alte cuvinte, acum căutați cuvântul program, dar și stilul Heading1. Deci, nici unul dintre instanțele cuvântului program scrise ca text normal nu va fi afișat, deoarece acestea nu sunt scrise în stilul specificat.
Dacă căutați un stil, dar nu ați făcut clic pe butonul No Formatting din caseta de dialog Find and Replace atunci când ați terminat, acea căutare de stil rămâne activă.
De asemenea, atunci când utilizați obiectul Find și obiectul Replacement într-o macrocomandă, va trebui adesea să utilizați metoda ClearFormatting, care elimină orice formatare specificată în câmpurile Find What și Replace With. Utilizarea metodei ClearFormatting are același efect ca și clic pe butonul No Formatting cu focalizarea pe caseta Find What sau pe Replace With. Următoarele afirmații (aici utilizate într-o structură With) șterg formatarea din obiectele Find și, respectiv Replacement:
With ActiveDocument.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
End With
Este o idee bună să vă obișnuiți să folosiți metoda ClearFormatting la începutul oricărei macrocomenzi care caută orice. Uneori nu e necesar? Sigur. Dar ștergerea setărilor anterioare de căutare este o asigurare bună împotriva acestui bug comun și încurcat.
O situație similară apare atunci când utilizați metoda Execute, așa este descrisă mai devreme. Rețineți că atunci când utilizați Execute, trebuie să specificați aproape întotdeauna argumentul FindText , chiar dacă specificați doar un șir gol ("") pentru a vă permite să căutați formatarea. Dacă nu specificați FindText, riscați să căutați din greșeală șirul căutat anterior.
Să punem Find and Replace la lucru
Cel mai simplu mod de a utiliza Find and Replace este să specificați numai parametrii de care aveți nevoie într-o instrucțiune Execute, eliminând orice parametri opționali care sunt irelevanți pentru căutare. Pentru liste lungi de argumente, este întotdeauna mai bine să utilizați abordarea de numire a argumentului, astfel:
FindText:="National Velvet"
Acest exemplu înlocuiește toate perechile de marcaje de paragraf (eliminând astfel liniile goale) din documentul activ cu marcaje de paragraf unic; puteți căuta caracterele ^p^p și să le înlocuiți cu ^p, ca în comanda următoare:
ActiveDocument.Content.Find.Execute FindText:="^p^p",
ReplaceWith:="^p", _
Replace:=wdReplaceAll
Executând această comandă într-o buclă, aveți posibilitatea să înlocuiți toate marcajele de paragraf suplimentare din document. Aici va trebui să utilizați o buclă, deoarece constanta wdReplaceAll specifică faptul că activitatea de găsire și înlocuire ar trebui să treacă doar o dată prin întregul document.
Aici este necesară bucla, deoarece este posibil să aveți mai multe marcaje de paragraf în clustere, cum ar fi patru la rând: ^p^p^p^p. Prima trecere prin document ar înlocui cele patru cu două (^p^p), astfel încât va trebui să parcurgă din nou documentul pentru a reduce caracterele ^p la câte una. Cu alte cuvinte, în acest caz, trebuie să repetați de mai multe ori căutarea și înlocuirea.
Puteți folosi și o comandă With pentru a specifica proprietățile pentru operațiunea Find and Replace. În exemplul de cod de mai jos, documentul Example.docm este deschis, iar codul înlocuiește scrisul formatat îngroșat (bold) cu scris înclinat (italic).
LISTING 21.1: Folosirea With pentru a specifica proprietățile
1. With Documents("Example.docm").Content.Find
2. .ClearFormatting
3. .Font.Bold = True
4. With .Replacement
5. .ClearFormatting
6. .Font.Bold = False
7. .Font.Italic = True
8. End With
9. .Execute FindText:= "", ReplaceWith:= "" _
Format:=True, Replace:=wdReplaceAll
10. End With