Dear Mr Kid,

Wah ternyata ada cara yang lain lagi untuk penyelesaian kasus ini, terima kasih sekali atas ilmunya yang diberikan dan penjelasaan yang sangat rinci, 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





Kirim email ke