Belajar VBA - Word VBA: Document, Range & Templates
Series/Belajar VBA/Episode 11
Episode 11 of 25

Belajar VBA - Word VBA: Document, Range & Templates

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Membuka VBE Word

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.

Object Model Word: Dokumen dan Range

100%

Perbedaan paling penting dari Excel: Range di Word bukan blok sel, melainkan sepotong teks dalam dokumen — satu atau beberapa karakter sampai seluruh isi dokumen.

Mengakses dokumen
Set doc = ActiveDocument            ' dokumen yang terbuka
Set doc = Documents("laporan.docx") ' by nama
Set doc = Documents.Open("C:\data\laporan.docx")

Selection: Posisi Kursor

Selection mewakili kursor beserta teks yang diseleksi — persis gerakan manual:

Mengetik lewat Selection
Selection.TypeText "Isi laporan ini otomatis."
Selection.TypeParagraph

Range: Teks yang Posisinya Tetap

Range menunjuk sepotong teks yang tidak bergantung posisi kursor — lebih stabil untuk otomasi. Membuat teks:

Menambah teks di akhir dokumen
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.

Mencari dan Mengganti Teks

Find di Word bekerja dengan objek Range. Pola paling bersih menggunakan Execute:

Find & Replace
With ActiveDocument.Content.Find
    .Text = "TEMP_NAME"
    .Replacement.Text = "Budi Santoso"
    .Execute Replace:=wdReplaceAll
End With

Perhatikan 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: Dokumen Kerangka

Template Word (.dotx) menyimpan kerangka dengan placeholder. Alur produksi laporan yang umum:

  1. Buat template laporan.dotx berisi judul, bagian, dan placeholder {{NAMA}}, {{TOTAL}}.
  2. VBA membuka template sebagai dokumen baru.
  3. Kode melakukan Find/Replace untuk setiap placeholder.
  4. Dokumen disimpan sebagai .docx baru.
Buka template dan isi placeholder
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 Sub

Documents.Add(path) membuka template sebagai dokumen baru tanpa menyentuh file template aslinya.

Studi Kasus: Laporan Excel → Word

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):

Excel VBA membuat laporan Word
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 Sub

Poin 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.

Menyimpan dan Menutup

Simpan dan tutup
doc.SaveAs2 "C:\output\laporan.docx"
doc.Close SaveChanges:=wdDoNotSaveChanges

wdDoNotSaveChanges menutup tanpa menyimpan — berguna saat kode membuka dokumen hanya untuk membaca.

Common Pitfalls

KesalahanDampak
Pakai Selection untuk teks yang harus tetapPosisi kursor mengubah hasil
Lupa Execute pada FindPencarian tidak pernah berjalan
Documents.Add("...") path salahError file not found
Tidak melepas objek OLE (Nothing)Proses Word tertinggal
Placeholder berbeda format (mis. {{NAMA}} vs {NAMA})Replace tidak kena

Penutup

Pada episode 11 ini, kalian telah mengotomasi Word dan menyambungkannya dengan Excel.

Inti yang harus dibawa pulang:

  • Object Model Word: DocumentsRange/Selection; Range lebih stabil untuk otomasi.
  • Find/Replace dengan Execute adalah mesin pengisi template.
  • Template .dotx berisi placeholder diisi kode → laporan .docx baru.
  • Excel bisa membuat dokumen Word lewat CreateObject("Word.Application").
  • Selalu bebaskan objek OLE dengan 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!

Belajar VBA - Word VBA: Document, Range & Templates | Belajar VBA