În continuare voi arăta cum putem folosi un fișier Excel ca ”bază de date” și un template Word cu placeholdere pentru a genera documente individuale (fișiere Word sau PDF) cu ajutorul unui Macro, respectiv al codului VBA.
Ce putem automatiza
Putem automatiza în general documente standardizate, precum: Contracte, Procese-Verbale, Decizii interne, Rapoarte, Adeverințe, Diplome și Certificate de absolvire, Scrisori etc.
În acest caz vom automatiza crearea unui Certificat de absolvire.
De ce să automatizăm
În primul rând, salvăm timp. Nu mai trebuie să dăm copy/paste de zeci de ori, nu mai trebuie să deschidem zeci de fișiere sau documente în același timp.
În al doilea rând, reducem foarte mult erorile de tipar care apar prin completarea manuală a datelor.
De asemenea, putem folosi baza de date în care păstrăm informațiile dacă o adaptăm automatizarii, având posibilitatea să selectăm exact câmpurile ce dorim să apară pe documentul generat.
Ce ne trebuie (software)
- Microsoft Excel și Word.
- Cunoștințe minime de operare calculator: cum să salvăm un fișier de tip Excel Macro-Enabled (.xlsm) sau Word Document (.docx), cum să deschidem editorul VBA (Alt+F11).
- Permisiuni pentru rularea Macro-urilor (File → Options → Trust Center → Trust Center Settings → Macro Settings)
- Sistem de operare – Windows 11 (pentru MacOS procedura poate fi diferită)
Procedura de automatizare
Locația
Pentru ca automatizarea să funcționeze toate fișierele trebuie să fie într-o locație cunoscută, pe dispozitivul nostru.
În cazul de față voi crea un folder nou pe hard disk și îl voi denumi ”Certificate de absolvire”. În acest folder voi adăuga toate fișierele necesare, template-ul Word, precum și fișierul Excel.
Vom crea codul în așa fel încât să nu depindă de o locație fixă, adică dacă mutăm sau copiem folderul principal (Certificate de absolvire) în altă locație pe calculatorul nostru sau chiar pe un alt PC sau laptop, automatizarea să funcționeze oriunde, fără probleme.
Template-ul Word
Pentru acest exemplu am creat un model de Certificat de absolvire folosind Canva și Word. Modelul poate fi descărcat de la finalul acestui articol.
Certificatul de absolvire va trebui să fie transformat în template-ul de care noi avem nevoie prin adăugarea de placeholdere. Aceste placeholdere sunt formate de text plasate între acolade pe care codul VBA din Excel le va identifica ca locații unde trebuie să introducă automat textul dorit de noi.
Exemplu de placeholder pentru nume: {nume_absolvent}
Exemplu de placeholder pentru absolvirea cursului: {curs_absolvit}
Atenție: Formatarea fonturilor trebuie să rămână exact așa cum ne dorim chiar dacă textul va lua forma unui placeholder. Fiecare placeholder trebuie să fie unic: dacă adăugăm același placeholder în mai multe locuri din document, va fi introdus același text.
Certificat fără placeholdere:

Certificat cu placeholdere:

Fișierul Excel (baza de date)
Vom crea un fișier Excel pe care îl vom denumi ”Absolventi_cursuri” și pe care îl vom salva (Save as type:) ca Excel Macro-Enabled Workbook. Sheet-ul (foaia) Excel pe care vom lucra o vom denumi “Absolventi” (dublu click pe Sheet1 pentru a schimba numele foii Excel).
Acest document Excel va trebui să ruleze Macros și anume să preia și să ruleze codul VBA pentru a automatiza crearea certificatelor de absolvire.
Din motive de siguranță Excel nu rulează Macros automat și trebuie activate din meniul File > Options > Trust Center > Trust Center Settings > Macro Settings prin selectarea “Enable all macros” sau ”Enable VBA macros” în funcție de varianta de Excel pe care o dețineți.
Vom crea un tabel în Excel prin denumirea coloanelor corespondente placeholderelor și anume: Nr. crt. | Nume complet | Curs absolvit | Data absolvirii | Locul absolvirii | Nume formator | Serie și nr. certificat, pe care le vom completa cu date fictive pentru a testa funcționalitatea, ca în imaginea de mai jos.

Putem adăuga și alte câmpuri dacă ne sunt necesare pentru baza noastră de date, precum CNP, date de identitate, cod client etc. dar momentan noi avem nevoie doar de cele ce vor fi preluate automat pe Certificatele de absolvire.
Crearea Macro VBA – codul pentru automatizare
Din fișierul Excel mergem la tab-ul Developer și dăm click pe butonul Visual Basic (stânga sus) sau apăsăm tastele Alt+F11 pentru a deschide fereastra de proiect VBA.
În fereastra deschisă mergem sus la meniu și apăsăm Insert → Module, unde introducem următorul cod VBA (explicații mai jos), după care apăsăm Save și închidem fereastra Visual Basic:
Sub GenereazaDiplome()
Dim ws As Worksheet
Dim wordApp As Object
Dim wordDoc As Object
Dim savePathDocx As String
Dim savePathPdf As String
Dim i As Long
Dim basePath As String
Dim diplomePath As String
' Lucram cu foaia Absolventi
Set ws = ThisWorkbook.Worksheets("Absolventi")
' Pornim Word (în background)
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = False
' Locatia unde este fisierul Excel
basePath = ThisWorkbook.Path
' Cream subfolderul "Diplome" daca nu exista
diplomePath = basePath & "\Diplome"
If Dir(diplomePath, vbDirectory) = "" Then
MkDir diplomePath
End If
' Pentru fiecare rând din tabel
For i = 2 To ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
' Deschidem template-ul (trebuie sa fie în acelasi folder cu Excel-ul)
Set wordDoc = wordApp.Documents.Open(basePath & "\certificat_template.docx")
' Înlocuim placeholderele
With wordDoc.Content.Find
.Execute FindText:="{nume_absolvent}", ReplaceWith:=ws.Cells(i, 2).Value, Replace:=2
.Execute FindText:="{curs_absolvit}", ReplaceWith:=ws.Cells(i, 3).Value, Replace:=2
.Execute FindText:="{data_absolvirii}", ReplaceWith:=Format(ws.Cells(i, 4).Value, "dd.mm.yyyy"), Replace:=2
.Execute FindText:="{locul_desfasurarii}", ReplaceWith:=ws.Cells(i, 5).Value, Replace:=2
.Execute FindText:="{nume_formator}", ReplaceWith:=ws.Cells(i, 6).Value, Replace:=2
.Execute FindText:="{serie_certificat}", ReplaceWith:=ws.Cells(i, 7).Value, Replace:=2
End With
' Definim numele fisierului rezultat
savePathDocx = diplomePath & "\Certificat_" & ws.Cells(i, 2).Value & ".docx"
savePathPdf = diplomePath & "\Certificat_" & ws.Cells(i, 2).Value & ".pdf"
' Salvam certificatele în Word
wordDoc.SaveAs2 savePathDocx
' Salvam certificatele si în PDF
wordDoc.ExportAsFixedFormat OutputFileName:=savePathPdf, _
ExportFormat:=17, _
OpenAfterExport:=False, _
OptimizeFor:=0, _
Range:=0, _
Item:=0, _
IncludeDocProps:=True, _
KeepIRM:=True, _
CreateBookmarks:=0, _
DocStructureTags:=True, _
BitmapMissingFonts:=True, _
UseISO19005_1:=False
' Închidem documentul fara sa afiseze nimic
wordDoc.Close False
Next i
' Închidem Word
wordApp.Quit
Set wordApp = Nothing
MsgBox "Certificatele au fost generate în folderul: " & diplomePath & vbCrLf & _
"Fisierele au fost salvate atât ca .docx, cât si ca .pdf", vbInformation
End Sub
Ce face acest cod?
- Creează un folder nou denumit ”Diplome” în interiorul folderului principal (Certificate de absolvire) lângă fișierul Excel și template-ul Word.
- Deschide template-ul certificat_template.docx din același folder cu Excel-ul.
- Generează câte un Certificat de absolvire pentru fiecare rând din tabelul Absolventi.
- Salvează toate certificatele în subfolderul Diplome în două formate: Word (.docx) și PDF (.pdf).
- La final afișează un mesaj de succes și locația folderului unde au fost generate certificatele.
Dacă dorim ca documentele să fie generate doar în Word putem șterge codul de generare PDF aflat între liniile ‘ Salvam certificatele si în PDF și ‘ Închidem documentul fara sa afiseze nimic.
Cum rulăm codul?
Din tab-ul Developer apăsăm butonul Macros aflat în partea din stânga sus lângă Visual Basic. Se va deschide fereastra Macro unde avem listate codurile VBA create. În acest caz selectăm GenereazaDiplome și apăsăm butonul Run.
Codul va rula câteva secunde iar la final va afișa mesajul de succes.
Acest cod VBA poate fi personalizat în funcție de necesități și folosit pentru generarea unor tipuri diverse de documente.
De asemenea acest tip de automatizare poate fi realizat și în Google Workspace/Drive folosind Google Docs, Sheets și Apps Script, ceea ce voi demonstra într-un articol viitor.
Fișiere
Model/Template Certificat de absolvire (Word):
