Următoarele secțiuni vă arată cum să lucrați cu anteturi și subsoluri în documentele Word. De asemenea, veți învăța să utilizați VBA pentru a manipula numerele de pagină atunci când acestea sunt incluse în anteturi și subsoluri.
Înțelegerea modului în care VBA implementează anteturile și subsolurile
Aveți posibilitatea să creați mai multe tipuri de anteturi și subsoluri într-un document Word: antetul și subsolul principal, anteturile și subsolurile speciale care apar numai pe paginile pare, anteturile și subsolurile unice numai pentru prima pagină și seturile de anteturi și subsoluri pentru fiecare secțiune dintr-un document, dacă este necesar.
Fiecare document primește automat un antet principal și un subsol principal, chiar dacă nu puneți nimic în ele. Apoi puteți crea diferite anteturi de prima pagină și de pagină pară, schimbând opțiunile din Page Setup pentru acea secțiune. (Faceți clic pe fila Layout din Panglică, apoi faceți clic pe săgeata mică din colțul din dreapta jos al zonei Page Setup. Aceasta deschide caseta de dialog Page Setup; faceți clic pe fila Layout. Caracteristicile pentru antetul principal și subsol – Header & Footer pot fi accesate și din fila Insert din Panglică.)
VBA utilizează următoarele obiecte pentru anteturi și subsoluri:
Accesarea unui antet sau subsol
Puteți accesa un antet sau subsol prin secțiunea corespunzătoare din document. De exemplu, următoarea comandă afișează o casetă de mesaj care conține textul din subsolul primei pagini care se află în a doua secțiune a unui document deschis numit Transfer.docm:
MsgBox Documents("Transfer.docm").Sections(2). _
Footers(wdHeaderFooterFirstPage).Range.Text
Următoarele declarații declară variabila myHeader a obiectului HeaderFooter și îi atribuie antetul principal în prima secțiune din documentul activ:
Dim myHeader As HeaderFooter
Set myHeader = ActiveDocument.Sections(1).Headers _
(wdHeaderFooterPrimary)
Verificarea existenței unui antet sau a unui subsol
Rețineți că Word creează automat un antet principal și un subsol principal pentru fiecare document, astfel încât aceste obiecte să existe întotdeauna. Pentru a afla dacă există alte tipuri de anteturi sau subsoluri, verificați proprietatea Exists a aplicației obiectului HeaderFooter. Următoarele declarații verifică în fiecare secțiune dacă există subsol pentru paginile pare și creează un antet generic (care conține numărul secțiunii și numele complet al documentului) formatat cu stilul numit Footer (care există implicit în majoritatea documentelor Word):
Dim cSection As Section
With ActiveDocument
For Each cSection In .Sections
cHeader = cSection.Headers(wdHeaderFooterEvenPages)
If Not cSection.Headers(wdHeaderFooterEvenPages).Exists Then
cSection.PageSetup.OddAndEvenPagesHeaderFooter = True
cSection.Headers(wdHeaderFooterEvenPages).Range.Text _
= "Sectiunea " & cSection.Index & " din " & .FullName
cSection.Headers(wdHeaderFooterEvenPages).Range. _
Style = "Even Footer"
End If
Next cSection
End With
Legarea la antetul sau la subsolul din secțiunea anterioară
În mod implicit, Word leagă antetul și subsolul din fiecare secțiune de antetul și subsolul din secțiunea anterioară. Pentru a șterge legătura, setați proprietatea LinkToPrevious a antetului sau subsolului la False; pentru a crea legătura, setați această proprietate la True. Următoarea instrucțiune șterge legătura dintre subsolul principal din a treia secțiune a documentului activ și subsolul corespunzător din a doua secțiune:
ActiveDocument.Sections(3).Footers _
(wdHeaderFooterPrimary).LinkToPrevious = False
Crearea unui antet diferit pentru prima pagină
Pentru a crea un antet diferit pe prima pagină a unei secțiuni, setați la True proprietatea DifferentFirstPageHeaderFooter a obiectului PageSetup pentru acea secțiune. Următoarele declarații verifică dacă a zecea secțiune a documentului activ conține un antet de primă pagină și dacă nu, va crea unul:
With ActiveDocument.Sections(10)
If .Headers(wdHeaderFooterFirstPage).Exists = False Then _
.PageSetup.DifferentFirstPageHeaderFooter = True
End With
Crearea de anteturi diferite pe pagini impare și pare
Pentru a utiliza anteturi diferite pentru pagini impare și pare ale documentului (altele decât prima pagină), creați un antet de pagină par. Antetul principal apare în mod implicit pe ambele pagini impare și pare până când creați un antet de pagină par, moment în care antetul principal devine antetul pentru paginile impare.
Ca și în antetul pentru prima pagină, folosiți obiectul PageSetup pentru a crea un antet de pagină par diferit, cu setarea proprietății OddAndEvenPagesHeaderFooter la True, ca în instrucțiunea următoare:
ActiveDocument.Sections(1).PageSetup.OddAndEvenPagesHeaderFooter = True
UTILIZAREA BUCLELOR IMBRICATE PENTRU A MODIFICA ANTETURILE ȘI SUBSOLURILE
Dacă scrieți proceduri pentru a formata documente, poate fi necesar să verificați sau să modificați toate anteturile și subsolurile dintr-un document. Cel mai simplu mod de a face acest lucru este de a utiliza două bucle Each ... Next, unde bucla exterioară funcționează prin fiecare obiect secțiune din colecția Sections și bucla interioară funcționează prin fiecare obiect HeaderFooter din colecția HeaderFooters din secțiunea respectivă.
Adăugarea numerelor de pagină la anteturi și subsoluri
Un antet sau subsol al unui document conține adesea un număr de pagină: fie un număr într-un format simplu (1, 2, 3 și așa mai departe), fie un număr mai complex care denotă capitolul și pagina din acesta, separate printr-un caracter separator.
VBA implementează numere de pagină printr-o colecție PageNumbers pe care o returnați utilizând proprietatea PageNumbers a obiectului HeaderFooter corespunzător în secțiunea corespunzătoare a documentului.
Adăugarea numerelor de pagină la una sau mai multe secțiuni ale unui document
Pentru a adăuga numere de pagină la un document, utilizați metoda Add cu colecția PageNumbers pentru secțiunea corespunzătoare a documentului. Sintaxa pentru metoda Add este următoarea:
expression.Add PageNumberAligment, FirstPage
Aici, expression este o expresie necesară care returnează o colecție PageNumbers. De obicei, puteți utiliza direct colecția PageNumbers.
PageNumberAlignment este un argument opțional de tip Variant care specifică alinierea pentru numerele de pagină adăugate. Tabelul următor enumeră constantele și valorile pe care le puteți utiliza.
FirstPage este un argument opțional de tip Variant pe care îl puteți seta la False pentru a face ca antetul și subsolul de pe prima pagină să elimine numărul paginii. Dacă omiteți argumentul FirstPage, proprietatea DifferentFirstPageHeaderFooter din obiectul PageSetup controlează dacă antetul și subsolul de pe prima pagină sunt identice sau diferite de cele din celelalte pagini din secțiune.
Ambele argumente PageNumberAlignment și FirstPage sunt opționale, dar de obicei se va specifica cel puțin argumentul PageNumberAlignment.
Următoarea subprocedură adaugă numere de pagină la toate anteturile din fiecare secțiune a unui document utilizând două bucle For Each...Next:
Sub AddPageNumbersToAllHeadersAndSections()
Dim cHeader As HeaderFooter, cSection As Section
With Documents("Headers and Footers.docm")
For Each cSection In .Sections
For Each cHeader In cSection.Headers
cSection.Headers(wdHeaderFooterPrimary).PageNumbers.Add _
PageNumberAlignment:=wdAlignPageNumberRight, FirstPage:=True
Next cHeader
Next cSection End With
End Sub
Eliminarea numerelor de pagină dintr-una sau mai multe secțiuni ale unui document
Pentru a elimina un număr de pagină dintr-o pagină, specificați obiectul PageNumber și utilizați metoda Delete. Următoarea subprocedură elimină fiecare obiect PageNumber din secțiunea curentă a documentului activ:
Sub RemovePageNumbersFromCurrentSection()
Dim ThisHeader As HeaderFooter
Dim ThisPageNumber As PageNumber
With Selection.Sections(1)
For Each ThisHeader In .Headers
For Each ThisPageNumber In ThisHeader.PageNumbers
ThisPageNumber.Delete
Next ThisPageNumber
Next ThisHeader
End With
End Sub
CUM SE AFLĂ DACĂ O SECȚIUNE A UNUI DOCUMENT ARE NUMERE DE PAGINĂ
Cel mai simplu mod de a afla dacă există un anumit număr de pagină este să verificați proprietatea Count pentru colecția PageNumbers pentru secțiunea corespunzătoare. De exemplu, următoarea comandă adaugă numere de pagină centrate la antetul de pagini pare din secțiunea curentă, dacă antetul nu le are deja:
If Selection.Sections(1).Headers(wdHeaderFooterEvenPages) _
.PageNumbers.Count = 0 Then Selection.Sections(1) _
.Headers(wdHeaderFooterEvenPages).PageNumbers.Add _
PageNumberAlignment:=wdAlignPageNumberCenter
Modificarea numerotării paginii pentru o secțiune
Pentru a modifica numerotarea paginii pentru o secțiune, lucrați cu proprietatea StartingNumber, utilizând proprietatea RestartNumberingAtSection, proprietatea IncludeChapterNumber și proprietatea ChapterPageSeparator, după este necesar.
Proprietatea StartingNumber este o proprietate de tip Long care conține numărul paginii de pornire pentru secțiune atunci când proprietatea RestartNumberingAtSection este setată la True. Când proprietatea RestartNumberingAtSection este setată la False, StartingNumber returnează 0 (zero).
Următoarele declarații setează numerotarea paginii pentru antetul principal din a patra secțiune a documentului activ pentru a începe de la 55 dacă nu are în prezent un număr de pornire atribuit:
With ActiveDocument.Sections(4).Headers(wdHeaderFooterPrimary)
If .PageNumbers.StartingNumber = 0 Then
.PageNumbers.RestartNumberingAtSection = True
.PageNumbers.StartingNumber = 55
End If
End With
Pentru a adăuga numărul capitolului la numerele de pagină, utilizați numerotarea titlului în document. Setați proprietatea IncludeChapterNumber la True și specificați separatorul de utilizat (de exemplu, wdSeparatorEnDash pentru caracterul en dash):
With ActiveDocument.Sections(4).Headers(wdHeaderFooterPrimary) _
.PageNumbers
.IncludeChapterNumber = True .ChapterPageSeparator = wdSeparatorEnDash
End With
Suprimarea numărului paginii pentru prima pagină
Pentru a suprima numărul de pagină pentru prima pagină dintr-o secțiune, setați proprietatea ShowFirstPageNumber pentru obiectul HeaderFooter corespunzător în secțiunea corespunzătoare la False:
ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers _
.ShowFirstPageNumber = False
Aveți posibilitatea să formatați numerele de pagină în două moduri: setând formatul în care sunt afișate (de exemplu, ca numere arabe regulate sau ca cifre romane cu litere mici) și prin formatarea fontului în care este afișat acel format.
Pentru a alege formatul în care sunt afișate numerele de pagină, setați proprietatea NumberStyle din colecția PageNumbers în cauză. De exemplu, următoarea instrucțiune formatează numerele de pagină în antetul principal în secțiunea a patra a documentului activ ca litere mici:
ActiveDocument.Sections(4).Headers(wdHeaderFooterPrimary) _
.PageNumbers.NumberStyle = wdPageNumberStyleLowercaseLetter
Odată ce numerele de pagină sunt în antet sau subsol, aveți posibilitatea să le formatați în mai multe moduri. O modalitate ușoară de a seta fontul în care este formatat un anumit număr de pagină este să utilizați metoda Select pentru a selecta obiectul PageNumber și apoi să aplicați formatarea la acesta așa ați face cu orice altă selecție, ca în următoarele declarații:
ActiveDocument.Sections(4).Headers(wdHeaderFooterPrimary) _
.PageNumbers(1).Select
With Selection.Font
.Name = "Impact"
.Size = 22
.Bold = True
End With
Crearea numerelor de pagină "Pagina X din Y"
De asemenea, aveți posibilitatea să implementați numerotarea paginilor utilizând codurile de câmp ale Word în antet sau subsol. Această tehnică este utilă mai ales atunci când doriți să numerotați paginile cu o schemă de numerotare "X din Y" — "Pagina 168 din 192" și așa mai departe. Următoarele instrucțiuni selectează antetul principal pentru secțiunea finală a documentului activ, aplică alinierea la centru și introduc textul și câmpurile pentru a produce acest tip de numerotare:
ActiveDocument.Sections(ActiveDocument.Sections.Count) _
.Headers(wdHeaderFooterPrimary).Range.Select
With Selection
.Paragraphs(1).Alignment = wdAlignParagraphCenter
.TypeText Text:="Pagina "
.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"Pagina ", PreserveFormatting:=True
.TypeText Text:=" din "
.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"NUMPAGES ", PreserveFormatting:=True
End With
Dacă inserați un număr de pagină utilizând un câmp în acest mod, aveți posibilitatea să accesați în continuare numărul paginii utilizând obiectul PageNumber corespunzător. (În acest caz, obiectul PageNumber constă din câmpul PAGE, nu din câmpul NUMPAGES.)