Belajar yuk.
Pada pembahasan tentang ComboBox, telah diulas tentang beberapa properti yang sering digunakan. Beberapa properti tersebut antara lain adalah Text, Value, ListIndex, BoundColumn, TextColumn, ColumnCount, dan sebagainya. Sebagian besar properti yang dimiliki oleh ComboBox juga dimiliki oleh ListBox.
Pembahasan kali ini adalah tentang ListBox. Sekilas akan diulang tentang properti yang juga dimiliki oleh ComboBox. Properti yang juga dimiliki oleh ComboBox yang akan turut dibahas kali ini adalah properti ListStyle. Pembahasan akan lebih mengkhususkan ke properti MultiSelect yang hanya dimiliki oleh ListBox. File tentang pembahasan ini dapat diunduh disini.
Sekilas properti yang dimiliki ListBox dan ComboBox
Pembahasan properti ComboBox pada coretan BelajarVBA 102 - ComboBox 02 dibagian bertajuk ComboBox list multi kolom hanya menampilkan satu kolom menggunakan sebuah userform bernama frmNomor3 yang berisi sebuah ComboBox bernama cboProd. Sumber data ComboBox tersebut adalah range A2:C5 di dalam object sheet bernama Sheet2 seperti yang tampak pada gambar berikut ini. Kali ini control ComboBox yang ada dalam userform frmNomor3 akan dibuang dan diganti dengan sebuah ListBox. ListBox tersebut akan diatur agar properti (Name), BoundColumn, ColumnCount, dan TextColumn memiliki nilai yang sama dengan yang diatur pada ComboBox, yaitu :- (Name) diisi cboProd
- BoundColumn diisi 2
- ColumnCount diisi 1
- TextColumn diisi 1
Membuat ListBox dapat dipilih lebih dari satu item
ListBox memiliki properti yang membuat user bisa memilih banyak item sekaligus. Properti ini bernama MultiSelect. Properti MultiSelect memiliki 3 (tiga) buah opsi, yaitu :- Single : bernilai 0 [fmMultiSelectSingle], yaitu hanya dapat memilih satu item (seperti di ComboBox)
- Multi : bernilai 1 [fmMultiSelectMulti], yaitu bisa memilih banyak item, tetapi dipilih dengan mengklik setiap item
- Extended : bernilai 2 [fmMultiSelectExtended], yaitu bisa memilih banyak item dengan bantuan tombol SHIFT ataupun CTRL
objectListBox.MultiSelect = nilai_opsiContoh :
- objectListBox : nama listbox atau isi dari properti (Name) maupun variabel yang menyimpan object control ListBox
- nilai_opsi : salah satu dari 3 (tiga) opsi yang telah dijelaskan di atas, yaitu fmMultiSelectSingle, fmMultiSelectMulti, atau fmMultiSelectExtended
- Sebuah listbox bernama lstMulti akan di-set dengan script agar bisa membuat user memilih lebih dari satu item dengan cara mengklik item dan memanfaatkan tombol SHIFT maupun CTRL.
Bunyi baris perintahnya adalah :
lstMulti.MultiSelect = fmMultiSelectExtended
Status terpilih atau tidaknya sebuah item dalam ListBox
Sebuah item yang terpilih (Selected) akan memiliki latar dengan warna tertentu. Jika sebuah item yang sedang dalam keadaan terpilih kemudian diklik, maka statusnya akan berubah menjadi tidak terpilih. Properti yang menyimpan status terpilih atau tidaknya setiap item dalam ListBox adalah properti Selected. Jika nilai dalam properti Selected milik item dengan index tertentu adalah TRUE, maka item listbox pada index tersebut sedang dalam keadaan terpilih. Jika bernilai FALSE, maka item pada index tersebut sedang dalam keadaan tidak terpilih. Properti Selected dapat digunakan untuk memilih atau pun membatalkan pilihan pada suatu item dengan menggunakan script.Baris perintah untuk mengetahui sebuah item dalam keadaan terpilih atau tidak adalah dengan syntax :
var_boolean_penyimpan = objectListBox.Selected(index)Contoh :
- var_boolean_penyimpan : variabel bertipe Boolean yang akan menjadi penyimpan nilai status terpilih atau tidaknya item dengan index tertentu
- objectListBox : nama listbox atau isi dari properti (Name) maupun variabel yang menyimpan object control ListBox
- index : nomor index (base 0) item ListBox yang akan dicari ambil nilai status terpilih atau tidaknya
- Ingin mengetahui status terpilih atau tidaknya item ke-5 (index ke-4 karena base 0) dalam sebuah listbox bernama lstMulti. Jika dalam keadaan terpilih, maka akan menampilkan pesan bertuliskan 'Terpilih'. Jika belum terpilih, maka akan menampilkan pesan 'Belum terpilih'.
Bunyi baris-baris perintahnya adalah :
Dim bStatus As Boolean
bStatus = lstMulti.Selected(4)
IF bStatus=TRUE Then
Msgbox "Terpilih"
Else
Msgbox "Belum terpilih"
End IF
Script di atas dapat disederhanakan menjadi :
IF lstMulti.Selected(4) Then
Msgbox "Terpilih"
Else
Msgbox "Belum terpilih"
End IF
objectListBox.Selected(index) = nilai_status_yang_baruContoh :
- objectListBox : nama listbox atau isi dari properti (Name) maupun variabel yang menyimpan object control ListBox
- index : nomor index (base 0) item ListBox yang akan dicari ambil nilai status terpilih atau tidaknya
- nilai_status_yang_baru : TRUE/FALSE, yaitu TRUE untuk membuat item dengan index tertentu menjadi dalam keadaan terpilih dan FALSE untuk membuat item dengan index tertentu tersebut tidak terpilih.
- Sebuah listbox bernama lstMulti akan membuat item ke-3 (index bernilai 2 karena base 0) menjadi tidak terpilih.
Bunyi baris perintahnya adalah :
lstMulti.Selected(2) = FALSE
Mengetahui jumlah item yang terpilih
Jumlah item yang dipilih oleh user dalam sebuah multiselect listbox didapatkan melalui pembacaan status setiap itemnya. Berarti diperlukan proses loop dari item pertama sampai item terakhir. Dalam proses loop tersebut dilakukan pemeriksaan status terpilih atau tidaknya, yaitu melalui properti Selected. Jika statusnya adalah TRUE, maka variabel penampung jumlah item terpilih ditambah dengan satu.Contoh :
- Menampilkan kotak pesan berisi jumlah item yang terpilih pada listbox bernama lstMulti.
Bunyi baris-baris perintahnya adalah :
Dim lIdx As Long 'variabel loop per item dalam listbox lstMulti
Dim lTerpilih As Long 'variabel penyimpan jumlah item terpilih
For lIdx = 0 To lstMulti.ListCount - 1
IF lstMulti.Selected(lIdx) Then
lTerpilih = lTerpilih + 1
End IF
Next lIdx
Msgbox "Jumlah item terpilih : " & lTerpilih
Memilih seluruh item
Proses memilih atau membatalkan pilihan pada seluruh item dalam listbox juga dilakukan dengan melakukan loop terhadap seluruh item. Di dalam proses loop seluruh item hanya berisi baris perintah untuk mengubah nilai properti Selected pada index tersebut menjadi TRUE (untuk memilih) atau FALSE (untuk membatalkan pilihan).Contoh :
- Memilih seluruh itam yang ada pada listbox bernama lstMulti.
Bunyi baris-baris perintahnya adalah :
Dim lIdx As Long 'variabel loop per item dalam listbox lstMulti
For lIdx = 0 To lstMulti.ListCount - 1
lstMulti.Selected(lIdx) = TRUE
Next lIdx
Msgbox "Proses selesai." & vbcrlf & "Seluruh item telah terpilih."
Contoh penggunaan listbox yang memanfaatkan properti MultiSelect dapat dilihat di file BelajarVBA103.xlsm pada sheet bernama MultiSelect. Penggunaan control Label juga telah disinggung pada file ini.
;)
Insya Allah pembahasan lebih detil tentang control Label dan TextBox bisa segera terwujud.
<previous | next>
Bacaan yang mencerahkan. Terima kasih Mr Kids. Saya tunggu postingan-postingan selanjutnya.
BalasHapusTerima kasih atas apresiasinya.
HapusKomentar ini telah dihapus oleh pengarang.
HapusIzin menuntut ilmu Pak, semoga segala ilmunya, menjadi shodaqoh jariah. Amin
BalasHapusass. mr kids
BalasHapusizin mengcopy artikelnya
sebagai bahan pembelajaran bagi saya
semoga ilmunya bertambah dan bermanfaat didunia n kelak di akhirat
amin
Terima kasih untuk penjelasannya. Salam kenal.
BalasHapusSilahkan dapatkan buku2 terbaru terbitan tahun 2015. Dan dapatkan diskonnya.
http://www.honbookstore.com/2015/02/teknik-rahasia-microsoft-excel-untuk.html
Silahkan kunjungi balik dan tinggal jejak alias komentar.
-Hon Book Store-
izin copy artikelnya gan.
BalasHapusterimakasih, ini sangat memperkaya pengetahuan
Silakan dan semoga bertambah manfaatnya.
Hapusimho,
agar lebih lengkap pembahasan beberapa properti milik listbox, sebaiknya lihat juga di coretan tentang combobox. Beberapa properti combobox dimiliki oleh listbox.
:)
ijin copy untuk sendiri, guru Mr. Kid
BalasHapuswah punya saya gak muncul hasil dari perkalian gimana ya, jadi bingung saya mas
BalasHapusiziin nitip peliharaan mas :) [ Blog abal abal Eksis terus ]
Terima Kasih banyak Mr. Kid... Ilmunya sangat bermanfaat.. cuman share ilmu yang ga abis abis meskipun dimakan waktu.
BalasHapusHai Adi,
HapusTerimakasih atas apresiasinya.
Regards,
Kid
Tulisan yang sangat membantu Mr. Kid. Saya kira banyak sekali yang menunggu kisah lanjut dari Tutorial VBA ini. Syukur misal jadi sebuah buku saya kira banyak juga yang akan berminat. :)
BalasHapusDear Mr.Kid
BalasHapusBagaimana menambah data atau baris pada baris listbox terpilih bukan menambah data atau baris terakhir?
Hai Yusuf,
HapusCoba lihat pembahasan listbox di milis Belajar-Excel :
https://groups.yahoo.com/neo/groups/belajar-excel/conversations/messages/41714
Untuk penggunaan properti ListFillRange, sila lihat :
http://b-excel.blogspot.co.id/2014/02/belajarvba-102-combobox-01.html
Regards,
Kid
Terimakasi om
Hapus.....
kalo copy paste dari sheet 1 ke sheet 2 tetapi untuk paste di sheet 2 bukan berada pada kolom A misal kolom G (Berada pada baris kosong kolom G)
saya sudah mencoba namun selalu paste di kolom A
Mungkin maksudnya copy suatu area range yang ada di sheet1 ke range tertentu di sheet lain...
HapusSheets("nama sheet asal").Range("alamat range dicopy").Copy Sheets("nama sheet tujuan").range("alamat tujuan")
Syarat dan ketentuan copy paste range berlaku.
Private Sub CommandButton1_Click()
Hapusa = Worksheets(“Sheet1”).Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To a
If Worksheets(“Sheet1”).Cells(i, 3).Value = “Barat” Then
Worksheets(“Sheet1”).Rows(i).Copy
Worksheets(“Sheet2”).Activate
b = Worksheets(“Sheet2”).Cells(Rows.Count, 1).End(xlUp).Row
Worksheets(“Sheet2”).Cells(b+1, 1).Select
‘yang saya inginkan missal dikolom 5 namun tidak bisa
ActiveSheet.Paste
Worksheets(“Sheet1”).Activate
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets(“Sheet1”).Cells(1, 1).Select
End Sub
Mohon Dibantu....Cells(b+1, 1)
Hmmm... Ada baiknya disempatkan mempelajari cara merujuk range seperti yang dibahas mulai dari :
Hapushttp://b-excel.blogspot.co.id/2013/09/belajarvba-011-range-01-berdasar-alamat.html
Perintah :
Worksheets(“Sheet1”).Rows(i).Copy
akan meng-copy 1 baris utuh, yaitu cells sebanyak 16ribu sekian kolom.
Kalau Anda meng-copy 1 baris full, Anda hanya bisa mem-paste di kolom A (kolom ke-1) saja.
Kalau area range data Anda sebenarnya hanya dari kolom A sampai kolom Z (26 kolom), gunakan proses copy seperti yang saya sarankan tempo lalu.
Misal :
data yang di-copy di sheet bernama 'Kid' range A17:Z23
akan di-paste ke sheet bernama 'Out' range G75
Perintahnya (1 baris perintah loh ya, bukan 2 baris perintah)
Sheets("Kid").range("A17:Z23").Copy Sheets("Out").range("G75")
Dengan properti Resize bisa lebih leluasa menentukan jumlah kolom maupun baris yang akan di-copy. Coretan tentang Resize ada di :
http://b-excel.blogspot.co.id/2013/09/belajarvba-011-range-04-offset-dan.html
terimakasi Mr.Kid atas bantuannya
HapusMr. Kid, saya baru belajar VBA, saya coba membuat form yang isinya kelas, nama, pembayaran, tanggal. pada cbbox kelas saya isi lewat rowsource range kelas. yang ingin saya tanyakan,bagaimana pada cbbox nama, dapat kah rowsource di isi otomatis value dari cbbox kelas, sebelumnya sudah sy buat name range untuk setiap kelas sesuai dengan list cbbox kelas, tolong bgt ya Mr. terima kasih sebelumnya
BalasHapusDiposting ke milis Belajar-Excel@yahoogroups.com ya
HapusLuar Biasa Mr. Kid dari awal hingga the endnya, ditunggu update-update selanjutnya.
BalasHapusTerrinakasih Mr. Kid., blog anda banyak sekali membantu saya.
BalasHapusKalo multiselect otomatis berdasarkan kriteria nilai textbox, apa bisa pak? Terimakasih