Monday, May 23, 2016

Tips Dasar Macro - Cara mudah mengisi multi kolom Combobox

Combobox adalah satu dari sekian banyak control yang paling sering digunakan untuk menampilkan kumpulan data atau mungkin hanya sekedar menampilkan beberapa baris pilihan. 

Ada banyak cara untuk mengupdate / mengisi sebuah Combobox pada sebuah Userform dengan yang ada pada sebuah Range. Coba tuliskan di Google kata "populate Combobox with values from range", hasil nya pasti banyak :)

Di tips kali ini saya hanya akan membahas 2 cara yang saya anggap paling mudah untuk mengisi sebuah Combobox dengan nilai yang berasal dari sebuah Range yang baris nya bersifat dinamis.

Untuk lebih jelas nya, download dulu contoh file nya disini.

Cara pertama (sheet Combobox1) :

Private Sub UserForm_Initialize()
    Application.ScreenUpdating = False 
    
    Dim Baris As Integer 
    
    Baris = WorksheetFunction.CountA(Sheets("ComboBox1").Range("A:A"))
    Me.cbo1.ColumnCount = 3
    Me.cbo1.BoundColumn = 1
    Me.cbo1.ColumnHeads = True
    
    Me.cbo1.RowSource = "=Combobox1!A2:C" & Baris
End Sub
  1. Skrip untuk mengisi Combobox diatas, di letakan pada event Form_Initilize. Arti nya, skrip akan di jalankan / di aktifkan di awal form di buka.
  2. Inti dari skrip ini ada pada baris ke tiga, yaitu pada baris (yang di highlight kuning) Baris = worksheetFunction...
  3. Di baris tersebut menggunakan fungsi Counta, yaitu mencari berapa banyak baris yang tidak kosong dalam Kolom A pada sheet "ComboBox1" dan hasil nya dimasukan ke variabel bernama Baris. Dari sini kita tau sampai sejauh mana banyak data nya.
  4. Baris ke 4 - 6 di dalam prosedur berfungsi untuk merubah property dari ComboBox yang bernama cbo1
  5. Baris terakhir di dalam prosedur juga merubah property ComboBox, dan untuk kali ini adalah property RowSource.
  6. Property RowSource berfungsi sebagai sumber data. Untuk mengetahui sejauh mana data nya berada, maka dengan menggabungkan nya dengan nilai variabel Baris tadi kita dapat menjadikan Combobox nya selalu dinamis.

Cara kedua (sheet Combobox2) :

Cara ini terbilang lebih praktis. Yang paling penting adalah menyiapkan range yang akan digunakan untuk mengisi Combobox terlebih dahulu menjadi sebuah Tabel (Tab Home -> Styles -> Format as Table. Jangan lupa cek tanda "My Table Has Headers") dan range tersebut haruslah dijadikan sebuah range yang mempunyai nama (Named Range). Dalam contoh, nama range nya adalah "DBase".

Dengan menjadikan nya menjadi sebuah Tabel dan range yang mempunyai nama, maka proses mengisi data ComboBox lebih mudah dan dapat menjadi sebuah list yang dinamis.

Selanjutnya penjelasan mengenai skrip nya :

Private Sub UserForm_Initialize()
    Me.Cbo2.ColumnCount = 3
    Me.Cbo2.BoundColumn = 1
    Me.Cbo2.ColumnHeads = True
    
    Me.Cbo2.RowSource = "=DBase"
End Sub
  1. Sama seperti cara pertama, skrip diletakan di event Form_Initialize
  2. Baris pertama sampai dengan ke tiga adalah bagaimana merubah property control ComboBox bernama Cbo2
  3. Inti dari proses mengisi Combobox nya sendiri ada dibaris ke empat yaitu Me.Cbo2.RowSource = "=DBase"
  4. Property RowSource dapat langsung tuliskan sesuai nama yang kita berikan sebelumnya, yaitu "DBase"

Silahkan pilih cara mana yang menurut anda lebih mudah :)


No comments:

Post a Comment