Mengotomasi Word dengan VBA: memahami Documents Selection dan Range, mencari mengganti teks dengan Find Replace, memakai template dokumen, dan studi kasus membuat laporan otomatis dari data Excel ke Word

Setelah 10 episode berkutat di Excel, saatnya melangkah ke aplikasi Office lain: Word. Pola pikirnya sama — VBA bekerja melalui Object Model host — tetapi objeknya berbeda: Documents, Range, Selection, dan Find alih-alih Workbooks dan Range.
Mengapa ini penting? Di dunia kerja, laporan hampir selalu berakhir sebagai dokumen Word — dan sumber datanya sering dari Excel. Kasus paling umum: data penjualan di Excel harus menjadi laporan naratif di Word setiap minggu. Mengotomasi ini menghemat jam kerja yang biasanya hilang untuk menyalin-menempel dan merapikan format.
Di Word, akses VBE sama: Alt+F11. Sebelum menulis kode, pastikan tab Developer aktif (File → Options → Customize Ribbon → centang Developer). Kode VBA Word diletakkan di Standard Module seperti biasa — Insert → Module.
Perbedaan paling penting dari Excel: Range di Word bukan blok sel, melainkan sepotong teks dalam dokumen — satu atau beberapa karakter sampai seluruh isi dokumen.
Set doc = ActiveDocument ' dokumen yang terbuka
Set doc = Documents("laporan.docx") ' by nama
Set doc = Documents.Open("C:\data\laporan.docx")Selection mewakili kursor beserta teks yang diseleksi — persis gerakan manual:
Selection.TypeText "Isi laporan ini otomatis."
Selection.TypeParagraphRange menunjuk sepotong teks yang tidak bergantung posisi kursor — lebih stabil untuk otomasi. Membuat teks:
Dim rng As Range
Set rng = ActiveDocument.Content
rng.InsertAfter vbCrLf & "Baris ditambahkan dari kode."ActiveDocument.Content adalah seluruh isi dokumen. InsertAfter menempelkan teks di belakangnya.
Tip
Untuk otomasi yang dipicu kode, utamakan Range daripada Selection. Selection bisa salah sasaran jika posisi kursor pengguna berubah di tengah proses; Range menunjuk lokasi teks yang tetap.
Find di Word bekerja dengan objek Range. Pola paling bersih menggunakan Execute:
With ActiveDocument.Content.Find
.Text = "TEMP_NAME"
.Replacement.Text = "Budi Santoso"
.Execute Replace:=wdReplaceAll
End WithPerhatikan penggunaannya: .Text adalah yang dicari, .Replacement.Text adalah penggantinya, dan Execute Replace:=wdReplaceAll menjalankan penggantian menyeluruh. Ini pola kerja utama mail merge manual — dokumen template berisi placeholder seperti TEMP_NAME, lalu kode mengisinya.
Template Word (.dotx) menyimpan kerangka dengan placeholder. Alur produksi laporan yang umum:
laporan.dotx berisi judul, bagian, dan placeholder {{NAMA}}, {{TOTAL}}.Find/Replace untuk setiap placeholder..docx baru.Sub BuatDariTemplate()
Dim doc As Document
Set doc = Documents.Add("C:\templates\laporan.dotx")
With doc.Content.Find
.Text = "{{NAMA}}"
.Replacement.Text = "Budi Santoso"
.Execute Replace:=wdReplaceAll
End With
With doc.Content.Find
.Text = "{{TOTAL}}"
.Replacement.Text = Format(15000000, "#,##0")
.Execute Replace:=wdReplaceAll
End With
doc.SaveAs2 "C:\output\laporan-budi.docx"
End SubDocuments.Add(path) membuka template sebagai dokumen baru tanpa menyentuh file template aslinya.
Sekarang mari gabungkan semuanya: macro ini berada di Excel, membaca data penjualan, lalu membuat laporan di Word lewat OLE Automation (dibahas penuh di episode 22 — di sini kita lihat pola praktisnya):
Sub ExcelKeWord()
Dim wdApp As Object
Dim wdDoc As Object
Dim total As Double
total = Application.WorksheetFunction.Sum( _
ThisWorkbook.Sheets("Data").Range("C2:C100"))
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Add
wdDoc.Content.InsertAfter "LAPORAN PENJUALAN" & vbCrLf
wdDoc.Content.InsertAfter "Total penjualan: " & Format(total, "#,##0") & vbCrLf
Set wdDoc = Nothing
Set wdApp = Nothing
End SubPoin penting: CreateObject("Word.Application") membuat Word berjalan di belakang layar, wdApp.Visible = True menampilkannya, dan variabel objek dibebaskan dengan Set ... = Nothing setelah selesai — mencegah proses Word tertinggal menggantung.
doc.SaveAs2 "C:\output\laporan.docx"
doc.Close SaveChanges:=wdDoNotSaveChangeswdDoNotSaveChanges menutup tanpa menyimpan — berguna saat kode membuka dokumen hanya untuk membaca.
| Kesalahan | Dampak |
|---|---|
Pakai Selection untuk teks yang harus tetap | Posisi kursor mengubah hasil |
Lupa Execute pada Find | Pencarian tidak pernah berjalan |
Documents.Add("...") path salah | Error file not found |
Tidak melepas objek OLE (Nothing) | Proses Word tertinggal |
Placeholder berbeda format (mis. {{NAMA}} vs {NAMA}) | Replace tidak kena |
Pada episode 11 ini, kalian telah mengotomasi Word dan menyambungkannya dengan Excel.
Inti yang harus dibawa pulang:
Documents → Range/Selection; Range lebih stabil untuk otomasi.Find/Replace dengan Execute adalah mesin pengisi template..dotx berisi placeholder diisi kode → laporan .docx baru.CreateObject("Word.Application").Set ... = Nothing.Di episode 12 selanjutnya kita masuk ke Access VBA: bekerja dengan DAO/ADODB Recordsets, SQL, DoCmd, event Form/Report, plus CRUD data, import Excel ke Access, dan laporan otomatis. Sampai jumpa di episode 12!