Până acum, am lucrat cu programarea care afectează un întreg document. Dar când trebuie să scrieți cod care funcționează numai cu o parte a unui document (un cuvânt, paragraf sau orice altceva), puteți accesa aceste zone în trei moduri:
Utilizarea obiectului Selection este similară cu lucrul interactiv din Word și este eficientă cu proceduri care necesită utilizatorului să selecteze un obiect sau să poziționeze cursorul de inserare intermitent pentru a desemna conținutul din document pe care ar trebui să îl acceseze procedura.
Utilizarea obiectului Selection este, de asemenea, eficientă atunci când învățați să utilizați VBA cu Word, deoarece multe acțiuni pe care le înregistrați utilizând Macro Recorder utilizează obiectul Selection.
Obiectul Selection reprezintă selecția curentă în documentul activ din Word. Selecția poate fi foarte mică (restrânsă până la punctul de inserare a cursorului intermitent), caz în care nu este selectat nimic. Sau, un obiect Selecție poate conține unul sau mai multe obiecte - unul sau mai multe caractere, unul sau mai multe cuvinte, unul sau mai multe paragrafe, o ilustrație, un tabel, întregul document. Sau, selecția poate fi o combinație a acestor obiecte. Orice obiect este selectat.
Chiar dacă selecția este restrânsă la un punct de inserare, îl puteți utiliza pentru a face referire la obiectele de lângă selecție. De exemplu Selection.Paragraphs(1).Range.Words(10).Text returnează al zecelea cuvânt din paragraful în care se află punctul de inserare (sau, dacă se selectează un paragraf sau mai multe paragrafe, al zecelea cuvânt din primul paragraf).
Verificarea tipului de selecție
Word recunoaște nouă tipuri diferite de selecții. Când lucrați în documentul activ, va trebui adesea să verificați ce tip de selecție este activă, astfel încât să știți dacă nu aveți de-a face cu nicio selecție (doar cu punctul de inserare), un bloc de text obișnuit sau un tip special de text, ar fi un tabel sau o ilustrație.
În funcție de selecția curentă, este posibil să nu puteți întreprinde anumite acțiuni în procedură și este posibil să nu doriți să întreprindeți alte acțiuni. De exemplu, nu aveți posibilitatea să inserați un rând de tabel într-un paragraf de text obișnuit.
Tabelul următor enumeră tipurile de selecții din Word.
Pentru a afla ce tip de selecție aveți în prezent, uitați-vă la proprietatea Type a obiectului Selection. Următoarele comenzi verifică dacă selecția curentă este doar un punct de inserție înainte de a introduce un text literal. Textul nu va fi inserat dacă utilizatorul a selectat, de exemplu, câteva caractere, un cuvânt sau un paragraf:
If Selection.Type = wdSelectionIP Then
Selection.TypeText "Text inserat."
End If
Verificarea Story Type a selecției
Dincolo de tipul de selecție, uneori va trebui să aflați în ce "poveste" (story) se află selecția – cea principală a textului, cea a comentariilor, cea principală a antetului și așa mai departe. Microsoft utilizează cuvântul story (în loc de zonă, de tip sau de alți termeni poate mai descriptivi) pentru a însemna un tip distinct de conținut.
Verificarea zonei story vă poate ajuta să evitați problemele, cum ar fi încercarea de a modifica un antet sau un subsol cu elemente pe care Word le poate face numai la textul principal.
Story este zona documentului în care se află selecția curentă. Deci, de cele mai multe ori, story este zona principală din text (wdMainTextStory). Acesta este documentul și elementele din el. Dar elementele story alternative sunt alte zone, precum notele de subsol, cadrele, anteturile și subsolurile, după puteți vedea în tabelul următor, care enumeră constantele wdStoryType și zonele la care corespund.
Este posibil să observați o altă caracteristică capricioasă, enigmatică a tabelului. Acesta începe valoarea de enumerare cu 1. Comparați asta cu tabelul de mai sus, care începe cu 0. Astfel de inconsecvențe fac ca programarea să fie mai dificilă.
Tipuri de story din Word
Iată un exemplu de cod care afișează o casetă de mesaj dacă selecția nu se afișează în textul principal al unui document:
If Selection.StoryType <> wdMainTextStory Then
MsgBox "Intervalul selectat nu se află în textul principal."
End If
Obținerea altor informații despre selecția curentă
Pentru a lucra eficient cu o selecție, va trebui adesea să știți ce conține și unde este se află. Pentru a afla, utilizați proprietatea Information pentru a afla detaliile de care aveți nevoie. Tabelul de mai jos enumeră exemple de informații utile disponibile în proprietatea Information.
Iată un exemplu care arată se utilizează proprietatea Information:
If Selection.Information(wdCapsLock) = True Then
MsgBox "Tasta Caps Lock este activată (ON)."
End If
Cititorii pot observa o inconsecvență în acest cod. În celelalte exemple de cod din această secțiune, nu s-au utilizat paranteze în jurul unei constante, iar operatorul (= sau <> sau orice altceva) este plasat între proprietate și constantă, așa se arată în acest exemplu:
Selection.Type = wdSelectionlP
Dar cu proprietatea Information, utilizați paranteze și mutați operatorul în partea dreaptă a constantei:
Selection.Information(wdCapsLock) =
Această sintaxă și punctuație diferită este încă o excepție de la regulă. Ar trebui, prin urmare, să vă amintiți că, dacă sintaxa așteptată sau cea tipică afișează un mesaj de eroare din Editor, ar trebui să încercați o sintaxă diferită pentru a vedea dacă funcționează.
Pentru a vedea lista completă a tuturor membrilor, deschideți Browserul de obiecte (F2) și defilați în jos în lista Clase până când vedeți wdInformation. Faceți dublu clic pe obiect pentru a vedea membrii săi listați în lista Membrilor "WdInformation" din dreapta.
Informații disponibile în proprietatea Information
Inserarea textului la o selecție
Aveți posibilitatea să inserați text la o selecție utilizând metoda TypeText a obiectului Selection, să inserați text înainte de selecție utilizând metoda InsertBefore sau să inserați text după selecție utilizând metoda InsertAfter.
Metoda TypeText inserează doar un șir de text în document dacă selecția este restrânsă (collapsed) – nu conține nimic (dacă este doar cursorul de inserare intermitent cu nimic selectat efectiv). Dar dacă este selectat ceva, cum ar fi un cuvânt sau o expresie, acea selecție este înlocuită de șir atunci când executați metoda TypeText. Cu toate acestea, metodele InsertBefore și InsertAfter nu înlocuiesc o selecție. Ele doar introduc noul șir.
Sintaxa este următoarea:
Selection.TypeText string
Selection.InsertAfter string
Selection.InsertBefore string
Aici, string este o expresie necesară de tip String care conține textul pe care doriți să îl inserați între ghilimele duble, ca în acest exemplu:
Selection.TypeText "Vă rugăm să veniți la reuniune vinerea viitoare la ora 9:00 A.M." Selection.InsertBefore "Dr. "
Selection.InsertAfter vbCr & Address
Când utilizați metoda InsertAfter sau InsertBefore, VBA extinde selecția pentru a include textul pe care l-ați inserat. (Puteți vedea textul, celulele sau alte elemente selectate într-un document, deoarece Word modifică fundalul din albul implicit în culoarea cadrului documentului.) Când utilizați metoda TypeText, rezultatul este o selecție restrânsă - indiferent dacă înlocuiți o selecție sau o selecție restrânsă. (Rețineți că o selecție restrânsă înseamnă că nu este selectat nimic — doar punctul de inserare intermitent.)
Un paragraf selectat include și marcajul pentru sfârșit de paragraf
Când aveți selectat un paragraf întreg care se termină cu un marcaj de paragraf, selecția include marcajul de paragraf. Acest lucru face ca orice text pe care încercați să îl adăugați la sfârșitul selecției să apară la începutul paragrafului următor, nu la sfârșitul paragrafului selectat.
Inserarea unui paragraf într-o selecție
Aveți posibilitatea să inserați paragrafe utilizând următoarele metode:
Puteți face ca VBA să adauge un paragraf folosind comanda Selection.TypeParagraph.
Aplicarea unui stil
Pentru a aplica un stil unui paragraf, setați proprietatea Stil a obiectului Paragraf:
Selection.Style = "Heading 3"
Vizualizați stilurile disponibile pentru documentul curent apăsând Ctrl+S sau faceți clic pe fila Pornire (Home) din Panglică.
În mod similar, aveți posibilitatea să aplicați un stil de caractere selecției curente sau (ca în exemplul următor) unei anumite zone de cuvinte sau caractere. Acest exemplu modifică al cincilea cuvânt din al doilea paragraf al documentului curent la scris îngroșat:
ActiveDocument.Paragraphs(2).Range.Words(5).Style = "Bold"
Rețineți că un stil de caracter trebuie să fie întotdeauna aplicat la un interval, în loc să fie aplicat direct la un paragraf. De asemenea, în funcție de ce stiluri sunt definite pentru documentul curent, este posibil să vedeți un mesaj de eroare "Elementul cu numele specificat nu există." ("Item with specified name does not exist.") Aceasta înseamnă că stilul pe care încercați să îl descrieți nu se află în lista de stiluri. Pentru a remedia această problemă, verificați stilurile și, de exemplu, modificați Bold cu ceea ce este listat pentru aldin, ar fi Strong:
ActiveDocument.Paragraphs(2).Range.Words(5).Style = "Strong"
Extinderea unei selecții
Pentru a extinde o selecție din program (nu de către utilizator), utilizați metoda EndOf pentru un obiect Range sau Selection. Sintaxa pentru metoda EndOf este:
expression.EndOf(Unit, Extend)
Aici, expression este o expresie necesară care returnează un obiect Range sau Selection, cum ar fi un obiect din colecția Characters, Words, Sentences sau Paragraphs. Unit este un argument opțional de tip Variant, care specifică unitatea de mișcare (a se vedea tabelul următor).
Extend este un element opțional de tip Variant care specifică dacă se mută sau se extinde selecția sau zona. wdMove mută selecția sau zona și este setarea implicită; wdExtends extinde selecția sau intervalul. De exemplu, următoarea instrucțiune extinde selecția curentă până la sfârșitul paragrafului
Selection.EndOf Unit:=wdParagraph, Extend:=wdExtend
Următoarea declarație mută selecția la sfârșitul paragrafului:
Selection.EndOf Unit:=wdParagraph, Extend:=wdMove
Următoarea instrucțiune selectează de la selecția curentă până la sfârșitul elementului curent story din Word:
Selection.EndOf Unit:=wdStory, Extend:=wdExtend
Pentru a selecta întregul document activ, utilizați ActiveDocument.Content.Select. Această comandă are același efect ca apăsarea combinației de taste Ctrl+A atunci când se lucrează interactiv.
Restrângerea unei selecții
După ce ați terminat lucrul cu o selecție mai mare decât un punct de inserare a cursorului intermitent, de multe ori doriți să o deselectați. Cu alte cuvinte, poate doriți să forțați selecția în starea collapse (doar cursorul intermitent) atunci când procedura se termină. (Dacă nu faceți acest lucru și utilizatorul începe doar tastarea, orice este selectat va fi înlocuit ceea ce tastează utilizatorul.)
Cel mai simplu mod de a face acest lucru este de a utiliza metoda Collapse a obiectului Selection pentru a restrânge selecția la începutul sau sfârșitul său:
Selection.Collapse Direction:=wdCollapseStart
Selection.Collapse Direction:=wdCollapseEnd
Alternativ, puteți reduce selecția la un singur punct prin setarea selecției finale a selecției egală cu începutul său (restrângerea selecției la începutul său) sau prin setarea începerii selecției egală cu sfârșitul său (restrângerea selecției la sfârșitul ei):
Selection.End = Selection.Start
Selection.Start = Selection.End