Dear Mr Kid,
Wah ternyata ada cara yang lain lagi untuk penyelesaian kasus ini,
terima kasih sekali atas ilmunya yang diberikan, sangat bermanfaat
sekali apalagi untuk saya yang baru mau belajar tentang VBA Excel.
daniel
On 5/2/2013 4:06 PM, Mr. Kid wrote:
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 With
menjadi :
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]
<mailto:[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]
<mailto:[email protected]>>
*To:* [email protected]
<mailto:[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