Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Obiecte Microsoft Word

visual basic


Obiecte Microsoft Word

Visual Basic suporta un set de obiecte care corespund direct elementelor din Microsoft Word 97, cele mai multe familiare celor care cunosc interfata utilizator din Word: obiectul Document reprezinta un document deschis, obiectul Bookmark reprezinta un bookmark (semn de carte, punct de referinta) într-un document etc. Orice element din Word — documente, tabele, paragrafe, câmpuri etc. — poate fi reprezentat printr-un obiect din Visual Basic. Pentru automatizarea lucrului în Word se utilizeaza metodele si proprietatile acestor obiecte.



Modelul de obiecte din Word 97 cuprinde aproximativ 180 de obiecte. O reprezentare grafica a structurii ierarhice se poate vedea în Help – "Microsoft Word Objects". O descriere detaliata a unui obiect se obtine prin dublu click pe numele obiectului (în diagrama) sau, uzual, prin indexul din Help. La instalarea aplicatiei trebuie sa se mearga pe Custom si sa se selecteze Online Help for Visual Basic.

Dintr-un document Word, pentru a ajunge la modelul de obiecte se deschide dialogul Help si se merge pe succesiunea Contents and Index – Microsoft Word Visual Basic Reference – Visual Basic Reference – Getting Started with Visual Basic – Microsoft Word Objects.

Din editorul VB se ajunge la continutul si indexul VB Help for Word prin succesiunea Help – Contents and Index – Microsoft Word Visual Basic Reference (din fisa Contents) – Shortcut to Microsoft Word Visual Basic Reference.

În cele ce urmeaza se vor prezenta doar principalele obiecte (mai sus în ierarhie, cele mai des utilizate, pentru operatiunile curente etc.) cu principalele metode si proprietati si pentru scopurile uzuale.

Obiectul Application

La pornirea unei sesiuni Word se creeaza automat un obiect Application. Se utilizeaza proprietatile si metodele obiectului Application pentru a controla sau returna (afla) atributele întregii aplicatii, a controla aspectul ferestrei Word si pentru a accesa restul modelului de obiecte. Se utilizeaza proprietatea Application pentru a returna obiectul Application Word.

Proprietati (Application)

Dintre proprietatile care controleaza aspectul vizibil al aplicatiei mentionam câteva în continuare.

DisplayScrolllBars

Exprima faptul daca sunt sau nu afisate barele de defilare. Read/write.

La citire, returneaza o valoare Boolean:

  • True, daca un document, cel putin, are o bara de defilare
  • False, daca în nici o fereastra de document nu exista bare de defilare.

Valoarea proprietatii se poate modifica:

  • Atribuirea valorii True afiseaza barele de defilare în toate ferestrele
  • Atribuirea valorii False elimina barele de defilare din toate ferestrele.
Application.DisplayScrollBars = True
Application.DisplayScrollBars = False

Pentru barele orizontale sau verticale, individual, se utilizeaza proprietatile DisplayHorizontalScrollBar si DisplayVerticalScrollBar pentru o fereastra sppecificata.

DisplayStatusBar

Exprima faptul daca este afisata bara de stare a aplicatiei. Read/write. Boolean.

La citire, returneaza o valoare Boolean: True daca bara este afisata, False în caz contrar.

La scriere atribuirea unei valori logice produce efectul evident.

Height

Read/write. Long.

Înaltimea ferestrei aplicatiei Word. Pentru a vedea dimensiunea maxima admisa se va utiliza proprietatea UsableHeight.

Width

Read/write. Long.

Returneaza sau fixeaza latimea obiectului, în puncte.

With Application
.Height = 450
.Width = 600
End With

WindowState

Read/write. Long.

Returneaza sau stabileste starea ferestrei aplicatiei. Poate fi una dintre valorile wdWindowStateMaximize, wdWindowStateMinimize sau wdWindowStateNormal, cu interpretari evidente. Valoarea wdWindowStateNormal arata o fereastra care nu este minimizata sau maximizata.

Pentru a putea seta starea ferestrei, aceasta trebuie sa fie activa (se va utiliza metoda Activate în acest scop). Urmatoarea instructiune maximizeaza fereastra aplicatiei Word

Application.WindowState = wdWindowStateMaximize

***

Alte proprietati care controleaza comportarea globala a aplicatiei Word, cum ar fi cele care corespund atributelor accesate prin comanda Options din meniul Tools, se gasesc la obiectul Options.

Utilizând proprietatea Options a obiectului Applications, se returneaza un obiect Options care poate fi apoi configurat, dupa exemplul

With Application.Options
.AllowDragAndDrop = True
.ConfirmConversions = False
.MeasurementUnit = wdPoints
End With

Pentru informatii complete se va studia obiectul Options.

Dintre proprietatile obiectului Application care ofera acces la obiecte situate mai jos în ierarhie (accesori) sunt enumerate cele mai des utilizate.

ActiveDocument

Read-only.

Returneaza un obiect Document care reprezinta documentul activ (cel care are focusul). Daca nu exista nici un document deschis, atunci apare o eroare.

ActivePrinter

Read/write. String.

Returneaza sau stabileste numele imprimantei active. Exemplul urmator alege imprimanta activa:

ActivePrinter = "HP LaserJet 4 local on LPT1:"

Se observa utilizarea denumirii din mediul Windows.

ActiveWindow

Read-only.

Returneaza un obiect Window care reprezinta fereastra activa. Daca nu exista nici o fereastra deschisa, apare o eroare.

MsgBox Application.ActiveWindow
ActiveWindow = "Fereastra activa"

Primul exemplu afiseaza numele ferestrei active, al doilea atribuie un nou nume ferestrei active. Este de remarcat ca numele ferestrei nu este obligatoriu identic cu numele documentului si ca exemplele functioneaza corect pentru ca proprietatea implicita a obiectului returnat este numele (Name).

Documents

Read-only.

Întoarce colectia Documents a tuturor documentelor deschise.

Selection

Read-only.

Întoarce obiectul Selection, care reprezinta un domeniu selectat (redus eventual la punctul de insertie). Este de remarcat ca exista o singura selectie pe fereastra (sau ochi de fereastra) si doar una este activa – cea returnata.

Pentru exemple se va vedea prezentarea obiectului Selection.

Windows

Read-only.

Returneaza colectia Windows a tuturor ferestrelor document. Colectia corespunde ferestrelor cu denumirile (si numerele de ordine) listate la meniul Window din Word.

MsgBox Windows.Count

afiseaza numarul ferestrelor deschise în Word (atasate unor documente).

Metode (Application)

Dintre metodele obiectului Application enumeram doar Quit, celelalte sunt sau mai rar utilizate, sau se mai aplica si altor obiecte si vor fi prezentate ulterior.

Quit

Apelul procedurii duce la închiderea aplicatiei Word si, optional, salveaza sau ruteaza documentele deschise. Sintaxa:

expression.Quit(SaveChanges, Format, RouteDocument)

unde

expression este o expresie care returneaza un obiect Application.

SaveChanges este de tip Variant, optional, si specifica daca Word salveaza documentele înaintea închiderii. Poate fi o constanta (de tipul enumerat WdSaveOptions) wdDoNotSaveChanges, wdPromptToSaveChanges sau wdSaveChanges, interpretarile fiind evidente.

OriginalFormat este de tip Variant, optional, si specifica modul în care Word salveaza documentele al caror format original nu a fost acela de document Word. Poate fi o constanta (de tipul enumerat WdOriginalFormat) dintre wdOriginalDocumentFormat, wdPromptUser sau wdWordDocument.

RouteDocument este de tip Variant, optional. Este True daca se doreste directarea documentului catre urmatorul recipient. Daca documentul nu are atasata o fisa de rutare (routing slip), argumentul este ignorat (vezi obiectul RoutingSlip).

În exemplul urmator

Application.Quit SaveChanges:=wdPromptToSaveChanges, OriginalFormat:=wdWordDocument

se paraseste Word, se întreaba utilizatorul daca se salveaza documentele care au fost modificate de la ultima salvare si toate documentele se salveaza în format Word (indiferent de formatul initial).

Obiectul Document

Deschiderea sau crearea unui fisier în Word produce crearea unui obiect Document. Se utilizeaza proprietatile si metodele obiectului Document sau ale colectiei Documents pentru a deschide, crea, salva, activa si închide fisiere.

În prezentarea obiectului Document alegem calea actiunilor uzuale asupra unui document si nu listarea proprietatilor si metodelor (decât acolo unde este absolut necesar).

Returnarea unui obiect Document

Se poate obtine orice document deschis ca un obiect Document prin

Documents(index)

unde index este numele documentului (ca sir) sau numarul de ordine al documentului în colectie. Deoarece numarul de ordine se poate schimba, prin modificarea colectiei, se recomanda utilizarea numelor documentelor. În exemplul

Set wdRaport = Documents("Raport.doc")

variabila wdRaport, definita de tip obiect, contine un obiect Document care se refera la documentul deschis "Raport.doc". Orice transformare a variabilei se va reflecta în documentul Raport.doc.

Se poate utiliza si proprietatea ActiveDocument (vezi Application) pentru a returna obiectul Document care se refera la documentul activ:

If Documents.Count >= 1 Then
MsgBox ActiveDocument.Name
Else
MsgBox "Nici un document nu este deschis"
End If

Deschiderea documentelor

Pentru a deschide un document existent, se va utiliza metoda Open a colectiei Documents, metoda care deschide documentul specificat si îl adauga la colectia Documents. Returneaza un obiect Document. Sintaxa, în versiunea aplicabila aici, este

expression.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format)

unde

expression este o expresie care returneaza un obiect Documents.

FileName este de tip Variant si contine numele documentului (inclusiv calea, daca este necesar). În Windows se pot specifica mai multe fisiere separate prin spatii. Este semnalata eroare daca fisierul specificat nu exista.

ConfirmConversions este de tip Variant, optional. Are valoarea True pentru a afisa dialogul Convert File daca fisierul nu este în format Word.

ReadOnly este de tip Variant, optional. Are valoarea True daca documentul se deschide ca read-only.

AddToRecentFiles este de tip Variant, optional. Are valoarea True daca numele fisierului se adauga listei fisierelor recent utilizate (de la baza meniului File).

PasswordDocument este de tip Variant, optional si reprezinta parola necesara la deschiderea documentului.

PasswordTemplate este de tip Variant, optional si reprezinta parola necesara la deschiderea sablonului (template).

Revert este de tip Variant, optional. Controleaza ce se întâmpla daca FileName este numele unui fisier deja deschis: True pentru a neglija orice schimbari nesalvate si redesc 343e41d hiderea documentului; False pentru a activa documentul deschis.

WritePasswordDocument este de tip Variant, optional. Este parola necesara pentru salvarea schimbarilor aduse documentului.

WritePasswordTemplate este de tip Variant, optional. Este parola necesara pentru salvarea modificarilor aduse sablonilui.

Format este de tip Variant, optional. Indica tipul de conversie utilizat la deschiderea documentului. Poate fi o constanta (din tipul enumerat wdOpenFormat) dintre:

wdOpenFormatAuto,

wdOpenFormatDocument,

WdOpenFormatRTF,

wdOpenFormatTemplate,

wdOpenFormatText,

WdOpenFormatUnicodeText.

Valoarea implicita este wdOpenFormatAuto.

Pentru o mai buna informare asupra ultimului argument, se va studia obiectul FileConverter.

În exemplul urmator se deschide fisierul Test.doc din folderul curent:

Set wdTestDoc = Documents.Open(FileName:="test.doc")

Este de remarcat, în exemplu, ca fisierul este în directorul curent, ceea ce poate produce erori la executarea codului: este suficent ca utilizatorul sa schimbe folderul pentru ca documentul test.doc sa nu mai fie gasit. Din acest motiv este de preferat ca numele sa con de remarcat, în exemplu, ca fisierul este în directorul curent, ceea ce poate produce erori la executarea codului: este suficent ca utilizatorul sa schimbe folderul pentru ca documentul test.doc sa nu mai fie gasit. Din acest motiv este de preferat ca numele sa contina calea completa, ceea ce contribuie la robustetea codului. În acelasi scop se vor utiliza proprietatile PathSeparator (a obiectului Application), care returneaza caracterul separator utilizat de sistemul de fisiere, diferit în DOS/Windows si Macintosh si DefaultFilePath (a obiectului Options), care returneaza/seteaza cai ale folderelor specificate.

În exemplul urmator se utilizeaza obiectul FileSearch pentru a determina daca exista fisierul care trebuie deschis:

defaultDir = Options.DefaultFilePath(wdDocumentsPath)
With Application.FileSearch
.FileName = "test.doc"
.LookIn = defaultDir
.Execute
If .FoundFiles.Count = 1 Then
Documents.Open FileName defaultDir & _
Application.PathSeparator & "test.doc"
Else
MsgBox "Fisierul test.doc nu este gasit"
End If
End With

Se va observa utilizarea structurii With…End With si a modului cum se formeaza argumentul FileName din cale si denumire.

O alta modalitate de deschidere a unui document este prin afisarea dialogului Open uzual în Office (ca si în alte aplicatii Windows). Acest mod se realizeaza prin

Dialogs(wdDialogFileOpen).Show

care returneaza un obiect Dialog ce se refera la dialogul Open (din meniul File) iar metoda Show afiseaza si executa actiunile executate în boxa de dialog Open.

Utilizarea metodei Display (în locul metodei Show) produce doar afisarea dialogului fara nici o alta actiune. Daca utilizatorul apasa butonul OK al boxei, atunci este returnata valoarea -1 si se poate sti numele fisierului selectat în boxa dupa modelul urmator:

Set dlg = Dialogs(wdDialogFileOpen)
aButton = dlg.Display
fSelected = dlg.Name
If aButton = -1 Then
Documents.Open FileName fSelected
End If

Observatie. Pentru o discutie mai ampla asupra utilizarii cutiilor de dialog definite în Word se va vedea Word VB Help – "Displaying built-in Word dialog boxes".

Pentru a determina daca un anumit document este deschis se poate enumera colectia Documents si testa numele documentelor deschise. În urmatorul exemplu se activeaza documentul "cautat.doc" daca este deschis si se deschide daca nu este deja deschis.

docFound = True
For Each aDoc In Documents
If InStr(1,aDoc.Name,"cautat.doc",1) Then
aDoc.Activate
Exit For
Else
docFound = False
End If
Next aDoc
If docFound = False Then Documents.Open FileName "cautat.doc"

Pentru a determina câte documente sunt deschise se utilizeaza proprietatea Count a colectiei Documents:

If Documents.Count = 0 Then MsgBox "Nu este deschis nici un document"

Crearea si salvarea documentelor

Pentru a crea un nou document se utilizeaza metoda Add aplicata colectiei Documents. Metoda returneaza documentul creat ca un obiect Document, astfel încât valoarea returnata poate fi atribuita unei variabile de tip obiect pentru a putea referi direct noul document în program:

Dim myDoc As Document
Set myDoc = Documents.Add
myDoc.PageSetup.TopMargin = InchesToPoints(1.25)

ultima instructiune fixeaza marginea de sus la 1.25".

Documentul nou devine documentul activ.

Pentru a salva un document nou pentru prima data, se utilizeaza metoda SaveAs a obiectului Document. Exemplul urmator este de acest fel:

ActiveDocument.SaveAs FileName:="salvat.doc"

Documentul activ este salvat cu numele "salvat.doc" si poate fi identificat cu acest nume în colectia Documents.

Exemplul urmator construieste o expresie mai complicata, exploatând cele spuse mai sus: se creeaza un nou document care este salvat imediat cu un nume si apoi se insereaza în document un tabel cu doua linii si trei coloane.

Documents.Add.SaveAs FileName:="vanzari.doc"
Documents("vanzari.doc").Tables.Add _
Range:=Selection.Range, NumRows:=2, NumColumns:=3

Pentru salvarea modificarilor efectuate într-un document, se utilizeaza metoda Save a colectiei Documents:

Documents("vanzari.doc").Save

Utilizarea metodei Save cu un document nou deschide dialogul Save As pentru a întreba utilizatorul despre numele dat fisierului.

Pentru salvarea tuturor fisierelor deschise se va utiliza metoda Save aplicata colectiei Documents.

Metoda Save are sintaxa dependenta de obiectul caruia i se aplica:

expression.Save

unde expression este orice expresie care returneaza un obiect Document sau Template, este aplicabila unui document sau template.

expression.Save(NoPrompt, OriginalFormat)

este aplicabila colectiei Documents. Argumentele sunt

expression este orice expresie care returneaza un obiect Documents.

NoPrompt este de tip Variant, optional. Are valoarea True pentru ca Word sa salveze automat toate documentele, False pentru ca Word sa întrebe utilizatorul înaintea de salvarea fiecarui document care a fost modificat.

OriginalFormat este de tip Variant, optional. Specifica modul în care sunt salvate documentele.

Poate fi o constanta (de tipul enumerat WdOriginalFormat) dintre wdOriginalDocumentFormat, wdPromptUser sau wdWordDocument.

Activarea unui document

Pentru activarea unui alt document se aplica metoda Activate obiectului Document respectiv. Reamintim ca la crearea unui nou document, acesta ramâne activ. Documentul activat trebuie sa fie deschis (inclus în colectia Documents):

Documents("raport.doc").Activate
Doc1.Activate

daca variabila Doc1 a primit ca valoare un document deschis.

Metoda Activate, aplicabila mai multor obiecte (vezi Word VB Help – Activate Method), are sintaxa

expression.Activate

unde expression este orice expresie care returneaza un obiect caruia i se poate aplica metoda.

Tiparirea unui document

Întrucât tiparirea unui document este gestionata de mai multe comenzi si parametri, din dialoguri diferite în mediul Word, controlul tiparirii din Visual Basic necesita eventuale interventii asupra obiectului Options (pentru a fixa parametrii accesati uzual prin Tools – Options – fisa Print) si utilizarea metodei PrintOut, aplicabila obiectului Document.

Proprietatile obiectului Options, care privesc tiparirea, sunt identificate usor prin aceea ca numele lor începe cu Print: PrintComments, PrintHiddenText, PrintDrawingObjects, PrintFieldCodes etc., atribuirea valorii True fiind echivalenta cu marcarea boxei de control din dialogul Word corespunzator.

Metoda PrintOut este aplicabila obiectelor Application, Document sau Window si are parametri corespunzatori optiunilor din dialogul Print (meniul File din mediul Word). Sintaxa, cu specificarea si explicarea principalelor argumente, este

expression.PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName)

unde

expression este orice expresie care returneaza un obiect Application, Document sau Window. Background este de tip Variant, optional. Are valoarea True daca tiparirea are loc în fundal (macro-ul continua în timpul tiparirii documentului).

Append este de tip Variant, optional. Are valoarea True atunci când, la tiparirea în fisier, documentul este adaugat fisierului specificat în argumentul OutputFileName; are valoarea False pentru rescrierea fisierului OutputFileName.

Range este de tip Variant, optional si specifica tipul de domeniu tiparit. Poate fi una din constantele (de tip WdPrintOutRange): wdPrintAllDocument, wdPrintCurrentPage, wdPrintFromTo, wdPrintRangeOfPages sau wdPrintSelection.

OutputFileName este de tip Variant, optional. Daca PrintToFile este True, atunci argumentul da numele (eventual cu cale) pentru fisierul unde are loc tiparirea.

From este de tip Variant, optional. Specifica numarul paginii de unde începe tiparirea, daca Range este wdPrintFromTo.

To este de tip Variant, optional. Specifica numarul paginii pâna unde se tipareste, daca Range este wdPrintFromTo.

Item este de tip Variant, optional. Specifica elementul care se tipareste. Poate fi o constanta (de tipul enumerat WdPrintOutItem): wdPrintAutoTextEntries, wdPrintComments, wdPrintDocumentContent, wdPrintKeyAssignments, wdPrintProperties sau wdPrintStyles.

Copies este de tip Variant, optional. Specifica numarul de copii tiparite.

Pages este de tip Variant, optional. Specifica numerele paginilor si secventele de pagini care se tiparesc, separate prin virgule, daca Range este wdPrintRangeOfPages. De exemplu, "2, 6-10" înseamna pagina 2 si paginile de la 6 la 10.

PageType este de tip Variant, optional. Specifica tipul de pagini tiparite. Poate fi o constanta (de tipul WdPrintOutPages): wdPrintAllPages, wdPrintEvenPagesOnly sau wdPrintOddPagesOnly.

PrintToFile este de tip Variant, optional. Are valoarea True pentru a trimite comenzile de tiparire catre un fisier. Numele fisierului este dat în argumentul OutputFileName.

Collate este de tip Variant, optional. Are valoarea True pentru a tipari toate paginile documentului înaintea tiparirii urmatoarei copii (argument valabil în cazul tiparirii mai multor copii ale documentului – argumentul Copies).

FileName este de tip Variant, optional. Numele fisierului (inclusiv calea, daca este în alt folder decât cel curent) care contine documentul care se tipareste. Daca argumentul este omis, atunci se tipareste documentul activ. Argumentul este admis doar pentru obiectul Application.

Exemplul urmator fixeaza pentru documentul activ tiparirea textului ascuns si tipareste primele trei pagini:

Options.PrintHiddenText = True
ActiveDocument.PrintOut Range wdPrintFromTo, From:=" 1", To:=" 3"

Daca tiparirea se efectueaza cu valorile curente (implicite) ale parametrilor, atunci este suficienta comanda:

ActiveDocument.PrintOut

Se observa ca operatiunea de tiparire necesita, pentru o procesare mai fina, specificarea documentului, specificarea paginilor, a tipului de tiparire (toate, pagini pare sau impare), specificarea destinatiei (imprimanta sau fisier).

Se va vedea si proprietatea PageSetup care controleaza atributele paginii pentru document, sectiune etc.

Închiderea documentelor

Pentru închidere se aplica metoda Close obiectului Document sau colectiei Documents.

Documents("raport.doc").Close

Daca s-au efectuat modificari în document, de la ultima salvare, se afiseaza dialogul de salvare. Închiderea tuturor documentelor deschise se efectueaza aplicând metoda Close pentru întreaga colectie:

Documents.Close

Metoda Close este aplicabila mai multor obiecte. Sintaxa pentru Documents sau Document este

expression.Close(SaveChanges, OriginalFormat, RouteDocument)

unde

expression este o expresie care returneaza un obiect Document sau Documents.

SaveChanges este de tip Variant, optional. Specifica tipul de actiune privind salvarea documentului înainte de închidere. Poate fi o constanta (de tip WdSaveOptions): wdDoNotSaveChanges, wdPromptToSaveChanges sau wdSaveChanges, cu interpretari evidente.

OriginalFormat este de tip Variant, optional. Specifica formatul documentului la salvare (poate fi o constanta (de tip WdOriginalFormat): wdOriginalDocumentFormat, wdPromptUser sau wdWordDocument.

RouteDocument este de tip Variant, optional. Are valoarea True daca documentul este rutat catre urmatorul recipient. Daca documentul nu are atasata o fisa de rutare (routing slip), argumentul este ignorat (vezi obiectul RoutingSlip).

Urmatorul exemplu închide, fara salvare, toate documentele:

Documents.Close SaveChanges:=wdDoNotSaveChanges

Accesarea obiectelor dintr-un document

Din obiectul Document se pot accesa, prin proprietati sau metode, obiecte care corespund entitatilor care formeaza documentul scris în Word. Dintre obiectele accesibile mentionam (nu toate): Bookmarks, Characters, CommandBars, Comments, DocumentProperties, Endnotes, Fields, Footnotes, FormFields, Frames, HyperLinks, Indexes, Lists, ListTemplates, PageSetup, Paragraphs, Range, Revisions, Sections, Sentences, Shapes, StoryRanges, Styles, Subdocuments, Tables, TablesOfContents, TablesOfFigures, Template, Variables, Windows, Words.

De exemplu, prin

MsgBox "Sunt " & ActiveDocuments.Tables.Count & " tabele în document"

afiseaza un mesaj cu numarul tabelelor existente în documentul activ.

Este evident ca utilizând proprietatile si metodele obiectelor astfel returnate se pot modifica programatic obiectele referite: se pot adauga si formata tabele, câmpuri, paragrafe, cuvinte etc.

ActiveDocument.Footnotes.Add Range:=myRange, Text:="Textul notei de subsol adaugate"

adauga o nota de subsol la locul din document specificat de variabila myRange.

Obiectul Range

Un obiect Range reprezinta o zona continua dintr-un document. Fiecare obiect Range este definit de o pozitie (de caracter) de început si de o pozitie (de caracter) de sfârsit. Utilizat pentru identificarea unor portiuni din document, obiectul Range este similar obiectului Bookmark, diferenta fiind totusi importanta: un obiect Range exista doar atât timp cât se executa procedura care l-a definit.

Atunci când pozitia de început este identica cu pozitia de sfârsit, obiectul Range identifica punctul de insertie. Nu exista limitari asupra întinderii unui obiect Range.

Obiectele Range sunt independente de selectia din document: se poate defini si modifica un domeniu fara sa se schimbe selectia. Se pot defini, de asemenea, domenii multiple într-un document, în timp ce selectia este unica într-un ochi de fereastra..

Pentru a întelege toate proprietatile obiectului Range (si ale altor obiecte, de altfel), trebuie stiut ca zonele unui document se presupun structurate în episoade (stories). Un episod (story) este o zona de text diferita de celelalte zone din acel document. Astfel, daca un document contine text principal (body text), note de subsol si anteturi, atunci documentul contine un episod cu textul principal, un episod cu note de subsol si un episod cu anteturi. Exista 11 tipuri diferite de episoade posibile într-un document, corespunzând urmatoarelor constante (din WdStoryType):

WdEndnotesStory

wdEvenPagesFooterStory

wdEvenPagesHeaderStory

WdFirstPageFooterStory

wdFirstPageHeaderStory

wdFootnotesStory

WdMainTextStory

wdPrimaryFooterStory

wdPrimaryHeaderStory

WdTextFrameStory

Tipul episodului pentru un obiect de gen domeniu (Range), selectie (Selection) sau semn de carte (Bookmark) este returnat de proprietatea StoryType. Cunoasterea acestei proprietati este importanta prin aceea ca mediul Word deschide ferestre sau ochiuri diferite dupa episodul în care este punctul de insertie (selectia), Pentru navigarea programatica între aceste ochiuri trebuie sa se cunoasca valoarea proprietatii StoryType.

Proprietatile Start, End si StoryType identifica un obiect Range în mod unic. Start si End specifica sau returneaza pozitiile de început si, respectiv, de sfârsit ale obiectului Range. Pozitia de caracter de la începutul fiecarui episod este 0, pozitia de dupa primul caracter este 1 s.a.m.d.

Proprietatile Start si End sunt de tip Long, read/write. Pozitiile returnate sunt relative la începutul episodului. Daca fixarea unei proprietati strica ordinea naturala dintre start si end, atunci cealalta valoare este fixata automat la valoarea atribuita.

Prin atribuirea de valori proprietatilor Start si End se poate modifica dimensiunea domeniului referit.

Obiect Range vs. obiect Selection

În general, este de preferat sa se opereze cu obiecte Range în loc de obiecte Selection, deoarece:

  • se pot defini si utiliza mai multe obiecte Range (doar un obiect Selection pe fereastra);
  • procesarea obiectelor Range nu modifica textul selectat;
  • procesarea obiectelor Range este mai rapida decât a selectiei.

La înregistrarea unui macro creeaza, de obicei, referinte la obiectul Selection. Utilizarea obiectului Range poate simplifica totusi codul creat. Urmatorul exemplu aplica stilul bold primelor doua cuvinte din document si insereaza un paragraf dupa cele doua cuvinte:

Set myRange = ActiveDocument.Range(Start:=0, End:=ActiveDocument.Words(2).End)
myRange.Bold = True
myRange.InsertParagraphAfter

Este interesant de comparat acest cod cu secventa obtinuta la înregistrarea unui macro care efectueaza aceeasi sarcina.

Returnarea unui obiect Range prin metoda Range

Aplicata unui obiect Document, metoda Range returmeaza un obiect Range situat în episodul principal. Sintaxa este

expression.Range(Start, End)

unde

expression este orice expresie care returneaza un obiect Document.

Start este de tip Long, optional. Specifica punctul de început (în pozitii de caracter).

End este de tip Long, optional. Specifica punctul de sfârsit (în pozitii de caracter).

Pozitiile de caracter încep cu 0 la începutul documentului. Sunt numarate toate caracterele, inclusiv caracterele netiparibile. Caracterele ascunse se numara chiar daca nu sunt afisate. Daca nu se specifica pozitiile de început si/sau sfârsit, se considera, implicit, începutul si sfârsitul documentului.

Exemplul urmator scrie în bold primele 10 caractere ale documentului:

ActiveDocument.Range(Start:=0, End:=10).Bold = True

Daca este necesar ca obiectul Range returnat sa fie referit de mai multe ori, se va utiliza instructiunea Set prin care se atribuie obiectul returnat unei variabile obiect:

Dim myRange As Range
Set myRange = ActiveDocument.Range
myRange.InsertAfter Text:="Final"

Se observa definirea unei variabile obiect de tip specificat Range, obtinerea unui obiect Range egal cu tot documnetul (prin nespecificarea valorilor de start si end), atribuirea acestui obiect variabilei definite si utilizarea variabilei pentru a referi obiectul. Efectul este inserarea cuvântului "Final" dupa ultimul caracter din document.

În exemplul urmator se observa utilizarea unui obiect Range doar ca punct de referinta în document (asemenea unui Bookmark):

Set inceputDoc = ActiveDocument.Range(Start:=0, End:=0)

Pozitiile de start si end pot fi specificate direct sau prin intermediul proprietatilor Start si End ale altor obiecte cum ar fi Selection, Bookmark sau Range, ca în exemplul urmator în care se defineste un domeniu care se refera la a doua si a treia propozitie din document:

Set myRange=ActiveDocument.Range( _
Start ActiveDocument.Sentences(2).Start, _
End ActiveDocument.Sentences(3).End)

Deoarece obiectul Range nu are un corespondent visual în document, se poate utiliza metoda Select a obiectului pentru a produce selectarea textului din domeniu si a verifica, astfel, definirea corecta a obiectului Range:

myRange.Select

selecteaza portiunea de text continuta în variabila myRange, careia în prealabil i s-a atribuit un Range.

Returnarea unui obiect Range prin proprietatea Range

Proprietatea Range este disponibila pentru multiple obiecte — de exemplu Paragraph, Bookmark, Endnote, Cell — si este utilizata pentru întoarcerea unui obiect Range.

Exemplele urmatoare sunt usor interpretabile. Pentru explicatii complete se vor studia obiectele respective.

Active.Document.Paragraphs(1).Range
ActiveDocument.Tables(1).Rows(1).Range
ActiveDocument.Bookmarks(1).Range

Nu trebuie uitata structura With…End With pentru procesari multiple ale aceluiasi obiect Range.

Modificarea unei portiuni a unui document

Visual Basic include obiecte care pot fi utilizate pentru a modifica urmatoarele tipuri de elemente ale documnetului: caractere, cuvinte, propozitii, paragrafe si sectiuni. Tabelul urmator arata proprietatile (aplicabile unor diverse obiecte) care corespund acestor elemente si obiectele returnate:

expresia

obiect returnat

Words(index)

Range

Characters(index)

Range

Sentences(index)

Range

Paragraphs(index)

Paragraph

Sections(index)

Section

Pentru ultimele doua colectii din tabel este de notat ca pentru a junge la obiectul Range corespunzator se va apela la proprietatea Range. Prin urmare

Paragraphs(index).Range
Sections(index).Range

dau acces la obiectele Range respective.

Pentru modificarea unui domeniu de text din document, se poate crea un obiect Range cu acele elemente (caractere, propozitii, paragrafe etc.). Aplicarea proprietatilor si metodelor obiectului Range astfel creat va produce modificarea textului referit de obiect:

ActiveDocument.Words(1).Case = wdUpperCase

trece primul cuvânt din document în majuscule. De remarcat ca proprietatea Case este aplicata obiectului Range returnat de ActiveDocument.Words(1).

În formarea obiectelor Range sunt importante proprietatile Start si End care dau începutul si sfârsitul.

Proprietatile elementelor documentului, specificate în tabelul anterior în prima coloana, sunt admise pentru obiectele Document, Selection si Range.

Lucrul cu textul dintr-un obiect Range

Accesul la continutul unui obiect Range este realizat prin proprietatea Text. Proprietatea Text returneaza textul neformatat (plain text) al domeniului referit. Atunci când se seteaza aceasta proprietate, textul domeniului referit este înlocuit de valoarea atribuita proprietatii.

primCuvant = ActiveDocument.Words(1).Text
ActiveDocument.Words(1).Text = "Capitol"

returneaza sau modifica primul cuvânt din documentul activ.

Pentru inserarea unui text înaintea sau dupa un obiect Range se utilizeaza, respectiv, metodele InsertBefore sau InsertAfter. Dupa inserarea unui text, domeniul este extins automat pentru a include si textul inserat (înainte sau dupa).

Sintaxa metodelor este

expression.InsertBefore(Text)

expression.InsertAfter(Text)

unde

expression este o expresie care returneaza un obiect Selection sau Range.

Text este de tip String si reprezinta textul care se insereaza.

Pentru inserarea caracterelor speciale se va utiliza functia Chr, sau constantele Visual Basic cum ar fi vbCr, vbLf, vbCrLf sau vbTab.

Inserarea unui text dupa un domeniu care se refera la un întreg paragraf are loc dupa marca de paragraf. Drept urmare textul este inserat la începutul paragrafului urmator. Pentru a anula acest lucru se va identifica sfârsitul de domeniu (Range sau Selection) si se va scadea cu 1 pozitia finala (deci se va trece în fata caracterului marca de paragraf). Exemplul urmator arata mecanismul utilizat:

Set Doc = ActiveDocument
Set myRange = Doc.Range( _
Start:=Doc.Paragraphs(1).Range.End - 1, _
End:=Doc.Paragraphs(1).Range.End - 1)
myRange.InsertAfter " sfarsit de paragraf."

Un domeniu poate fi redus la punctul de început sau de sfârsit (proprietatile Start si End devin egale cu pozitia de caracter respectiva) prin metoda Collapse. Sintaxa este

expression.Collapse(Direction)

unde

expression este o expresie care returneaza un obiect Range sau Selection.

Direction este de tip Variant, optional si indica directia în care are loc implozia domeniului. Poate fi o constanta (de tip WdCollapseDirection) dintre: wdCollapseEnd sau wdCollapseStart. Valoarea implicita este wdCollapseStart.

Utilizarea metodei cu wdCollapseEnd, atunci când domeniul se refera la un întreg paragraf, produce un domeniu situat dupa marca de paragraf.

Pentru formatarea textului dintr-un obiect Range, se utilizeaza

  • proprietatea Font pentru formatarea caracterelor
  • proprietatea ParagraphFormat pentru formatarea paragrafelor.

Proprietatea Font returneaza un obiect Font care dispune de toate metodele si proprietatile necesare pentru aplicarea formatarilor admise pentru caractere în Word.

Proprietatea ParagraphFormat returneaza un obiect ParagraphFormat care permite efectuarea tuturor formatarilor admise pentru un paragraf în Word.

Deoarece ambele obiecte, Font si ParagraphFormat sunt foarte complexe dar reprezinta actiuni de rutina pentru un utilizator Word nu vor fi prezentate aici. Exemplul urmator constituie un model suficient pentru orice alta actiune care implica aceste obiecte:

With ActiveDocument.Paragraphs(1).Range.Font
.Name = "Times New Roman"
.Size = 14
.AllCaps = True
End With
With ActiveDocument.Paragraphs(1).Range.ParagraphFormat
.LeftIndent = InchesToPoints(0.5)
.Space1
End With

Textul sursa precedent realizeaza pentru primul paragraf din documentul activ setarea fontului ca "Times New Roman", de marime 14 si scris cu majuscule. În formatarea paragrafului se realizeaza indentarea din stânga cu 1.5" si spatierea la un rând.

Redefinirea unui obiect Range

Pentru modificarea limitelor unui obiect Range se pot utiliza, în mod uzual, proprietatile Start si End:

myRange.End = myRange.End + 10

Metodele MoveStart si MoveEnd produc o actiune similara, dar se pot utiliza unitati diverse, predefinite, pentru extinderea domeniului. Ambele metode returneaza un intreg care arata numarul de unitati cu care s-a modificat Start sau End, sau 0 daca operatiunea nu s-a putut realiza. Sintaxa este

expression.MoveStart(Unit, Count)

expression.MoveEnd(Unit, Count)

unde

expression este o expresie care returneaza un obiect Range sau Selection.

Unit este de tip Variant, optional. Reprezinta unitatea cu care se deplaseaza punctul de start/end al obiectului. Poate fi una dintre constantele (de tip WdUnits): wdCharacter, wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow sau wdTable. Pentru obiectul Selection poate fi si wdLine. Valoarea implicita este wdCharacter.

Count este de tip Variant, optional. Numarul maxim de unitati cu care se muta punctul de start/end. Poate fi negativ sau pozitiv, cu interpretarile curente. În cazul când operatiunea produce inversarea fizica a pozitiilor de Start si End, cele doua pozitii devin egale (Range sufera un colaps). Valoarea implicita este 1.

În exemplul urmator

myRange.MoveEnd Unit:=wdParagraph, Count:=1

se extinde domeniul încât sa cuprinda si urmatorul paragraf.

Observatie. Exista si metode mai fine cum ar fi MoveUntil, MoveWhile, MoveStartUntil, MoveEndWhile etc. Se va vedea intrarea respectiva din Word VB - Help.

Metoda SetRange poate fi utilizata pentru modificarea simultana a limitelor unui obiect Range existent. Nu trebuie sa se confunde cu metoda Range, care defineste obiectul.

expression.SetRange(Start, End)

unde

expression este o expresie care returneazaun obiect Range sau Selection.

Start este de tip Long, pozitia noua de start.

End este de tip Long, pozitia noua de sfârsit (end).

De exemplu:

myRange.SetRange Start:=myRange.Start, End:=myRange.End+10

care extinde domeniul cu 10 caractere.

Pentru deplasarea obiectului Range cu un numar de unitati se va studia metoda Next. Acest procedeu se poate folosi la parcurgerea seceventiala a unei secvente de cuvinte, paragrafe. Este de reamintit ca o asemenea parcurgere poate fi efectuata si prin structura For Each…Next.

Atribuirea obiectelor Range

O prima procedura este cea, exemplificata mai sus, în care se utilizeaza instructiunea Set pentru atribuirea unui Range la o variabila obiect, instructiune care poate opera si în ipostaza

Set Range2 = Range1

La modificarea unui obiect, schimbarea se va reflecta automat si în celalalt obiect.

Este de observat ca printr-o instructiune de atribuire directa

Range2 = Range1

se atribuie proprietatea implicita a obiectului Range1 (adica proprietatea Text) proprietatii implicite a obiectului Range2. Prin urmare codul este echivalent cu

Range2.Text = Range1.Text

care nu modifica obiectele Range respective (doar continutul lui Range2). Cele doua obiecte pot fi la locatii diferite, doar continutul este acelasi si legatura dintre ele nu se stabileste permanent.

Prin proprietatea Duplicate se creeaza un nou obiect Range, duplicat, cu aceleasi limite si text:

Set Range2 = Range1.Duplicate

Modificarea limitelor unui obiect nu influenteaza limitele celuilalt, dar modificarea textului poate produce modificarea celuilalt în cazul suprapunerii domeniilor.

Obiecte Microsoft Word (II)

Obiectul Selection

Atunci când se proceseaza un document în Microsoft Word, este uzual sa se selecteze o portiune de text si sa se formateze/modifice/etc. portiunea selectata. În Visual Basic, operatiunea de selectare prealabila nu este necesara, obiectul Range permite toate actiunile pentru domenii determinate ale documentului. Totusi, atunci când se doreste ca, programatic, sa se raspunda unei selectii efectuate de utilizator, sau sa se modifice selectia etc., se poate opera cu obiectul Selection.

Exista un singur obiect Selection pe ochi de fereastra si doar un obiect este activ la un moment dat (corespunzând locului unde este puctul de insertie, cu toata zona selectata adiacenta). Este evident, din lucrul în Word, ca o selectie poate sa se refere la un întreg domeniu sau poate fi redusa la punctul de insertie.

Obiectul Selection este returnat de proprietatea Selection a obiectelor Application, Window sau Pane. Utilizata cu Application, proprietatea returneaza obiectul Selection care se refera la selectia activa. Prin urmare

Selection.InsertAfter Text:=" Text adaugat dupa selectie"

utilizeaza proprietatea Selection a obiectului Application (fiind globala nu trebuie specificat obiectul), este returnata selectia activa si se insereaza un text, similar metodei InsertAfter de la Range.

Daca se lucreaza cu selectia dintr-o fereastra particulara, obiectul respectiv se specifica:

Windows("Document2").Selection.Paragraphs(1).SpaceBefore = InchesToPoints(0.15)

mareste la 0.15" spatiul dinaintea primului paragraf din selectie (daca selectia este punctul de insertie, se modifica paragraful curent).

Urmatorul exemplu insereaza text în antetul primei pagini

With ActiveWindow
.View.Type = wdPageView
.View.SeekVCiew = wdSeekPrimaryHeader
.ActivePane.Selection.InsertAfter Text "Capitolul I"
End With

În general, metodele si proprietatile uzuale ale obiectului Selection sunt similare celor de la obiectul Range. Este totusi de amintit ca obiectul Selection are corespondent grafic în document: zona selectata. Orice extindere sau implozie se vede imediat.

Deplasarea si extinderea selectiei

Deoarece nu exista decât o selectie pe ochi de fereastra, selectarea unei noi zone muta implicit si obiectul Selection. Aceasta selectare se efectueaza aplicând metoda Select unui element din document:

ActiveDocument.Words(1).Select

permite mutarea selectiei la primul cuvânt, astfel încât se poate utiliza dupa aceea metoda Selection:

Selection.Text = "Primul"

pentru modificarea textului selectat.

Exista un numar de metode care deplaseaza selectia în document (prin modificarea corespunzatoare a obiectului Selection).

Move Unit, Count) – reduce selectia la punctul de sfârsit (Count > 0) sau de început (Count < 0) si deplaseaza apoi punctul de insertie astfel obtinut Count unitati (in sensul pozitiv sau negativ).

MoveEnd, MoveStart – similare descrierilor de la obiectul Range

MoveLeft Unit,Count,Extend) – unde Unit poate fi wdCell, wdCharacter, wdWord sau wdSentence, Count este numarul de unitati, Extend arata tipul actiunii: wdMove pentru colaps la stânga si mutarea selectiei, wdExtend pentru extensie spre stânga.

MoveRight(Unit,Count,Extend) – este similara metodei MoveLeft, dar actiunea este spre dreapta.

MoveDown(Unit,Count,Extend), MoveUp(Unit,Count,Extend) – cu actiune similara metodelor precedente, dar directia de actiune este sus-jos. Unit poate fi wdLine, wdParagraph, wdWindow sau wdScreen. Extend poate fi wdMove sau wdExtend, cu sensul explicat anterior.

Exemple:

Selection.MoveDown Unit wdParagraph, Count:=1, Extend:=wdMove

muta punctul de insertie la începutul paragrafului urmator.

Selection.MoveEnd Unit wdParagraph, Count:=1

extinde selectia prin mutarea pozitiei finale la sfârsitul paragrafului.

Selection.MoveRight Unit wdCharacter, Count:=1, Extend:=wdExtend

extinde selectia activa cu un cuvânt spre dreapta.

Utilizarea metodelor GoToNext, GoToPrevious sau GoTo permite mutarea selectiei prin alegerea tipului de element tinta din document, a directiei etc.

Metoda GoTo

Aplicata obiectului Selection, muta punctul de insertie în pozitia de caracter imediat precedenta elementului specificat si returneaza un obiect Range (cu exceptia specificarii elementelor wdGoToGrammaticalError, wdGoToProofreadingError sau wdGoToSpellingError, caz în care Obiectul Range include si textul eronat). Sintaxa este

expression.GoTo(What, Which, Count, Name)

unde

expression este o expresie care returneaza un obiect Document, Range sau Selection.

What este de tip Variant, optional si precizeaza tipul elementului unde se muta punctul de insertie (selectia). Poate fi una dintre constantele (de tipul enumerat WdGoToItem):

wdGoToBookmark

wdGoToComment

wdGoToEndnote

wdGoToEquation

wdGoToField

wdGoToFootnote

wdGoToGrammaticalError

wdGoToGraphic

wdGoToHeading

wdGoToLine

wdGoToObject

wdGoToPage

wdGoToPercent

wdGoToProofreadingError

wdGoToSection

wdGoToSpellingError

wdGoToTable

Which este de tip Variant, optiomal si specifica modul de mutare a selectiei. Poate fi una dintre constantele (de tip WdGoToDirection): wdGoToAbsolute, wdGoToFirst, wdGoToLast, wdGoToNext, wdGoToPrevious sau wdGoToRelative.

Count este de tip Variant, optional si indica numarul utilizat la determinarea elementului (în functie de tipul de actiune dat de Which). Este doar pozitiv si pentru gasirea unui element anterior se va utiliza wdGoToPrevious cu un Count > 0.

Name este Variant, optional si da numele elementului tinta, daca What este wdGoToBookmark, wdGoToComment, wdGoToField sau wdGoToObject.

Exemple:

Selection.GoTo What wdGoToHeading, Which:=wdGoToFirst
Selection.GoTo What wdGoToHeading, Which:=wdGoToAbsolute, Count:=1
Selection.GoTo What wdGoToLine, Which:=wdGoToAbsolute, Count:=4
Selection.GoTo What wdGoToLine, Which:=wdGoToPrevious, Count:=2
Selection.GoTo What wdGoToField, Name:="Date"

Metodele GoToNext, GoToPrevious

Pentru actiuni limitate doar la deplasarea cu un singur element, metodele cu sintaxa (pentru obiectele Range sau Selection):

GoToNext(What)

GoToPrevious(What)

unde

What este una dintre constantele de tip WdGoToItem (vezi metoda GoTo).

Metodele returneaza un obiect Range (vezi discutia de la GoTo).

Obiecte accesibile din Selection

Cele mai multe obiecte accesibile din obiectele Range si Document sunt disponibile si din obiectul Selection. Se pot astfel procesa obiectele din interiorul selectiei. Lista obiectelor care sunt referite din Selection este

Bookmarks, Borders, Cells, Characters, Columns, Comments, Document, Endnotes, Fields, Find, Font, Footnotes, FormFields, Frames, HeaderFooter, Hyperlinks, InlineShapes, PageSetup, ParagraphFormat, Paragraphs, Revision, Range, Rows, Sections, Sentences, Shading, ShapeRange, Tables, Words.

Aceste obiecte (colectii de obiecte) sunt returnate prin proprietatile cu aceleasi denumiri ale obiectului Selection. De exemplu

Selection.Paragraphs.LeftIndent = InchesToPoints(0.5)
Selection.Words(1).Italic = True
MsgBox Selection.Footnotes(1).Range.Text

Pentru parcurgerea tuturor obiectelor dintr-o colectie returnata se va folosi structuraFor Each…Next:

For Each aBook In Selection.Bookmarks
MsgBox aBook.Name
Next aBook

Proprietati si metode uzuale ale obiectului Selection

Proprietatea Text

Se va utiliza proprietatea Text pentru a returna sau stabili continutul obiectului Selection:

strText = Selection.Text
Selection.Text = "Hello World"

Se va utiliza metoda InsertBefore sau InsertAfter pentru inserarea unui text înainte sau dupa selectie (cu extinderea corespunzatoare a selectiei).

Formatarea textului selectat

Se vor utiliza proprietatile Font si ParagraphFormat pentru accesul la proprietatile si metodele proprii caracterelor si, respectiv, paragrafelor:

With Selection.Font
.Name = "Times New Roman"
.Size = 14
End With
Selection.ParagraphFormat.LeftIndent = InchesToPoints(0.5)

Returnarea obiectului Range

O importanta deosebita o are proprietatea Range, care returneaza un obiect Range ce se refera la selectia curenta. În acest mod se poate exploata faptul ca pot exista mai multe obiecte Range si memora selectii succesive:

Set myRange = Selection.Range

O alta utilizare este aceea când anumite metode sau proprietati se pot aplica doar unui obiect Range:

Selection.Range.CheckSpelling

Proprietatea Information

Returnarea informatiilor despre selectie, cum ar fi numarul paginii curente, numarul total de pagini, faptul ca selectia este în antet sau picior de pagina etc. Sintaxa este

expression.Information(Type)

unde

expression este o expresie care returneaza un obiect Range sau Selection.

Type este de tip Long si precizeaza tipul informatiei care se returneaza. Poate fi una dintre cele 35 de constante de tip WdInformation, dintre care mentionam (doar pentru a exemplifica tipuri de informatii obtinute):

    • wdActiveEndAdjustedPageNumber – numarul paginii care contine sfârsitul activ al selectiei sau domeniului. Numarul este ajustat pentru a considera personalizarile efectuate de utilizator (numar de început etc.).
    • wdActiveEndPageNumber – numarul paginii care contine sfârsitul activ al selectiei sau domeniului. Numarul este dat relativ la începutul documnetului, si nu este modificat de personalizarile efectuate de utilizator (numar de început etc.).
    • wdHorizontalPositionRelativeToPage – pozitia orizontala a selectiei sau domeniului; distanta de la marginea stânga a selectiei la latura stânga a paginii. Distanta este data în twips (20 twips = 1 point, 72 points = 1 inch). Daca selectia sau domeniul nu este în zona ecran, atunci se întoarce – 1.
    • wdInHeaderFooter – întoarce True daca selectia/domeniul este în ochiul de fereastra antet sau footer, sau în header sau footer (în page layout view).
    • wdWithInTable – întoarce True daca selectia este într-un tabel.
    • wdZoomPercentage – întoarce procentajul curent de marire a documentului, dupa cum este fixat de proprietatea Percentage.

Exemplul urmator afiseaza, daca selectia este într-un tabel, numarul de coloane si de linii ale tabelului:

If Selection.Information(wdWithInTable) = True Then
MsgBox "Coloane = " & Selection.Information(wdMaximumNumberOfColumns) _
& vbCR & "Linii = " & Selection.Information(wdMaximumNumberOfRows)
End If

Determinarea tipului de selectie (text sau punct de insertie)

Prin proprietatea Type se poate obtine informatia privind tipul selectiei. Valoarea returnata, Long, este una dintre constantele tipului enumerat WdSelectionType:

wdNoSelection,

wdSelectionBlock,

wdSelectionColumn,

wdSelectionFrame,

wdSelectionInlineShape,

wdSelectionIP,

wdSelectionNormal,

wdSelectionRow,

wdSelectionShape

Dintre aceste constante, wdSelectionNormal reprezinta selectia uzuala a unei portiuni de text, wdSelectionBlock reprezinta selectia sub forma de bloc dreptunghiular, wdSelectionIP este selectia redusa la punctul de insertie.

Exemplul urmator selecteaza paragraful care contine punctul de insertie, daca selectia este redusa la punctul de insertie:

If Selection.Type = wdSelectionIP Then
Selection.Paragraphs(1).Range.Select
End If

Obiectele Find si Replacement

Gasirea si înlocuirea unor domenii specificate de text dintr-un document este o operatiune frecventa în procesarea textelor. Pentru realizarea programatica, în Visual Basic, dispunem de obiectele Find (pentru gasirea textului specificat) si Replacement (pentru înlocuire).

Obiectul Find este permis fie din Selection, fie din Range. Exista mici deosebiri între cele doua moduri de acces, legate îndeosebi de transformarea obiectelor daca procesul de cautare se termina cu succes.

Obiectul Replacement este accesibil din obiectul Find si permite toate actiunile disponibile în boxa de dialog Find and Replace (meniul Edit din Word).

Schema generala pentru realizarea unei cautari urmata, sau nu, de o înlocuire este

    • stabilirea parametrilor cautarii/înlocuirii, prin proprietatile obiectului Find/ Replacement. In proprietatea Text se precizeaza textul cautat sau înlocuitor.
    • executarea cautarii/înlocuirii prin aplicarea metodei Execute.

Find

Dintre proprietatile obiectului Find mentionam

  • Font, returneaza un obiect Font pentru care se pot stabili atributele cautate.
  • Format, este setat pe True daca în cautare se considera formatul textului. Read-write, Boolean.
  • Forward, directia cautarii: True pentru înainte, False pentru înapoi. Read/wtite, Boolean.
  • Found este True daca s-a gasit o potrivire. Read, Boolean.
  • MatchCase este True pentru o cautare care diferentiaza majusculele de minuscule. Read-write, Boolean.
  • MatchWildcards este True daca textul cautat contine caractere sablon de cautare. Read/write, Boolean.
  • ParagraphFormat, returneaza un obiect ParagraphFormat prin care se pot stabili atribute de paragraf cautate.
  • Style permite stabilirea stilului cautat (predefinit sau utilizator). Pentru lista constantelor ce denumesc stilurile predefinite se va vedea Word VB Help – Style Property.
  • Text, contine textul cautat. Read-write, String.
  • Wrap precizeaza modul de continuare în cazul atingerii sfârsitului (sau începutului) fisierului sau negasirii textului în domeniul cautat. Poate fi o constanta (de tip WdFindWrap): wdFindAsk – consultarea utilizatorului, wdFindContinue – continuarea în restul documentului, wdFindStop – oprirea la epuizarea domeniului de cautare. Read/write, Long.

Obiectul Find are doua metode:

    • ClearFormatting pentru înlaturarea oricarei formatari a textului cautat, necesara pentru a initia o noua cautare de formate;
    • Execute pentru a efectua cautarea pe baza atributelor fixate.

ClearFormatting

Anuleaza orice formatare specificata pentru o operatiune de cautare sau înlocuire. Corespunde butonului No Formatting din dialogul Find and Replace (meniul Edit).

expression.ClearFormatting

unde

expression este o expresie care returneaza un obiect Find sau Replacement.

Execute

Executa operatiunea Find specificata. Returneaza True daca operatiunea de cautare se termina cu succes (este gasita o potrivire cu textul cautat). Unele dintre argumentele metodei acopera valori ale proprietatilor obiectului Find.

expression.Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace)

unde

expression este o expresie care returneaza un obiect Find.

FindText este de tip Variant, optional. Reprezinta textul cautat. Pentru cautarea unui format anume se va specifica un sir vid (""). Se pot utiliza caracterele speciale, similar celor disponibile în cautarile Word uzuale.

MatchCase este de tip Variant, optional. True sau False dupa cum în cautare are importanta capitalizarea caracterelor.

MatchWholeWord este de tip Variant, optional. Este True daca în cautare se vor potrivi doar cuvinte întregi.

MatchWildcards este de tip Variant, optional. True daca textul cautat utilizeaza sabloane de cautare (wildcards).

MatchSoundsLike este de tip Variant, optional. True daca operatiunea de cautare accepta si cuvinte care "suna" la fel cu textul cautat.

MatchAllWordForms este de tip Variant, optional. True daca operatiunea de cautare accepta ca succes toate formele textului cautat.

Forward este de tip Variant, optional. True pentru o cautare înainte (spre sfârsitul documentului).

Wrap este de tip Variant, optional. Controleaza continuarea operatiunii la epuizarea domeniului cercetat. Valorile posibile sunt date la proprietatea Wrap: wdFindContinue, wdFindStop sau wdFindAsk.

Format este de tip Variant, optional. True daca în cautare este specificata o formatare (de caracter sau paragraf).

ReplaceWith este de tip Variant, optional. Textul înlocuitor. Pentru a specifica un obiect grafic sau nontext, elementul se trece în Clipboard si se specifica "^c" în ReplaceWith.

Replace este de tip Variant, optional. Specifica numarul de înlocuiri. Poate fi o constanta (de tip WdReplace): wdReplaceAll, wdReplaceNone sau wdReplaceOne.

Selection.Find

Returnarea unui obiect Find din obiectul Selection produce schimbarea selectiei la îndeplinirea criteriilor de cautare. Textul care corespunde proprietatilor cautarii devine noua selectie. Urmatorul exemplu selecteaza urmatoarea aparitie a cuvântului "Hello", cautarea oprindu-se la atingerea sfârsitului documentului:

With Selection.Find
.Forward = True
.Wrap = wdFindStop
.Text = "Hello"
.Execute
End With

Acelasi efect se putea obtine folosind argumentele metodei Execute:

Selection.Find.Execute FindText "Hello", Forward:=True, Wrap:=wdFindStop

Range.Find

Utilizarea proprietatii Find a obiectului Range nu produce modificarea selectiei curente, dar obiectul Range respectiv este redefinit la gasirea textului care îndeplineste conditiile:

With ActiveDocument.Content.Find
.Text = "blue"
.Forward = True
.Execute
If .Found = True Then .Parent.Bold = True
End With

De remarcat ca proprietatea Content returneaza obiectul Range care contine episodul principal al documentului (textul principal). Codul din exemplu executa o cautare a primei aparitii a cuvântului "blue" în documentul activ. Daca operatiunea se termina cu succes, atunci obiectul Range este redefinit la cuvântul gasit, astfel încât prin .Parent se face referinta la obiectul Range redefinit si cuvântul "blue" este trecut în stilul bold. Acelasi efect se obtinea prin

Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="blue", Forward:=True
If myRamge.Find.Found = True Then myRange.Bold = True

atributele cautarii fiind definite prin argumentele metodei Execute.

Obiectul Replacement

Referinta la obiectul Replacement se obtine prin proprietatea Replacement a obiectului Find:

expression.Find.Replacement

Obiectul Replacement reprezinta atributele textului nou (înlocuitor) într-o operatiune de cautare cu înlocuire.

Dintre proprietatile obiectului Replacement amintim:

  • Font, returneaza un obiect Font prin care se pot stabili atributele caracterelor noului text.
  • ParagraphFormat, returneaza un obiect ParagraphFormat prin care se pot stabili atribute de paragraf pentru noul text.
  • Style permite stabilirea stilului pentru textul nou (predefinit sau utilizator). Pentru lista constantelor ce denumesc stilurile predefinite se va vedea Word VB Help – Style Property.
  • Text, contine textul înlocuitor (nou). Read-write, String.

Obiectul Replacement are doar metoda ClearFormatting, prin care se anuleaza toate atributele de format asociate noului text. Este util sa se aplice metoda înaintea definirii unei noi formatari pentru textul înlocuitor. Sintaxa este similara metodei de la obiectul Find.

Executarea unei operatiuni de înlocuire necesita, de obicei, precizarea argumentului Replace al metodei Execute (pentru Find):

With Selection.Find
.ClearFormatting
.Text = "hi"
.Replacement.ClearFormatting
.Replacement.Text = "hello"
.Execute Replace wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End With

executa o cautare a cuvântului "hi", neformatat, si înlocuirea tuturor aparitiilor cu cuvântul "hello", de asemenea neformatat. Cautarea si înlocuirea are loc în tot documentul, indiferent de unde se începe. Selectia se modifica la fiecare întâlnire a cuvântului "hi", deoarece se pleaca din obiectul Selection.

With ActiveDocument.Content.Find
.ClearFormatting
.Font.Bold = True
With .Replacement
.ClearFormatting
.Font.Bold = False
End With
.Execute FindText "", ReplaceWith:="", Format:=True, Replace:=wdReplaceAll
End With

În acest exemplu se utilizeaza atât pentru cautare, cât si pentru înlocuire textul vid, ceea ce produce doar o înlocuire a formatului bold cu formatul normal. Este de remarcat, pentru înlocuirea formatelor, combinatia de valori ale argumentelor FindText, ReplaceWith, Format. Selectia nu se modifica, deoarece s-a plecat din obiectul Range (returnat de proprietatea Content).

Obiectele Table, Column, Row si Cell

Prelucrarea tabelelor, un subiect foarte important în procesarea textelor, este posibila programatic prin utilizarea obiectelor

  • Table, care refera un tabel din document,
  • Column, care refera o coloana dintr-un tabel,
  • Row, care refera o linie dintr-un tabel si
  • Cell, care refera o celula dintr-un tabel.

Datorita complexitatii lucrului cu tabele (trasare libera, uniri de celule, divizari de celule etc.), metodele si proprietatile obiectelor amintite pot uneori sa se produca rezultate neasteptate (ca si în procesarea uzuala din Word) daca nu sunt întelese exact.

În general obiectele sunt accesate ca elemente din colectiile respective, dar exista si posibilitatea accesarii individuale.

Colectia Tables

Reprezinta multimea tuturor tabelelor dintr-o selectie, domeniu sau document. Serveste pentru returnarea unui tabel:

expression.Tables(index)

sau pentru adaugarea, programatica, a unui nou tabel la colectie utilizând metoda Add:

expression.Add(Range, NumRows, NumColumns)

unde

expression este o expresie care returneaza un obiect Tables.

Range este obiectul Range care refera domeniul unde se insereaza tabelul în document. Daca domeniul nu este redus la punctul de insertie, atunci tabelul adaugat înlocuieste tot domeniul continut.

NumRows, de tip Long, este numarul initial de linii ale tabelului.

NumColumns, de tip Long, este numarul initial de coloane ale tabelului.  

Obiectul Table

Este returnat prin numarul de ordine dintr-o colectie Tables.

Proprietatile obiectului se refera la formatarea globala a tabelului sau la obiectele componente ale unui tabel. Din prima categorie fac parte:

    • AutoFormatType, de tip Long, read only, este o constanta de tip WdTableFormat (vezi intrarea din Help corespunzatoare) care arata daca tabelul este formatat prin AutoFormat. De exemplu, wdTableFormatNone reprezinta un tabel neformatat, pe când wdTableFormatProfessional arata selectarea formatului automat Professional. Vezi si metoda AutoFormat.
    • Shading returneaza un obiect Shading prin care se stabilesc atributele de umbrire.
    • Uniform, de tip Boolean, read only, are valoarea True daca toate liniile au acelasi numar de coloane.

Accesul la obiectele componente se realizeaza prin proprietatile

    • Borders, colectia de chenare a tabelului,
    • Columns, colectia de coloane,
    • Rows, colectia de linii.

Metodele obiectului Table permit atât operatiuni asupra întregului tabel (autoformat, stergere, selectare, sortare, divizare etc.), cât si accesul la celulele tabelului. Mentionam:

    • Cell(Row,Column) returneaza un obiect Cell care refera celula de pe linia Row si coloana Column din tabel. Row si Column sunt de tip Long si au valori de la 1 la numarul maxim de linii, respectiv coloane.
    • Delete produce eliminarea obiectului, deci stergerea din document a tabelului.
    • Select realizeaza selectarea tabelului, astfel încât se poate opera apoi cu proprietatea Selection.
    • Sort(ExcludeHeader, FieldNumber, SortFieldType, SortOrder, FieldNumber2, SortFieldType2, SortOrder2, FieldNumber3, SortFieldType3, SortOrder3, CaseSensitive, LanguageID) produce sortarea tabelului. Datorita sintaxei complexe, argumentele vor fi studiate în Word VB Help.
    • Split BeforeRow) duce la divizarea tabelului înainte de linia indicata în BeforeRow (de tip Variant, poate fi un numar de linie sau un obiect Row).

Colectia Columns

Reprezinta colectia coloanelor unui tabel si este returnata prin proprietatea Columns a unui obiect Table.

Dintre proprietati enumeram

    • Borders, returneaza colectia de chenare,
    • Shading, returneaza un obiect Shading prin care se stabilesc atributele de umbrire,
    • Width returneaza sau stabileste latimea coloanelor, în puncte. Read/write, de tip Long.
    • First returneaza prima coloana din colectie. Read only.
    • Last returneaza ultima coloana din colectie. Read only.

Metodele permit operatiuni specifice tuturor colectiilor (Count, Add) sau specifice obiectului coloane de tabel:

    • Add(BeforeColumn) prin care se adauga o noua coloana în fata coloanei referite de BeforeColumn (care este de tip Variant, optional, returneaza un obiect Column).
    • AutoFit care ajusteaza latimea coloanei, daca este posibil, pentru a cuprinde textul interior.
    • DistributeWidth care produce o redistribuire a latimilor încât toate coloanele sa fie egale.
    • SetWidth(ColumnWidth, RulerStyle) care stabileste latimea coloanelor: ColumnWidth, de tip Single, este latimea în puncte; RulerStyle, de tip Long, controleaza modul în care este ajustata latimea. RulerStyle poate fi una dintre constantele WdRulerStyle: wdAdjustFirstColumn – modifica doar prima coloana, wdAdjustNone – nu modifica celelalte coloane, wdAdjustProportional – ajusteaza toate coloanele din dreapta, wdAdjustSameWidth – aceeasi latime tuturor coloanelor specificate. Ultimul argument este mai important pentru stabilirea latimii unor celule sau unei singure coloane (aplicând metoda obiectelor respective si nu colectiei).

Obiectul Column

Reprezinta o singura coloana dintr-un tabel. Este referita ca element al colectiei Columns:

expression.Tables(index tabel).Columns(index)

Dintre proprietatile obiectului mentionam:

    • Borders, Shading, Width sunt similare celor enumerate la colectia Columns.
    • Cells returneaza colectia de celule din coloana referita.
    • Index, read only, Long, returneaza numarul de ordine al coloanei în colectia Columns.
    • IsFirst, IsLast sunt True daca este referita prima, respectiv ultima coloana din colectie.
    • Next, Previous returneaza urmatorul element, respectiv precedentul element din colectia Columns.

Metodele obiectului Column sunt

    • AutoFit, Delete, Select, SetWidth cu explicatii evidente sau similare metodelor sinonime prezentate anterior.
    • Sort(ExcludeHeader, SortFieldType, SortOrder, CaseSensitive, LanguageID) care ordoneaza celulele coloanei. Argumentele sunt
    • ExcludeHeader, optionala, este True daca se omite din ordonare prima linie.
    • SortFieldType, optional, Variant, arata tipul de sortare – poate fi una dintre constantele WdSortFieldType: wdSortFieldAlphanumeric (valoarea implicita), wdSortFieldDate sau wdSortFieldNumeric.
    • SortOrder, optional, Variant, specifica ordinea. Poate fi o constanta de tip WdSortOrder: wdSortOrderAscending (implicita) sau wdSortOrderDescending.
    • CaseSensitive, optional, Variant, este True daca se ia în considerare capitalizarea literelor. Implicit este False.
    • LanguageID, optional, Variant, specifica limbajul de sortare. Poate fi una dintre constantele WdLanguageID (vezi WdLanguageID Property în Word VB Help).

Colectia Rows, Obiectul Row

Reprezinta colectia liniilor dintr-un tabel si, respectiv, o linie a tabelului. Utilizarea acestor obiecte este similara operarii cu obiectele Columns si Column. Exista o serie de proprietati specifice, linie antet, împartirea între pagini etc, dar corespund direct atributelor din Word si au semnificatii evidente.

Colectia Cells

Reprezinta celulele dintr-o coloana, linie, selectie sau domeniu.

Pe lânga proprietatile similare celor prezentate la coloane (Borders, Shading, Width, Height etc.) este utila proprietatea

    • VerticalAlignment care returneaza sau stabileste alinierea verticala a textului în celule. Poate fi o constanta de tip WdVerticalAlignment: wdAlignVerticalBottom, wdAlignVerticalCenter, wdAlignVerticalJustify sau wdAlignVerticalTop. Read/write Long.

Metodele mai des întrebuintate sunt

    • Add(BeforeCell) care adauga o noua celula înaintea celulei referite de BeforeCell (de tip Variant, optionala, returneaza un obiect Cell).
    • Merge care produce fuzionarea tuturor celulelor din colectie. Rezultatul este o singura celula în tabel.
    • Split(NumRows, NumColumns, MergeBeforeSplit) care produce divizarea celuleor din colectie potrivit valorilor argumentelor:
    • NumRows, NumColumns reprezinta numarul liniilor, coloanelor dupa divizare. Optionale, de tip Variant.
    • MergeBeforeSplit este de tip Variant, optional si are valoarea True daca se doreste fuzionarea celulelor înainte de divizare.
    • SetHeight(RowHeight, HeightRule) stabileste înaltimea pentru toata linia unei celule implicate.
    • RowHeight este Single si da înaltimea în puncte.
    • HeightRule este Variant, optionala si da regula de ajustare a celorlalte linii; poate fi una dintre constantele de tip WdRowHeightRule wdRowHeightAtLeast (valoarea implicita), wdRowHeightAuto sau wdRowHeightExactly.
    • SetWidth(ColumnWidth, RulerStyle), cu explicatia de la Columns.
    • DistributeHeight, DistributeWidth care distribuie înaltimea, respectiv latimea, în mod egal.

Obiectul Cell

Reprezinta o celula dintr-un tabel. Poate fi returnata prin metoda Cell dintr-un obiect Table sau ca element al colectiei Cells.

Proprietati de identificare sunt cele care returneaza, ca obiecte sau ca index, coloana si linia celulei:

    • Column, ColumnIndex returneaza ca obiect sau ca index coloana celulei.
    • Row, RowIndex returneaza ca obiect sau ca index linia celulei.

Proprietati navigare în colectia Cells sunt

    • Next, Previous cu semnificatia imediata.

Proprietatile de aspect si dimensiuni sunt cele prezentate la Columns/Column.

Proprietatea care da acces la continutul celulei si permite deci adaugarea de text etc. este:

    • Range care returneaza un obiect Range.

Metodele aplicabile unui obiect Cell sunt

    • AutoSum insereaza un câmp formula care calculeaza suma valorilor din tabel situate deasupra sau la stânga celulei.
    • Delete(ShiftCells) elimina celula referita, ShiftCells arata cum are loc actiunea. ShiftCells este Variant, optional si poate avea o valoare dintre constantele de tip WdDeleteCells: wdDeleteCellsEntireColumn, wdDeleteCellsEntireRow, wdDeleteCellsShiftLeft sau wdDeleteCellsShiftUp (potrivit optiunilor uzuale de la operarea în Word).
    • Formula(Formula, NumFormat) insereaza în celula o formula specificata si formateaza rezultatul. Argumentele
    • Formula este sirul care contine o formula admisa în Word De exemplu "=SUM(ABOVE)". Daca mai sus sau la stânga celulei sunt valori numerice, formula este optionala si se completeaza potrivit alegerilor implicite Word.
    • NumFormat este de tip Variant, optional si specifica formatul pentru rezultat într-o forma admisa (vezi Word VB Help –Numeric Picture (\#) field switch).
    • Merge MergeTo) produce unirea celulei curente cu celula referita, ca obiect, de MergeTo.
    • Select produce selectarea celulei, deci se poate apela apoi proprietatea globala Selection.
    • SetHeight, SetWidth stabilesc înaltimea si latimea celulei potrivit descrierii de la Cells.
    • Split NumRows, NumColumns) divizeaza celula în numarul indicat de linii si coloane. Valorile neprecizate sunt considerate 1.

Exemple cu obiecte Table, Column, Row, Cell

Subiectul este foarte amplu si pentru mai multe exemple se vor studia subiectele corespunzatoare din Word Visual Basic Help.

If Selection.Tables.Count >=1 Then
Selection.Tables(1).ConvertToText Separator:=wdSeparateByTabs
End If

converteste în text primul tabel din selectie, daca selectia contine tabele, separând continutul celulelor de pe o linie prin caractere tab.

Set myCell = ActiveDocument.Tables(1).Cell(Row:=1, Column:=1)
Set myCell = ActiveDocument.Tables(1).Columns(1).Cells(1)

stabilesc referinte la celula din prima linie si prima coloana a primului tabel din documentul activ. Ambele linii se refera la aceeasi celula.

i = 1
For Each celula In ActiveDocument.Tables(1).Range.Cells
celula.Range.InsertBefore Text:="Celula " & i
i = i+1
Next celula

produce numerotarea celulelor din primul tabel al documentului. Este de remarcat utilizarea proprietatii Range a obiectului Table (pentru a returna un obiect Range pentru care se returneaza colectia Cells), ca si utilizarea proprietatii Range a obiectului Cell pentru inserarea de text.

ActiveDocument.Tables(1).Columns(1).Select

selecteaza prima coloana a primului tabel.

ActiveDocument.Tables(1).Rows(1).Shading.Texture = wdTexture10Percent

aplica o umbrire de 10% primei linii din tabel.

Obiecte Microsoft Word (III)


În continuare sunt prezentate doar unele aspecte, considerate mai des utilizate, ale operarii cu alte obiecte (decât cele prezentate în precedentele doua fisiere) din modelul de obiecte al aplicatiei Microsoft Word. Pentru informatii mai ample se va studia Word VB Help sau alte materiale bibliografice.

Utilizarea Obiectului HeaderFooter

Obiectul HeaderFooter poate sa reprezinte fie un antet, fie un picior de pagina. Obiectul HeaderFooter este un membru al colectiei HeaderFooters, care este accesibila din obiectul Section. Este important de stiut ca nu se pot adauga elemente la colectia HeadersFooters. Un document Word poate sa aiba anteturi/picioare de pagina pentru prima pagina, pentru pagini pare si pentru pagini impare si toate acestea sunt reprezentate.

Se utilizeaza proprietatile Headers(index) sau Footers(index), ale obiectului Section, pentru a returna un obiect individual HeaderFooter, unde index este o constanta din tipul enumerat WdHeaderFooterIndex: wdHeaderFooterEvenPages, wdHeaderFooterFirstPage sau wdHeaderFooterPrimary. Este însa evident, dupa denumiri, ca Headers se refera la anteturi iar Footers la picioare de pagina.

Urmatorul exemplu arata cum se poate modifica prin program un picior de pagina (de pe pagina impara):

Set oRange = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
With oRange
.Delete
.Fields.Add Range oRange, Type:=wdFieldFileName, Text:="\p"
.InsertAfter Text vbTab
.InsertAfter Text vbTab
.Collapse Direction wdCollapseStart
.Fields.Add Range oRange, Type:=wdFieldAuthor
End With

Se observa definirea unui Range pentru a referi continutul piciorului de pagina, stergerea vechiului continut, adaugarea unui câmp cu numele fisierului (în Text se da switch-ul \p de inserare a caii fisierului), inserarea a doua caractere TAB (pentru pozitionarea în dreapta a denumirii fisierului), comprimarea domeniului la punctul de start si inserarea unui câmp cu numele autorului (din informatia adiacenta documentului).

Un obiect HeaderFooter poate fi returnat si prin proprietatea HeaderFooter a obiectului Selection, cu mentiunea ca selectia trebuie sa fie într-un antet sau picior de pagina. Aceasta conditie se realizeaza, de exemplu, prin utilizarea proprietatii View, aplicata ferestrei active, care returneaza un obiect View.

Proprietatea Type a obiectului View permite returnarea/stabilirea tipului de viziune (constante WdViewType, read/write, Long): wdMasterView, wdNormalView, wdOnlineView, wdOutlineView, wdPageView sau wdPrintPreview. În modul page layout (wdPageView), proprietatea SeekView returneaza sau stabileste care element din document este afisat (constante WdSeekView, Read/write, Long): wdSeekCurrentPageFooter, wdSeekCurrentPageHeader, wdSeekEndnotes, wdSeekEvenPagesFooter, wdSeekEvenPagesHeader, wdSeekFirstPageFooter, wdSeekFirstPageHeader, wdSeekFootnotes, wdSeekMainDocument, wdSeekPrimaryFooter sau wdSeekPrimaryHeader.

Urmatorul exemplu insereaza un numar de pagina centrat, în piciorul de pagina al paginii curente:

With ActiveWindow.View
.Type = wdPageView
.SeekView = wdSeekCurrentPageFooter
End With
Selection.HeaderFooter.PageNumbers.Add _
PageNumberAlignment:=wdAlignPageNumberCenter

Exemplul mai arata si modul de inserare a numerelor de pagina: prin proprietatea PageNumbers se returneaza colectia câmpurilor cu numerele de pagina incluse în respectivul antet sau picior de pagina. Proprietatea Add a colectiei adauga un nou câmp numar de pagina (în mod uzual singurul element al colectiei), referit printr-un obiect PageNumber pentru care se pot stabili o serie de atribute, dupa cum altele (reînceperea numerotarii, tipul de numerotare) se stabilesc la nivel de colectie.

În sfârsit, o serie de atribute importante pentru un document, cum ar fi tipurile de anteturi si picioare de pagina existente, se stabilesc din proprietatile obiectului PageSetup, care reprezinta comanda uzuala Page Setup (Word – meniul File).

Se utilizeaza proprietatea DifferentFirstPageHeaderFooter a obiectului PageSetup pentru a specifica o prima pagina diferita, proprietatea OddAndEvenPagesHeaderFooter pentru anteturi/picioare de pagina diferite pentru pagini pare/impare. Daca proprietatea OddAndEvenPagesHeaderFooter este True, atunci se returneaza antetul/piciorul paginii impare prin wdHeaderFooterPrimary si antetul/piciorul paginii pare prin wdHeaderFooterEvenPages.

Colectia Styles

Accesibila din obiectul Document, prin proprietatea Styles, colectia Styles reprezinta toate stilurile din documentul respectiv. Identificarea unui stil particular se efectueaza uzual prin

expression.Styles(index)

unde

expression returneaza un obiect Document

index este nume de stil (definit de utilizator), constanta WdBuiltinStyle (nume de stil predefinit, cum ar fi wdStyleHeading1) sau numar (indicele în colectie). Numele trebuie dat exact, cu spatieri daca asa a fost definit, cu exceptia capitalizarii.

Adaugarea unui nou stil definit de utilizator se realizeaza prin metoda Add, având sintaxa

expression.Add(Name, Type)

unde

expression este o expresie care returneaza un obiect Styles.

Name este String si reprezinta numele noului stil.

Type este Variant, optional si stabileste tipul stilului. Poate fi una dintre constantele WdStyleType: wdStyleTypeParagraph sau wdStyleTypeCharacter.

Obiectul Style

Reprezinta un singur stil predefinit sau definit de utilizator. Obiectul Style include atributele stilului ca proprietati, dintre care enumeram:

    • Font da acces la obiectul Font care permite formatarea caracterelor
    • ParagraphFormat da acces catre formatarea paragrafului
    • NextParagraphStyle stabileste stilul pentru urmatorul paragraf
    • BuiltIn care este True daca stilul este un stil predefinit (built-in).

De exemplu, prin

Set aDoc = ActiveDocument.AttachedTemplate.OpenAsDocument
With aDoc
.Styles(wdStyleHeading1).Font.Name = "Arial"
.Close SaveChanges wdSaveChanges
End With

se deschide sablonul atasat documentului activ ca un document Word (singurul mod în care se pot schimba stiluri într-un template) si se modifica proprietatea Font a stilului "Heading 1", dupa care se închide template-ul.

Colectia CommandBars

Ansamblul meniurilor si barelor de unelte sunt reprezentate de colectia CommandBars. Dupa cum se stie din operarea Word, la personalizarea mediului trebuie sa se precizeze domeniul de valabilitate al personalizarilor: sablon, document etc. În mod analog, înainte de a modifica programatic mediul de utilizare se va apela proprietatea globala CustomizationContext pentru a preciza locul de memorare al modificarilor mediului.

Pentru salvarea modificarilor de comenzi în sablonul Normal se va utiliza

CustomizationContext = NormalTemplate

iar pentru salvarea în sablonul atasat documentului

CustomizationContext = ActiveDocument.AtttachedTemplate

Exemplul urmator adauga comanda Double Underline la bara de unelte Formatting:

CustomizationContext = NormalTemplate
CommandBars ("Formatting").Controls.Add Type msoControlButton, ID:=60, Before:=7

Pentru o discutie mai ampla se va citi capitolul dedicat meniurilor si barelor de unelte.

Colectia Dialogs

Dialogurile mediului Word (cum ar fi Open, Save As etc.) sunt activate în Visual Basic prin apelul colectiei Dialogs. La aceasta colectie nu se pot adauga alte elemente. Exista totusi posibilitatea, discutata într-un capitol separat, de a proiecta dialoguri utilizator.

Pentru accesarea unui dialog, se utilizeaza Dialogs(index), unde index este o constanta de tip WdWordDialog, care identifica boxa de dialog necesara. Se returneaza astfel un obiect Dialog care poate fi exploatat prin proprietatile si metodele sale. Exemplul urmator afiseaza dialogul Open:

dlgAnswer = Dialogs(wdDialogFileOpen).Show

Denumirile sunt construite, în general, prin "wdDialog" & "nume meniu" & "nume comanda", de exemplu wdDialog & File & PageSetup => wdDialogFilePageSetup. O parcurgere a elementelor tipului enumerat WdWordDialog, prin intermediul Object Browser-ului, este edificatoare.

Pentru informatii mai ample se vor studia articolele din Word Visual Basic Help – "Displaying built-in Word dialog boxes", "Built-in dialog box argument lists".

Dintre proprietatile si metodele unui obiect Dialog mentionam:

    • Type, proprietatea care returneaza tipul boxei built-in. Poate fi una dintre constantele WdWordDialog. Read-only, Long.
    • DefaultTab, proprietatea care returneaza sau stabileste fisa activa la afisarea dialogului. Poate fi o constanta de tip WdWordDialogTab. Read/write, Long.
    • Display, metoda care afiseaza dialogul, fara a transmite actiunile efectuate de utilizator asupra dialogului.
    • Show, metoda care afiseaza dialogul, actiunile utilizator fiind transmise sau executate.
    • Execute, metoda care aplica configurarea curenta a optiunilor dintr-un dialog.

Adaugarea si editarea câmpurilor dintr-un document

Se pot adauga câmpuri la un document prin aplicarea metodei Add colectiei Fields.

expression.Add(Range, Type, Text, PreserveFormatting)

unde

expression este o expresie care returneaza un obiect Fields.

Range este o expresie care returneaza un Range. Este domeniul unde se adauga câmpul. Daca domeniul nu este redus la punctul de insertie, câmpul înlocuieste domeniul.

Type este de tip Variant, optional. Stabileste câmpul care se insereaza. Poate fi o constanta de tip WdFieldType (vezi Help).

Text este de tip Variant, optional. Text aditional necesar specificarii câmpului (de exemplu informatii de gen switch).

PreserveFormatting este de tip Variant, optional. Are valoarea True pentru a pastra formatarea câmpului si la actualizari.

Dintre proprietatile obiectului Field, membru al colectiei Fields, mentionam

    • Result, care returneaza un obiect Range reprezentând rezultatul câmpului.
    • Code, care returneaza un obiect Range reprezentând codul câmpului.
    • Next, care returneaza urmatorul câmp în colectie.
    • Previous, care returneaza câmpul precedent din colectie.

Dintre metode amintim

    • DoClick, echivalent cu actionarea câmpului de catre mouse.
    • Update, care produce actualizarea rezultatului (recalcularea).

Exemplul urmator schimba codul primului câmp din selectie, actualizeaza câmpul si afiseaza rezultatul:

If Selection.Fields.Count >=1 Then
With Selection.Fields(1)
.Code.Text = "CREATEDATE \*MERGEFORMAT"
.Update
MsgBox .Result.Text
End With
End If

Observatie. Pentru alte obiecte, cum ar fi Shapes, care reprezinta obiectele dintr-un strat de desen (drawing layer), se vor vedea capitolele dedicate obiectelor comune tuturor aplicatiilor Office.

Verificarea daca un obiect este valid

În aceasta sectiune se discuta câteva tehnici pentru verificarea validitatii unei valori returnate de o expresie sau care este memorata într-o variabila. Aceste verificari pot elimina erori în executia codului proiectat.

Se poate utiliza functia TypeName pentru a determina un tip de obiect. Sintaxa este

TypeName varname)

unde varname este un Variant care contine orice variabila cu exceptia variabilelor de un tip definit de utilizator.

În exemplul urmator se afiseaza un mesaj în bara de stare a aplicatiei în cazul cand Selection.NextField returneaza un obiect Field (informatie utila în prelucrarea formularelor):

If TypeName(Selection.NextField) = "Field" Then StatusBar = "Mai exista un câmp"

O forma echivalenta este

Set myField = Selection.NextField
If TypeName(myField) = "Field" Then StatusBar = "Mai exista un câmp"

În cazul când nu s-ar fi returnat un obiect, valoarea functiei era Nothing:

If Not (myField Is Nothing) Then myField.Update

Este disponibila proprietatea globala IsObjectValid prin care se determina daca obiectul referit de o variabila este un obiect valid. Aceasta proprietate returneaza False daca obiectul referit a fost sters (nu exista). Utilizarea este

expression.IsObjectValid(Object)

unde

expression este o expresie care returneaza un obiect Application, optionala.

Object este de tip Object, o variabila care se refera la un obiect.

Exemplul urmator efectueaza o trecere prin toate paragrafele, le numara si compara cu proprietatea Count (o verificare de dragul exemplificarii):

Dim i As Integer
i = 1
Do While IsObjectValid(ActiveDocument.Paragraphs(i).Next)
i = i + 1
Loop
MsgBox Str(i) & " paragrafe = (?) " & Str(ActiveDocument.Paragraphs.Count)

Modificarea comenzilor Word

Majoritatea comenzilor Word pot fi modificate prin transformarea lor în macro-uri.

Pentru afisarea listei cu toate comenzile Word disponibile, se urmeaza secventa de comenzi, initiata din Word:

    • Tools
    • Macro
    • selecteaza Word commands în lista Macro in
    • în boxa Macro name se afiseaza toate comenzile, denumirile având ca prima aprte numele meniului utilizat implicit pentru comanda (de genul FileOpen).

Se poate înlocui o comanda Word printr-un macro, daca se scrie o procedura macro (reamintim ca o procedura fara argumente este recunoscuta ca un macro) cu acelasi nume ca si comanda. Daca se creeaza o procedura cu numele FileSave, aceasta este executata de catre Word atunci când se da comanda Save (meniul File), sau se click-eaza butonul Save (de pe bara Standard) sau se tasteaza combinatia directa asociata cu FileSave.

Pentru scrierea unei proceduri de acest gen se poate urma

    • Tools => Macro => Macros => Word commands în Macro in
    • selectarea comenzii care se înlocuieste
    • selectarea locului de memorare în boxa Macro in. De exemplu Normal.dot pentru valabilitate generala (obtinerea unui macro global).
    • Create

Editorul Visual Basic deschide un modul care contine un sablon al noii proceduri, cum ar fi

Sub FileSaveHtml()

' FileSaveHtml Macro
' Save file as HTML document

WordBasic.FileSaveHtml

End Sub

în care se pot completa/sterge orice instructiuni.

Pentru a reveni la comanda Word initiala este suficient sa se elimine sau sa se redenumeasca procedura cu numele comenzii.

Se poate înlocui, de asemenea, o comanda Word daca se creeaza un modul de cod având acelasi nume cu comanda (de exemplu FileSave) si care contine o procedura denumita "Main".

Lucrul cu evenimente

Un eveniment este o actiune recunoscuta de un obiect si pentru care se poate scrie cod care sa se execute, ca raspuns la producerea evenimentului. Evenimentele pot sa se produca atât ca rezultat al actiunii utilizatorului sau prin program, cât si prin declansarea de catre sistem.

În Microsoft Word sunt recunoscute mai multe categorii de evenimente: asociate unui document, asociate aplicatiei si asociate controalelor ActiveX.

Evenimente ale obiectului Document

Trei evenimente sunt recunoscute de obiectul Document: Close, New si Open.

    • Close se produce atunci când se închide documentul. Daca procedura de raspuns este memorata într-un template, se executa atât la închiderea oricarui document bazat pe sablon, cât si la închiderea sablonului daca este deschis pentru editare.
    • New se produce la crearea unui nou document bazat pe sablon (codul de raspuns este memorat în sablon, nu în document). O procedura de raspuns la New, memorata în document, nu se va executa niciodata.
    • Open se produce la deschiderea documentului. Vezi si observatia legata de sablon de la Close.

Procedurile de raspuns la aceste evenimente se scriu în modulul clasa intitulat "ThisDocument". Pentru a crea o procedura se urmeaza etapele:

  1. În Project Explorer, sub proiectul Normal sau document, se dublu clickeaza ThisDocument. (În viziunea Folder, ThisDocument este localizat în folderul Microsoft Word Objects.)
  2. În lista Object se selecteaza Document.
  3. În lista Procedure se selecteaza evenimentul dorit (Close, New sau Open). Ca rezultat se adauga în modul o procedura vida, denumita standard.
  4. Se completeaza procedura cu instructiunile necesare scopului urmarit.

Urmatorul exemplu maximizeaza fereastra aplicatiei Word atunci când documentul este deschis:

Private Sub Document_Open()
Application.WindowState = wdWindowStateMaximize
End Sub

Domeniul de valabilitate (vizibilitate) a unei proceduri eveniment depinde de locul memorarii (de revazut completarile date la enumerarea evenimentelor).

Procedurile eveniment din template-ul Normal nu au un domeniu global. Ele se vor executa doar daca sablonul Normal este si sablonul atasat documnetului.

Procedurile care exista si în document si în template-ul atasat se vor executa amândoua.

Evenimente ale obiectului Application

Evenimentele aplicatiei apar atunci când utilizatorul paraseste aplicatia sau atunci când focalizarea este mutata pe alt document. Totusi, diferit fata de obiectul Document sau de controalele ActiveX, obiectul Application nu recunoaste evenimentele în mod implicit (nu raspunde în mod standard la producerea lor). Din acest motiv, înainte de a utiliza evenimentele obiectului Application, se va crea un modul clasa nou si se declara un obiect de tip Application cu evenimente. Se utilizeaza, în acest scop, comanda Class Module din meniul Insert al mediului VBE.

Observatie. Denumirile utilizate în continuarea acestei sectiuni nu sunt standard, cu exceptiile evidente.

Pentru a permite evenimentele obiectului Application, se va adauga modulului clasa definit o declaratie de tipul

Public WithEvents App As Application

Dupa ce noul obiect a fost declarat cu evenimente, el apare în lista Object a modulului clasa si se pot scrie procedurile eveniment pentru noul obiect (selectabile din lista Procedure).

Înainte ca procedurile sa se execute, trebuie sa se conecteze obiectul declarat în modulul clasa cu obiectul Application. Acest lucru se poate efectua din orice modul utilizând, de exemplu, declaratia

Public apl As New EventClass

unde EventClass este numele modulului clasa creat.

Dupa crearea variabilei obiect apl (o instanta a clasei EventClass), se poate stabili egalitatea între obiectul App al clasei EventClass si obiectul Application Word prin

Sub InitializeApp()
Set apl.App = Application
End Sub

Dupa executarea procedurii InitializeApp, obiectul App din clasa EventClass puncteaza catre obiectul Application Word si procedurile evenimentelor din clasa se vor executa la aparitia evenimentelor corespunzatoare.

Exista doua evenimente recunoscute de obiectul Application (dupa permiterea lor, ca mai sus):

    • DocumentChange, care se produce la crearea unui nou document, la deschiderea unui document, sau la activarea unui alt document (mutarea focalizarii).
    • Quit, care are loc la parasirea aplicatiei Word de catre utilizator.

Urmatorul exemplu asigura ca barele de unelte Standard si Formatting sunt vizibile înainte de parasirea aplicatiei (încât urmatoarea activare a aplicatiei le afiseaza):

Private Sub App_Quit ()
CommandBars("Standard").Visible = True
CommandBars("Formatting").Visible = True
End Sub

Evenimentele controalelor ActiveX

Un document Word poate sa includa controale ActiveX cum ar fi boxe de control, liste ascunse, butoane de comanda. Pentru a scufunda un asemenea obiect într-un document, cel mai simplu este sa se vizualizeze cutia de unelte pentru controale prin

    • actionare buton dreapta mouse pe o bara de unelte
    • selectare Control Toolbox

sau

    • meniul View => Toolbars => selectare Control Toolbox.

Din cutia de controale se apasa categoria de controale dorita si la punctul de insertie se insereaza o instanta a obiectului. Dublu click pe obiectul inserat da acces la rutinele de procesare a evenimentelor asociate controlului. Pentru a vedea executia procedurilor se va actiona unealta Exit Design Mode din Control Toolbox.

Word implementeaza, pentru controalele ActiveX dintr-un document, evenimentele

    • LostFocus, care apare atunci când focalizarea este mutata de la control la alt obiect,
    • GotFocus, care apare atunci când focalizarea este mutata pe controlul ActiveX scufundat.

Fiecare control ActiveX recunoaste, totusi, evenimente aditionale, explicate la obiectele respective. În acest curs mai multe explicatii si exemple sunt date în capitolul "Controale ActiveX si dialoguri".

Utilizarea macro-urilor automate (Auto Macro)

Anumite proceduri macro, identificate prin denumirile speciale recunoscute ca atare de aplicatie, sunt executate în mod automat la efectuarea unei operatii specifice. Word recunoaste urmatoarele denumiri drept macro-uri automate:

AutoExec care se executa la pornirea aplicatiei Word sau se încarca un template global.

AutoNew care se executa la fiecare creare a unui document nou.

AutoOpen care se executa la deschiderea unui document existent.

AutoClose care se executa la închiderea unui document.

AutoExit care se executa la închiderea aplicatiei Word sau la descarcarea unui sablon global.

Macrourile automate sunt recunoscute daca

    • Modulul este bnumit cu numele macro-ului si contine o procedura denumita "Main."
    • O procedura, în orice modul, are o denumire rezervata.

Macrourile automate pot fi memorate oriunde, template-ul Normal, alt sablon sau în document, cu exceptia procedurii AutoExec care nu se executa daca nu este memorata în Normal template sau un template global memorat în folderul Startup.

În cazuri de conflict de denumiri, se executa macro-ul automat memorat în contextul cel mai apropiat, adica în ordinea: document…attached template…Normal template.

Observatie. Apasarea tastei Shift simultan cu comanda previne executarea unui macro automat. De exemplu, la crearea unui nou document pe baza unui template care are o procedura AutoNew, apasarea tastei Shift în momentul actionarii butonului OK din dialogul New, previne executarea macr-ului (tasta trebuie pastrata apasata pâna când se afiseaza noul document).

Într-o procedura care poate declansa un macro automat, prevenirea executiei se ia prin instructiunea

WordBasic.DisableAutoMacros

Automatizarea aplicatiilor

Pentru a putea schimba date cu alte aplicatii, cum ar fi Excel, Access etc., se utilizeaza tehnica de automatizare a aplicatiilor (cunoscuta anterior drept OLE Automation). Automatizarea permite returnarea, editarea si exportul datelor prin referirea obiectelor, proprietatilor, metodelor altor aplicatii. Obiectele aplicatii referite în alta aplicatie sunt denumite obiecte de automatizare.

Automatizarea aplicatiei Word din alta aplicatie

A. Primul pas pentru a face aplicatia Word disponibila în alta aplicatie, pentru automatizare (deci pentru manevrarea programatica sau nu a obiectelor Word), este crearea unei referinte la biblioteca de tipuri Word (Word type library):

    • Tools (din Visual Basic Editor)
    • References
    • selectarea boxei de control Microsoft Word 8.0 Object Library.

B. Se declara o variabila obiect care va referi un obiect Application Word, dupa exemplul

Dim appWD As Word.Application.8

C. Se apeleaza functia CreateObject (pentru crearea unui obiect de automatizare) sau GetObject (pentru regasirea unui obiect de automatizare existent) cu Word OLE Programmatic Identifier (Word.Application.8 sau Word.Document.8), ca în exemplul urmator. Pentru a vedea sesiunea Word se utilizeaza proprietatea Visible:

Dim appWD As Word.Application.8
Set appWD = CreateObject("Word.Application.8")
appWD.Visible = True

Functia CreateObject returneaza un obiect Application Word si-l asigneaza variabilei appWD. Utilizând obiectele, proprietatile si metodele obiectului Application Word se poate controla aplicatia Word prin intermediul variabilei appWD. De exemplu, crearea unui nou document

appWD.Documents.Add

D. Functia CreateObject porneste o sesiune Word pe care automatizarea nu o închide atunci când expira variabila obiect care se refera la obiectul Application Word. Nici stabilirea referintei obiectului la Nothing nu produce închiderea aplicatiei Word. Pentru aceasta se va utiliza metoda Quit a aplicatiei Word.

Urmatorul exemplu, din Microsoft Excel, insereaza datele din celulele A1:B10 din Sheet1 într-un document Word nou si, în acest document, le aranjeaza într-un tabel. Comentariile incluse explica etapele prelucrarii.


'declararea variabilei obiect appWD

Dim appWD As Word.Application
Err.Number = 0
On Error GoTo notloaded

'obtinerea unui obiect Word Application, daca este pornita o sesiune Word

Set appWd = GetObject(, "Word.Application.8")
notloaded
If Err.Number = 429 Then
'
se initiaza o sesiune Word (nu este alta sesiune deschisa)
'
Set appWD = CreateObject("Word.Application.8")
theError = Err.Number
End If
'se vizualizeaza sesiunea Word
appWD.Visible = True
With appWD
'crearea unui nou document
Set myDoc = .Documents.Add
With .Selection
'
' transferul datelor din foaia Excel în documentul Word,
' pe doua coloane separate prin TAB
'
For Each c In Worksheets ("Sheet1").Range("A1:B10")
.InsertAfter Text c.Value
Count = Count +1
If Count Mod 2 = 0 Then
.InsertAfter Text vbCr
Else
.InsertAfter Text vbTab
End If
Next c
'
' convertirea textului în tabel si autoformatarea tabelului

.Range.ConvertToTable Separator wdSeparateByTabs
.Tables(1).AutoFormat Format:=wdTableFormatClassic1
End With
'
' salvarea documentului Word
'
myDoc.SaveAs FileName:="C:\Temp.doc"
End With

' închiderea sesiunii Word, daca sesiunea este deschisa de acest cod

If theError = 429 Then appWD.Quit

' eliberarea variabilei appWD

Set appWD = Nothing

Automatizarea altei aplicatii din Word

Pentru a controla alte aplicatii dintr-un document Word, se va proceda în mod analog automatizarii aplicatiei Word din alte aplicatii (vezi sectiunea precedenta).

Cele doua exemple, unul referitor la Excel, celalalt la PowerPoint, devin mai explicite dupa revederea exemplului anterior.

Textul selectat în documentul Word activ este trimis catre o foaie de calcul Excel, în celula A1:

Dim xlObj As Excel.Application.8
If Tasks.Exists("Microsoft Excel") = True Then
Set xlObj = GetObject(, "Excel.Application.8")
Else
Set xlObj = CreateObject(, "Excel.Application.8")
End If
xl.Obj.Visible = True
If xlObj.Workbooks.Count = 0 Then xlObj.Workbooks.Add
xlObj.Worksheets("Sheet1").Range("A1").Value = Selection.Text
Set xlObj = Nothing

Exemplul urmator creeaza o nuoa prezentare PowerPoint, completeaza prima boxa text cu numele documentului Word activ si a doua boxa text cu primul paragraf al documentului. La terminare se elibereaza variabila obiect aplicatie.

Dim pptObj As PowerPoint.Application.8
If Tasks.Exists("Microsoft PowerPoint") = True Then
Set pptObj = GetObject(, "PowerPoint.Application.8")
Else
Set pptObj = CreateObject(, "PowerPoint.Application.8")
End If
ppt.Obj.Visible = True
Set pptPres = pptObj.Presentations.Add
Set aSlide =pptPres.Slides.Add(ndex:=1, Layout:=ppLayoutText)
aSlide.Shapes(1).TextFrame.TextRange.Text = ActiveDocument.Name
aSlide.Shapes(2). TextFrame.TextRange.Text = _
ActiveDocument.Paragraphs(1).Range.Text
Set pptObj = Nothing

Comunicarea cu obiectele Word scufundate

Se poate utiliza proprietatea Application a oricarui obiect Word pentru a returna obiectul Word Application. Acest lucru este util pentru returnarea obiectului Word Application dintr-un document Word scufundat în alta aplicatie.

Urmatorul exemplu, executat din Excel, necesita ca Shapes(1) din foaia activa sa fie un document Word scufundat (obtinut prin Insert…Object…). Prin exemplu se modifica documentul Word.

Dim appWD As Word.Application
Set embeddedDoc = ActiveSheet.Shapes(1)
Set appWd = embeddedDoc.OLEFormat.Object.Object.Application
appWD.ActiveDocument.Range(Start:=0, End:=0).InsertBefore Text:="Textul nou"

În mod similar, exemplul urmator, executat din PowerPoint, necesita ca Shapes(1) din primul slide sa fie un document Word embedded:

Dim appWD As Word.Application
Set embeddedDoc = Presentations(1).Slides(1).Shapes(1)
embeddedDoc.OLEFormat.Activate
Set appWD = embeddedDoc.OLEFormat.Object.Application
MsgBox appWd.ActiveDocument.Content.Text

Document Info


Accesari: 2817
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )