Belajar VBA - UserForm & Kontrol UI
Series/Belajar VBA/Episode 14
Episode 14 of 25

Belajar VBA - UserForm & Kontrol UI

Membangun antarmuka grafis sendiri dengan UserForm: mendesain form berisi TextBox ComboBox ListBox dan CommandButton, mengisi kontrol lewat event Initialize, menangkap aksi lewat event Click, dan menulis validasi input untuk laporan interaktif

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

Pendahuluan

Selama 13 episode, komunikasi macro dengan pengguna hanya lewat MsgBox dan InputBox. Episode ini mengubah segalanya: UserForm — antarmuka grafis yang bisa kalian desain sendiri, dengan kolom isian, daftar pilihan, dan tombol.

Mengapa ini penting? Karena alat yang dipakai orang lain harus mudah dipakai. Alih-alih menyuruh kolega mengubah nilai di kode, kalian bisa membuat form sederhana: pilih bulan, klik tombol, laporan keluar. UserForm adalah perbedaan antara "macro untuk diri sendiri" dan "alat untuk tim".

Membuat UserForm

Di VBE, klik kanan proyek → Insert → UserForm. Jendela form terbuka bersama Toolbox yang berisi kontrol. Tarik-dan-lepas kontrol berikut ke form:

KontrolIkonFungsi
TextBoxabKolom isi teks
ComboBoxdropdownPilih satu dari daftar (bisa diketik)
ListBoxdaftarPilih dari daftar
CommandButtontombolAksi saat diklik
LabelATeks statis penjelas

Desain form kalian seperti ini:

plaintext
┌─────────────────────────────────┐
│ Laporan Penjualan               │
│                                 │
│ Bulan:      [ComboBox1    ▼]    │
│ Minimal:    [TextBox1      ]    │
│                                 │
│          [btnTampilkan]         │
└─────────────────────────────────┘

Gunakan Properties window (F4) untuk mengganti nama: TextBox1txtMinimal, btnTampilkan untuk tombol. Nama yang deskriptif membuat kode event jauh lebih mudah dibaca.

Event Initialize: Mengisi Form Saat Dibuka

Event UserForm_Initialize berjalan otomatis setiap form dibuka — tempat ideal mengisi ComboBox dan nilai awal:

Mengisi form saat dibuka
Private Sub UserForm_Initialize()
    Dim bulan() As String
    Dim i As Long
 
    bulan = Split("Januari,Februari,Maret,April,Mei,Juni,Juli,Agustus,September,Oktober,November,Desember", ",")
 
    For i = LBound(bulan) To UBound(bulan)
        Me.cboBulan.AddItem bulan(i)
    Next i
 
    Me.cboBulan.ListIndex = 0
    Me.txtMinimal.Value = "1000000"
End Sub
  • Me merujuk ke form itu sendiri — semua kontrol diakses lewat ini.
  • AddItem menambah entri ComboBox.
  • ListIndex = 0 menandai pilihan pertama sebagai default.

Event Click: Menangkap Aksi Tombol

Saat tombol diklik, event Click miliknya berjalan:

Aksi tombol Tampilkan
Private Sub btnTampilkan_Click()
    Dim nilai As Double
 
    If Not IsNumeric(Me.txtMinimal.Value) Then
        MsgBox "Minimal harus berupa angka.", vbExclamation
        Exit Sub
    End If
 
    nilai = CDbl(Me.txtMinimal.Value)
 
    With Sheet1.Range("A1:C100").AutoFilter
        .Field = 3
        .Criteria1 = ">=" & nilai
    End With
 
    MsgBox "Filter diterapkan untuk bulan " & Me.cboBulan.Value
End Sub

Di sini terlihat pola penting: event adalah pintu masuk yang menangkap aksi, lalu memanggil logika yang sama seperti macro biasa.

Tip

Jangan menaruh logika panjang di dalam event Click. Pola terbaik: event memvalidasi lalu memanggil prosedur terpisah. Dengan begitu logika bisa diuji dan dipakai ulang tanpa membuka form — dan di episode 21 kita akan melihat ini sebagai bagian dari kode modular.

Validasi Input

Form yang baik menolak input buruk sejak awal. Tiga teknik dasar:

1. Cek Tipe dengan IsNumeric

Validasi angka
If Not IsNumeric(Me.txtMinimal.Value) Then
    MsgBox "Isi dengan angka.", vbExclamation
    Exit Sub
End If

2. Cek Kosong

Validasi wajib isi
If Trim(Me.txtNama.Value) = "" Then
    MsgBox "Nama tidak boleh kosong.", vbExclamation
    Me.txtNama.SetFocus
    Exit Sub
End If

SetFocus mengembalikan kursor ke kolom yang salah — membantu pengguna langsung memperbaiki.

3. Cek Panjang

Validasi panjang teks
If Len(Me.txtKode.Value) <> 6 Then
    MsgBox "Kode harus 6 karakter.", vbExclamation
    Exit Sub
End If

Event Tambahan yang Berguna

Change: Bereaksi Saat Isi Berubah

Realtime feedback
Private Sub txtMinimal_Change()
    If IsNumeric(Me.txtMinimal.Value) Then
        Me.lblInfo.Caption = "OK: angka valid"
    Else
        Me.lblInfo.Caption = "Periksa kembali input"
    End If
End Sub

Terminate: Bersih-bersih Saat Form Ditutup

Pembersihan saat ditutup
Private Sub UserForm_Terminate()
    Application.ScreenUpdating = True
End Sub

Menampilkan Form dari Macro

Form tidak muncul dengan sendirinya — harus dipanggil dari prosedur:

Menampilkan form
Sub JalankanForm()
    frmLaporan.Show
End Sub

Show menampilkan form modal: kode berhenti sampai pengguna menutupnya. Ada pula Show vbModeless (non-modal) yang mengizinkan interaksi dengan Excel selama form terbuka — lebih jarang dipakai dan lebih rumit.

Tombol Batal memakai method Hide:

Tombol batal
Private Sub btnBatal_Click()
    Me.Hide
End Sub

Hide menyembunyikan form tanpa menghancurkan objeknya — nilai properti kontrol masih bisa dibaca setelah form ditutup (sampai Unload).

Common Pitfalls

KesalahanDampak
Lupa Me. sebelum nama kontrolKode merujuk objek lain / error
Validasi hanya di tombol, tidak di event lainData buruk masuk lewat jalan lain
Form dimuat ulang terus (Show berulang)Event Initialize berulang, duplikat isi ComboBox
Nama kontrol tetap TextBox1, Button1Kode event sulit dibaca
Tidak ada tombol BatalPengguna terjebak di form

Penutup

Pada episode 14 ini, kalian telah membangun antarmuka interaktif dengan UserForm.

Inti yang harus dibawa pulang:

  • UserForm berisi kontrol: TextBox, ComboBox, ListBox, CommandButton, Label.
  • UserForm_Initialize mengisi kontrol saat form dibuka.
  • Event Click menangkap aksi; validasi input sebelum logika dijalankan.
  • Pola terbaik: event memvalidasi → memanggil prosedur terpisah.
  • Tampilkan form dengan .Show; sembunyikan dengan .Hide.

Di episode 15 selanjutnya kita mengamankan macro dengan error handling & debuggingOn Error GoTo, On Error Resume Next, Err.Number/Err.Description, breakpoint, Debug.Print, watch, dan Step Into/Over — agar kode yang rusak tidak meninggalkan pengguna dalam kebingungan. Sampai jumpa di episode 15!

Belajar VBA - UserForm & Kontrol UI | Belajar VBA