Mengemas kode menjadi produk: membuat add-in .xlam yang bisa dipakai banyak workbook dan diinstal otomatis, membangun custom tab dan tombol ribbon dengan XML customUI, serta memanggil prosedur lintas project dengan Application.Run

Sampai episode 19, semua macro hidup di dalam satu workbook — hanya bisa dipakai di file itu. Episode ini mengubah posisi kalian dari "orang yang menulis macro" menjadi "orang yang membuat alat": add-in .xlam yang bisa dipasang sekali dan dipakai oleh semua workbook, plus ribbon custom agar alat itu mudah ditemukan pengguna.
Mengapa ini penting? Di dunia kerja, alat yang baik adalah alat yang dipakai orang lain tanpa bertanya. Add-in mengemas UDF dan macro menjadi satu paket terinstal; ribbon custom memberi tombol yang jelas — dan kombinasi keduanya adalah cara paling profesional mendistribusikan VBA.
.xlam (Excel Add-In) adalah workbook khusus yang berisi kode/prosedur dan bisa di-load ke semua workbook yang dibuka. Cara membuatnya:
Sub/Function yang ingin dipakai bersama di workbook kosong.%APPDATA%\Microsoft\AddIns (lokasi default agar mudah diinstal).Setelah tersimpan, add-in bisa diaktifkan:
Setelah aktif, semua UDF di dalamnya bisa dipakai di semua workbook — persis seperti fungsi bawaan Excel.
Function di dalam add-in menjadi formula global:
Public Function Diskon(harga As Double, persen As Double) As Double
Diskon = harga * (1 - persen)
End Function
Public Function Rp(nilai As Double) As String
Rp = Format(nilai, "Rp #,##0")
End FunctionBegitu add-in aktif, sel mana pun bisa menulis =Diskon(B2; C2) atau =Rp(B2) — tidak peduli workbook mana yang dibuka.
Add-in bisa diinstal otomatis lewat kode — memudahkan distribusi ke tim:
Sub InstalAddIn()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\vba-dist\alat-laporan.xlam")
AddIns.Add wb.FullName
Application.AddIns("alat-laporan").Installed = True
wb.Close False
Set wb = Nothing
End SubAddIns.Add mendaftarkan file sebagai add-in; Installed = True mengaktifkannya. Setelah satu kali jalan, add-in otomatis dimuat di setiap sesi Excel berikutnya.
Tip
Saat mendistribusikan add-in ke tim, kombinasikan dengan dua pelajaran dari episode 16: tandatangani project dengan digital signature dan letakkan di Trusted Location. Kalau tidak, pengguna akan dihujani prompt keamanan setiap membuka Excel.
Ribbon Excel bisa diubah dengan file XML bernama customUI14.xml. Ini format Office Open XML yang memuat definisi tab, group, dan tombol.
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="RibbonOnLoad">
<ribbon>
<tabs>
<tab id="tabAlat" label="Alat VBA">
<group id="grpUtama" label="Tindakan">
<button id="btnBersihkan"
label="Bersihkan Data"
imageMso="DeleteTableRows"
onAction="OnBersihkan" />
<button id="btnLaporan"
label="Buat Laporan"
imageMso="ChartInsert"
onAction="OnLaporan" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>Elemen kunci:
| Elemen | Fungsi |
|---|---|
<tab> | Tab baru di ribbon |
<group> | Kelompok tombol dalam satu tab |
<button> | Tombol dengan label, imageMso, dan onAction |
onAction | Nama prosedur VBA yang dipanggil saat diklik |
File .xlsx/.xlsm adalah ZIP. Menambahkan customUI14.xml dilakukan dengan mengedit paket:
mkdir -p /tmp/edits/customUI /tmp/edits/_rels /tmp/edits/docProps
# 1. Ekstrak file workbook
unzip alat.xlsm -d /tmp/edits
# 2. Letakkan XML customUI
cp customUI14.xml /tmp/edits/customUI/customUI14.xml
# 3. Tambahkan relasi ke file utamanya
# 4. Kemas ulang
cd /tmp/edits && zip -r -X ../alat-ribbon.xlsm . -x ".*"Langkah 3 (relasi) membutuhkan penambahan baris di _rels/.rels. Untuk praktik tercepat, gunakan alat khusus seperti Custom UI Editor (tool gratis dari komunitas) yang menangani penyuntikan dan relasi secara otomatis.
Warning
Meng-edit file .xlsm sebagai ZIP membutuhkan presisi: relasi XML harus benar, jika tidak Excel menolak membuka file atau menganggapnya korup. Untuk serius, pakai Custom UI Editor atau Office-Custom-UI-Editor dari GitHub — jangan lupa uji file yang sudah disunting di Excel sebelum didistribusikan.
Setiap onAction harus punya pasangan prosedur VBA dengan signature tertentu:
Public Sub OnBersihkan(control As IRibbonControl)
BersihkanData
End Sub
Public Sub OnLaporan(control As IRibbonControl)
JalankanLaporan
End Sub
Public Sub RibbonOnLoad(ribbon As IRibbonUI)
' Simpan referensi ribbon untuk pembaruan tombol
End SubPerhatikan: prosedur callback harus menerima parameter control As IRibbonControl — signature inilah yang diharapkan Office saat tombol diklik.
Application.Run memanggil prosedur dengan nama yang ditentukan saat runtime — sangat berguna saat memanggil prosedur lintas add-in atau mengirim argumen dinamis:
Sub JalankanBerdasarkan(namaProsedur As String)
Application.Run namaProsedur
End Sub
Sub JalankanDenganArgumen()
Application.Run "HitungDiskon", 100000, 0.1
End SubApplication.Run juga bisa memanggil prosedur di add-in atau workbook lain dengan menyertakan nama file:
Application.Run "'alat.xlam'!HitungDiskon", 100000, 0.1Ini menjadi jembatan antar-workbook yang bersih — tanpa Reference manual.
Kombinasi lengkap untuk alat tim:
alat-laporan.xlam ← kode + UDF + callback ribbon
├── Modules: logika Sub/Function
├── UserForm: formulir input
└── customUI14.xml ← tombol ribbon "Alat VBA"Alurnya: install add-in (sekali) → tab Alat VBA muncul → klik tombol → prosedur berjalan. Pengguna tidak pernah melihat VBE.
| Kesalahan | Dampak |
|---|---|
.xlam disimpan bukan di folder AddIns | Tidak muncul di daftar add-in |
| UDF ditulis di modul worksheet/add-in salah | Formula tidak dikenali |
Signature onAction tidak cocok | Tombol ribbon tidak bereaksi |
File .xlsm disunting manual dan relasi rusak | File korup |
| Distribusi tanpa tanda tangan/trusted location | Prompt keamanan di setiap buka |
Pada episode 20 ini, kalian telah mengemas VBA menjadi alat yang bisa dipakai bersama.
Inti yang harus dibawa pulang:
.xlam adalah workbook khusus yang menyediakan UDF dan prosedur untuk semua workbook.AddIns.Add + Installed = True.customUI14.xml dengan <tab>, <group>, <button> dan onAction.control As IRibbonControl.Application.Run memanggil prosedur dinamis, termasuk lintas workbook/add-in.Di episode 21 selanjutnya kita menyetel performance tuning & best practice — ScreenUpdating, Calculation, EnableEvents, array processing, kode modular, naming konsisten, dan Option Explicit sebagai kebiasaan produksi. Sampai jumpa di episode 21!