Prasyarat:
ListBox adalah sebuah elemen kontrol grafis yang memungkinkan pengguna untuk memilih satu atau beberapa item dari daftar pilihan yang terdapat dalam sebuah kotak yang umumnya terdiri dari beberapa baris.
Pengguna diberikan akses untuk mengeklik di dalam kotak pada item untuk memilihnya, terkadang dikombinasikan dengan Shift atau Ctrl untuk membuat beberapa pilihan sekaligus.
Untuk memudahkan pembahasan materi tentang Listbox, silahkan masuk terlebih dahulu ke Visual Basic Editor seperti yang sudah dibahas pada materi perkenalan Visual Basic Editor (VBA).
Buatlah sebuah Userform dan tambahkan sebuah Listbox kedalamnya. Silahkan design tampilan (UI) Userform dan juga listbox semenarik mungkin.
Dibawah ini adalah beberapa point property penting yang harus diubah dalam menggunakan Listbox.
ColumnCount | Jumlah Kolom Yang ingin ditampilkan (Default 1) |
ColumnHead | Untuk Menampilkan Header (Berlaku hanya untuk RowSource) |
ColumnWidth | Untuk mengatur lebar masing-masing kolom |
Untuk mengubah properti bisa melalui Propeties Windows atau bisa juga melalui script.
Pertanyaan pertama yang muncul setelah berhasil membuat Listbox adalah, bagaimana cara kita mengisi data ke dalam Listbox?
Ada 3 cara yang bisa dilakukan untuk mengisi data ke listbox, semua cara-cara ini memiliki keuntungan dan kekurangan masing-masing, dan cara ini juga akan mempengaruhi script untuk proses selanjutnya dari Listbox misalnya pencarian data atau menghapus data.
Script untuk mengisi data ke Listbox bisa disimpan di Events initialize
atau di Activate
agar script untuk mengisi data dijalankan ketika Userform pertamakali dijalankan.
Private Sub UserForm_Initialize() End Sub
Cara pertama untuk menambahkan data kedalam Listbox adalah dengan menggunakan Additem. Cara ini digunakan dengan menambahkan data satu persatu kedalam table Listbox.
Untuk contoh data manual scriptnya bisa dilihat dibawah ini.
ListBox1.AddItem "Ini adalah data 1" ListBox1.AddItem "Ini adalah data 2" ListBox1.AddItem "Ini adalah data 3" ListBox1.AddItem "Ini adalah data 4"
Untuk mempersingkat script diatas, seperti yang sudah dipelajari di Meteri Pernyataan With script bisa diringkas menjadi
With Listbox1 .AddItem "Ini adalah data 1" .AddItem "Ini adalah data 2" .AddItem "Ini adalah data 3" .AddItem "Ini adalah data 4" End With
Contoh lainnya, jika data berasal dari Range maka bisa ditambahkan dengan pengulangan (Looping)
For i=1 to 10 With Listbox1 .AddItem Worksheets("NamaSheet").Cells(i,2).value End With Next i
Jika data yang ingin dimasukan kedalam listbox lebih dari satu Column, maka untuk mengisi kolom lainnya bisa menggunakan List. Index Listbox selalu dimulai dari 0, untuk contohnya bisa dilihat dibawah ini
With Listbox1 .AddItem .List (.ListCount -1, 0) = "Ini adalah Data 1 kol 1" .List (.ListCount -1, 1) = "Ini adalah Data 1 kol 2" .List (.ListCount -1, 2) = "Ini adalah Data 1 kol 3" .AddItem .List (.ListCount -1, 0) = "Ini adalah Data 2 kol 1" .List (.ListCount -1, 1) = "Ini adalah Data 2 kol 2" .List (.ListCount -1, 2) = "Ini adalah Data 2 kol 3" End With
Contoh menggunakan pengulangan (Looping) dimana data diambil dari Range.
For i=1 to 10 With Listbox1 .AddItem .List (.ListCount -1, 0) = Worksheets("NamaSheet").Cells(i,2).value .List (.ListCount -1, 1) = Worksheets("NamaSheet").Cells(i,6).value .List (.ListCount -1, 2) = Worksheets("NamaSheet").Cells(i,7).value End With Next i
Cara kedua adalah dengan menggunakan RowSource. Cara ini adalah dengan memberikan sebuah alamat range ke listbox, sisanya tinggal listbox yang mengaturnya.
Untuk contoh penggunaan script dari Rowsource secara sederhana bisa ditulis seperti dibawah ini :
ListBox1.RowSource = "A1:J10"
Cara diatas sudah cukup untuk mengisi data ke Listbox. Tetapi cara seperti ini kurang baik untuk dilakukan, karena data yang diambil adalah data dari sheet active saat ini, bukan dari sheet yang telah ditentukan.
Untuk menambahkan data kedalam Listbox dari sheet yang telah ditentukan, bisa menggunakan 2 cara, pertama bisa menggunakan Nama Range.
ListBox1.RowSource = "DataSaya"
Cara kedua adalah dengan menggunakan fungsi Address dengan External True
ListBox1.RowSource = Worksheets("NamaSheet").Range("A2:J10").Address(External:=True)
Cara ketiga adalah cara campuran dari kedua cara diatas, cara kerjanya mirip seperti rowsource tetapi data ditambahkan secara langsung ke Listbox seperti additem.
Data yang ditambahkan kedalam list bukanlah alamat range melainkan data array atau nilainya.
Sederhananya data yang ditambahkan kedalam listbox berupa array, misalnya jika data yang ingin dimasukan kedalam listbox berupa data manual (Hardcode).
Script bisa ditulis seperti dibawah ini :
ListBox1.List= Array("Data1","Data2","Data3","Data4")
Contoh lainnya, misalkan jika data diambil dari alamat range, maka gunakan nilai .value
agar nilai menjadi array.
ListBox1.List= Worksheets("NamaSheet").Range("A2:J10").Value
Ini adalah beberapa trick yang bisa digunakan didalam Listbox
Seperti yang sudah dibahas, Additem
dan List
tidak memiliki header data, solusinya kamu bisa menggunakan sebuah listbox untuk membuat header, malah secara tampilan ini bisa jadi lebih baik.
Untuk menghilangkan kolom tertentu di Listbox, misalnya untuk data yang diambil melalui RowSource atau List, bisa diatur melalui ColumnWidth yang diatur ke 0
Contoh: Misalnya kolom 3 dan kolom 5 tidak ingin ditampilkan di Listbox, maka ColumnWidth
nya bisa diset seperti dibawah ini.
Listbox1.ColumnWidth = "56;90;0;150;0;79"
Bagaimana cara script code vba untuk mencetak data dengan kriteria tertentu dan berulang seperti pada aplikasi database