Sepertinya script dari mas Opik ini bisa menjadi bahan wacana tentang
prosedur, terutama bagi BeExceller yang lagi keranjingan VBA.
Dari 3 prosedur event milik control option button ini ada proses yang
tetap, yaitu menghapus isi combobox bernama Kodepart, kemudian mengisi
ulang item combobox dari suatu data range tertentu dengan menggunakan loop.
Kali ini kita ndak akan mempermasalahkan bagaimana cara mengisinya (pakai
loop atau set row source), tetapi kita akan melihat sedikit tentang *cara
mengirim dan menerima suatu nilai dari satu variabel ke variabel lain antar
prosedur*
1. bunyi script untuk proses yang berulang adalah pada bagian :
Dim KP1 As Range
Dim ws As Worksheet
Set ws = Sheets("master")
KodePart.Clear
For Each KP1 In ws.Range("b4:b11")
With Me
KodePart.AddItem KP1.Value
End With
Next KP1
2. satu blok script tersebut diletakkan pada sebuah prosedur baru, misal
bernama IsiComboBox()
private sub IsiComboBox()
Dim KP1 As Range
Dim ws As Worksheet
Set ws = Sheets("master")
KodePart.Clear
For Each KP1 In ws.Range("b4:b11")
With Me
KodePart.AddItem KP1.Value
End With
Next KP1
end sub
3. dibuang dulu bagian yang tidak pokok, yaitu With Me dan End Withmenjadi :
private sub IsiComboBox()
Dim KP1 As Range
Dim ws As Worksheet
Set ws = Sheets("master")
KodePart.Clear
For Each KP1 In ws.Range("b4:b11")
KodePart.AddItem KP1.Value
Next KP1
end sub
4. mendefinisikan object inputan yang dibutuhkan.
>> ternyata yang dibutuhkan adalah object range yang akan menjadi isi
combobox (yang dimasukkan lewat loop), yaitu pada baris berbunyi :
For Each KP1 In ws.Range("b4:b11")
>> karena object-nya adalah range, dibuat dulu sebuah variabel object range
sebagai wadah inputan
dim rngInput as range
>> kemudian object range baru itu menggantikan bagian yang diproses [bagian
berbunyi : ws.Range("b4:b11")], sehingga berbunyi :
For Each KP1 In rngInput
>> script secara keseluruhan akan berubah menjadi :
private sub IsiComboBox()
Dim KP1 As Range
Dim ws As Worksheet
dim rngInput as range
Set ws = Sheets("master")
KodePart.Clear
For Each KP1 In rngInput
KodePart.AddItem KP1.Value
Next KP1
end sub
5. buang lagi baris-baris tidak perlu, yaitu yang berkaitan dengan object
worksheet, mulai dari deklarasi sampai penggunaannya, yaitu :
Dim ws As Worksheet
Set ws = Sheets("master")
>> maka susunan prosedur akan menjadi :
private sub IsiComboBox()
Dim KP1 As Range
dim rngInput as range
KodePart.Clear
For Each KP1 In rngInput
KodePart.AddItem KP1.Value
Next KP1
end sub
6. karena rngInput dibutuhkan oleh proses dan harus diterima dari prosedur
lain (dalam hal ini kiriman dari prosedur event setiap option button), maka
deklarasi variabel rngInput dipindah ke baris deklarasi prosedur (tidak
perlu dim lagi), sehingga baris deklarasi prosedur menjadi :
private sub IsiComboBox(*rngInput as range*)
dan baris deklarasi input yang menggunakan dim bisa dihapus.
Susunan prosedur akan menjadi :
private sub IsiComboBox(*rngInput as range*)
Dim KP1 As Range
KodePart.Clear
For Each KP1 In rngInput
KodePart.AddItem KP1.Value
Next KP1
end sub
***** sampai sini, sudah didapat sebuah prosedur untuk mengisi ComboBox
bernama KodePart yang harus disediakan data yang harus dimasukkan ke
combobox berupa sebuah range yang jelas letaknya.
Pada masing-masing prosedur event OptionButton click, yang membutuhkan
pengisian combobox, bisa hanya diisi dengan memanggil prosedur bernama
IsiComboBox
asal bisa menyediakan range sumbernya.
Contoh untuk tombol OptionButton1 akan memiliki prosedur event click
seperti :
Private Sub OptionButton1_Click()
'akan isi combobox, panggil si prosedur IsiComboBox
'dengan data yang akan diisikan ada di sheet bernama master pada
range B4:B11
IsiComboBox *Sheets("master").Range("b4:b11")*
End Sub
(terapkan juga untuk event tombol lain yang membutuhkan)
:)
moga-moga bisa menjadi mainan baru dalam ber-VBA bagi BeExceller yang lagi
semangat mengeksplorasi VBA.
Wassalam,
Kid.
2013/5/2 lapendosol opik <[email protected]>
> **
>
>
> Dear Daniel,
> Coba pake kode berikut, meskipun rada panjang kodenya, mohon master2 yang
> lain untuk mengkoreksi/meringkasnya:
> Private Sub OptionButton1_Click()
> Dim KP1 As Range
> Dim ws As Worksheet
> Set ws = Sheets("master")
> KodePart.Clear
> For Each KP1 In ws.Range("b4:b11")
> With Me
> KodePart.AddItem KP1.Value
> End With
> Next KP1
> End Sub
>
> Private Sub OptionButton2_Click()
> Dim KP2 As Range
> Dim ws As Worksheet
> Set ws = Sheets("master")
> KodePart.Clear
> For Each KP2 In ws.Range("e4:e11")
> With Me
> KodePart.AddItem KP2.Value
> End With
> Next KP2
> End Sub
>
> Private Sub OptionButton3_Click()
> Dim KP3 As Range
> Dim ws As Worksheet
> Set ws = Sheets("master")
> KodePart.Clear
> For Each KP3 In ws.Range("h4:h11")
> With Me
> KodePart.AddItem KP3.Value
> End With
> Next KP3
> End Sub
>
> Trimakasih,
> Wassalam,
>
> ------------------------------
> *From:* daniel_aho <[email protected]>
> *To:* [email protected]
> *Sent:* Thursday, May 2, 2013 10:58 AM
> *Subject:* [belajar-excel] Option button macro pada User form untuk
> menentukan range combo box
>
>
> Dear para master excel,
>
> Bagaimana code macro untuk Option Button yang dipakai untuk menentukan
> range dari combo box, jika pertanyaan saya kurang jelas, berikut saya
> lampirkan filenya,
>
> Mohon pencerahan dari master2 semua.
> Terima kasih,
>
> daniel
>
>
>
>