Lucrul cu obiectul ActiveDocument

Obiectul ActiveDocument returnează un obiect Document care reprezintă documentul curent cu care lucrați - cu alte cuvinte, oricare document are focalizarea în fereastra Word. Obiectul ActiveDocument se comportă ca un obiect Document, dar aveți grijă la următoarele două probleme posibile atunci când lucrați cu acesta.

Mai întâi, este posibil să aveți probleme la localizarea informațiilor despre obiectul ActiveDocument în sistemul de ajutor. Este de fapt o proprietate a obiectului Application, astfel încât statutul său ca obiect real este oarecum incorectă. Taxonomia obiectelor este un sistem clerical în evoluție și, după vedeți, rămâne în locuri ciudate.

Pentru a găsi obiectul ActiveDocument în sistemul de ajutor, sistemul MSDN sau VBA Editor Object Browser, trebuie mai întâi să localizați obiectul Application și apoi să vă uitați la proprietățile acestuia (sau ale membrilor). Doar amintiți-vă, ActiveDocument se găsește numai sub obiectul Application. E o eroare de redactare. Este ca și ați căuta California într-o indexul unei cărți de geografie, dar indexul este greșit și veți găsi statele enumerate sub numele lor proprii (de exemplu, Hawaii este sub H), dar pentru un motiv oarecare, California nu este listat sub C. Apoi, apare și soluția: În acest indice bizar, California se găsește doar sub intrarea pentru Statele Unite.

A doua ciudățenie a "proprietății" ActiveDocument este că acesta poate fi evanescent. Prima problemă este că, dacă nu există nici un document deschis în Word, nu există nici un obiect ActiveDocument și, prin urmare, orice cod care încearcă să lucreze cu obiectul ActiveDocument returnează o eroare. Deci, dacă doriți să utilizați obiectul ActiveDocument, nu uitați să verificați mai întâi codul proprietății Count din colecția Documents pentru a vă asigura că există de fapt un document deschis în prezent (valoarea pentru Count să fie cel puțin 1). Iată un exemplu care testează pentru a vedea dacă există un document deschis:

If Documents.Count = 0 Then
If MsgBox("Nu este deschis niciun document." & vbCr & vbCr & _
  "Doriti sa creati un document nou?", _
  vbYesNo + vbExclamation, "Nu este deschis niciun document") = vbYes Then
  Documents.Add
Else
End
End If 
End If

O a doua problemă cauzată de evanescențe ActiveDocument este că poate fi activ un alt document decât cel presupus a fi activ. Această problemă tinde să apară atunci când o procedură începe cu documentul activ și apoi creează un document nou pentru a lucra în el și când document nou devine automat documentul activ și, din acest moment, poate rezulta o confuzie.

Dacă știți numele documentului pe care doriți să îl activați, puteți verifica dacă numele documentului activ se potrivește, pentru a verifica dacă veți lucra cu documentul potrivit.

Dacă există vreo îndoială cu privire la documentul cu care lucrați, declarați o variabilă de obiect Document și utilizați acea variabilă obiect în cod, mai degrabă decât obiectul ActiveDocument.

De exemplu, următoarele comenzi declară un obiect Document și îi atribuie obiectul ActiveDocument, astfel încât în comenzile ulterioare din cod să se lucreze cu obiectul Document:

Dim myDocument As Document 
Set myDocument = ActiveDocument
With myDocument 
  'aici se scriu comenzile
End With

Sau, dacă cunoașteți numele documentului cu care doriți să lucrați:

Dim myDocument As Document 
Set myDocument = ActiveDocument 
If myDocument.Name = "CorrectFile.docx" Then 
  'aici se scriu comenzile 
End If