Laman

BelajarVBA 101 - Controls Dalam Worksheet

Coretan Mr. Kid

Belajar sedikit-sedikit secara rutin dan konsisten akan berdampak lebih besar daripada belajar banyak sesekali.

Worksheet bisa diberi Form Controls dan ActiveX Controls untuk memudahkan interaksi dengan user. Object berupa shape juga bisa dimanfaatkan sebagai sebuah tombol untuk menjalankan prosedur VBA yang telah dibuat dalam sebuah general module. Bahasan kali ini adalah tentang menggunakan sebuah shape, Button Form Control, dan Command Button ActiveX Control untuk menjalankan sebuah prosedur VBA. File yang bisa digunakan untuk mencoba secara mandiri adalah BelajarVBA101_01.xlsm. Sebaiknya dalam membaca pembahasan ini disertai dengan membuka file BelajarVBA101_01.xlsm pada sheet bernama 'shapes_n_controls'.

Mengenal object control

Object controls adalah object yang dapat digunakan untuk mengatur interaksi dengan user sesuai jenis control tersebut. Misalnya, sebuah List Box dapat digunakan untuk mengatur daftar item yang dapat dipilih oleh user. Ketika sebuah item dalam List Box dipilih user, maka dapat digunakan untuk mengatur proses yang harus terjadi terhadap pemilihan item tersebut.
Object control berada di ribbon Developer -> group Controls -> item Insert


Object control yang tersedia terbagi dalam 2 kelompok besar, yaitu :
  1. Form Controls
    • Object controls bawaan Excel.
    • Tidak termasuk object controls yang diwaspadai oleh Security Excel.
    • Hanya memiliki prosedur sub event click saja.
    • Controls yang disediakan adalah Button, Label, Combo Box, List Box, Spin Button, Scroll Bar, Check Box, Option Button, Group Box.
    • Controls tambahan ketika menggunakan MS Excel 5.0 Dialog adalah Text Field, Combo List, dan Combo Drop Down.
    • Beberapa controls seperti Combobox, Listbox, Spin Button, dan sebagainya memiliki banyak properti yang bisa diset langsung melalui Format Control pada tab Control.
    • Beberapa controls, seperti Spin Button, Combobox, dan semacamnya, memberikan suatu nilai output. Nilai output tersebut dapat digunakan ketika control tersebut di-link ke suatu cell.
    • Form control berupa List Box dan Combo Box membutuhkan rujukan ke suatu range satu kolom saja untuk mengisi daftar pilihan yang dapat dipilih user.
  2. ActiveX Controls
    • Object controls tambahan dari library windows bernama mscomctl.ocx atau mscomctl2.ocx.
    • Memiliki banyak properti melalui dialog window Properties.
    • Memiliki banyak macam prosedur sub event.
    • Bisa digunakan dalam sebuah sheet maupun dalam sebuah UserForm.
    • Controls yang disediakan adalah Command Button, Label, Combo Box, List Box, Spin Button, Scroll Bar, Check Box, Option Button, Text Box, Image, Toggle Button.
    • Beberapa controls memberikan suatu nilai output. Nilai output tersebut bisa digunakan melalui baris-baris kode VBA maupun di-link ke sebuah cell.
    • Pengisian daftar pada control seperti Combo Box ataupun List Box bisa dengan merujuk ke suatu range tertentu ataupun melalui baris-baris kode VBA. Jumlah kolom dalam Combo Box atau List Box juga bisa lebih dari satu kolom.
    • Bisa menambahkan ActiveX Controls lain yang belum ada dalam daftar yang disediakan melalui :
      ribbon Developer -> group Controls -> Insert -> bagian ActiveX Controls -> item More Controls
    • Pengaturan nilai-nilai properti maupun penataan baris-baris kode dalam events dilakukan ketika dalam keadaan Design Mode ON, yaitu dengan cara :
      ribbon Developer -> group Controls -> klik Design Mode agar aktif (terjadi perubahan warna pada menu)
    • Controls akan dapat berfungsi ketika Design Mode dalam keadaan OFF, yaitu dengan mengklik ulang item Design Mode dalam ribbon Developer.

Mengenal properti khusus pada sebuah form control

Properti khusus yang dimiliki sebuah form control diletakkan pada tab Control dalam dialog window Format Control. Properti khusus tersebut dapat diakses dengan :
klik kanan form control -> Format Control -> klik tab Control

Form Control yang memiliki properti khusus pada umumnya adalah controls yang bisa memberikan nilai output, kecuali control bernama Group Box yang berfungsi membentuk sebuah group check box maupun option button. Berikut ini adalah form controls yang bisa memberi nilai output :
  • Combo Box (Drop Down)
     berupa nomor indeks item (item pertama bernomor indeks 1) yang dipilih user
  • List Box
     berupa nomor indeks item (item pertama bernomor indeks 1) yang dipilih user
  • Spin Button
     berupa nilai bilangan bulat setelah kegiatan naik atau turun terakhir
  • Scroll Bar
     berupa nilai bilangan bulat setelah kegiatan naik atau turun terakhir
  • Check Box
     berupa nilai TRUE ketika dalam status checked dan nilai FALSE ketika dalam status unchecked
  • Option Button
     berupa nomor indeks dari option button (item pertama bernomor indeks 1) dalam sebuah grup option

Mengenal properti ActiveX Control

Setiap ActiveX Control memiliki banyak properti yang bisa diatur nilainya melalui baris kode VBA maupun melalui dialog window properties. Cara menampilkan dialog window properties dari sebuah ActiveX Control yang diletakkan pada sebuah sheet adalah dengan :
  • Aktifkan Design Mode
  • Membuka dialog window properties
    klik kanan control -> pilih Properties

Properti utama dari setiap ActiveX Control adalah properti '(Name)' yang berfungsi untuk menentukan nama object control tersebut. Pada ActiveX Control yang diletakkan pada sebuah sheet, penggantian nilai properti '(Name)' juga dapat dilakukan melalui Name Box yang disediakan Excel. Teks yang diserahkan ke properti '(Name)' inilah yang akan aktif digunakan sebagai rujukan ke object control tersebut dalam baris-baris kode VBA.

Beberapa properti, yang ada disetiap ActiveX Control, yang sering digunakan adalah :
  • Enabled
      diisi TRUE jika boleh digunakan oleh user, dan diisi FALSE jika tidak boleh digunakan
  • Visible
      diisi TRUE jika akan ditampilkan kepada user, dan diisi FALSE jika akan disembunyikan dari pandangan user
Pada beberapa ActiveX Controls yang dapat memberikan nilai output, yang disimpan oleh si control pada properti bernama Value atau Text (bila ada), disediakan properties tambahan untuk mendukung fungsi control tersebut. Misalnya properti ListFillRange pada ComboBox dan ListBox atau properti SmallChange pada SpinButton atau ScrollBar. Beberapa ActiveX Control memiliki properti yang tidak ditampilkan dalam dialog window properties, tetapi memiliki fungsi yang sangat penting, seperti properti ListIndex pada ComboBox dan ListBox.

Mengenal event dari ActiveX Controls

Kelebihan dari ActiveX Controls adalah tersedianya banyak event yang menangkap perlakuan user terhadap control tersebut. Seperti event bernama Click yang akan menangkap perlakuan user saat mengklik control tersebut. Ada juga event bernama Change yang menangkap perlakuan user ketika mengubah nilai yang ada dalam control tersebut, seperti mengetik setiap karakter dalam Text Box Control atau mengubah pilihan dalam List Box maupun Combo Box dan sebagainya.

Dengan diketahuinya perlakuan user terhadap si control melalui event yang diproses tersebut, maka alur proses bisa diatur untuk melakukan suatu kegiatan komputasi tertentu. Misalnya, ketika user mengklik tombol tertentu, maka event Click akan diproses dan didalam event tersebut diberi baris-baris kode untuk menjalankan suatu proses copy data dari sheet input ke sheet database.

Dari sekian banyak event yang dimiliki setiap ActiveX Control, ada beberapa event yang selalu ada dan sering digunakan, antara lain adalah :
  1. GotFocus
    • Bereaksi ketika suatu proses atau user mengaktifkan control tersebut. Event ini bisa digunakan salah satu contohnya adalah untuk menata (bahkan sampai memvalidasi nilai) dari control tersebut atau controls yang lain.
    • Misalnya control TextBox bernama Negara. Ketika TextBox Negara diaktifkan, maka event GotFocus dari textbox ini akan beraksi dan dijalankan. Pada event GotFocus milik si textbox ini bisa diisi dengan proses menghapus nilai dalam textbox dan memeriksa nilai dalam textbox lain seperti textbox Nama harus sudah terisi lebih dulu. Jika textbox Nama belum terisi, maka proses akan memerintahkan textbox Nama untuk diaktifkan.
  2. LostFocus
    • Bereaksi ketika suatu proses atau user mengaktifkan object lain. Event ini bisa digunakan salah satu contohnya adalah untuk memvalidasi nilai yang telah diinputkan pada control tersebut.
    • Misalnya control ComboBox bernama PIC yang sedang aktif. Ketika user mengaktifkan control lain, maka event LostFocus milik combobox PIC akan beraksi dan dijalankan. Pada event ini bisa diisi dengan pemeriksaan bahwa combobox PIC telah diisi dengan salah satu item yang ada dalam daftar yang disediakan. Jika tidak ada, maka proses bisa mengembalikan control yang aktif ke combobox PIC.
  3. KeyDown
    • Bereaksi ketika si control sedang aktif dan user menekan sebuah tombol keyboard. Event ini menyediakan informasi kode tombol keyboard yang ditekan oleh user dalam variabel bernama KeyCode. Informasi tentang tertekannya tombol shift atau tidak disediakan dalam variabel bernama Shift. Event ini bisa digunakan untuk membatasi tombol keyboard yang bisa mempengaruhi si control.
    • Misalnya sebuah textbox bernama NIP yang harus berisi angka saja bisa diatur agar tombol keyboard yang membuat si textbox berubah nilainya adalah tombol-tombol angka saja. Contoh lainnya adalah sebuah CommandButton bisa diatur agar proses penekanan (klik) bisa dengan menekan tombol keyboard huruf 'p' ketika si control dalam keadaan sedang aktif.
  4. MouseMove
    • Bereaksi ketika pointer mouse melintasi si control. Event ini biasanya digunakan untuk menampilkan informasi tentang si control. Salah satu media penulisan informasi yang disediakan adalah properti bernama ControlTipText. Properti ini hanya ada ketika control digunakan dalam sebuah userform. Ketika control diletakkan dalam sebuah sheet, maka control seperti Label bisa dijadikan media penampil informasi tentang si control.
Setiap ActiveX Controls juga memiliki events yang khusus untuk menunjang kerjanya. Beberapa events penunjang tersebut ada yang dapat digunakan dalam UserForm saja. Jadi, dalam penggunaan ActiveX Control perlu diketahui lokasi penggunaannya beserta events yang bisa digunakan dilokasi tersebut. Cara yang mudah adalah dengan melihat ComboBox event dan prosedur dalam VBE saat ComboBox object berisi control tersebut [silakan baca BelajarVBA 001 - VBE (Visual Basic Editor)]

Tombol pemanggil prosedur VBA

Beberapa kegiatan otomasi dengan VBA membutuhkan interaksi dengan user untuk menjalankan prosedur-prosedur otomasi yang telah dibuat. Sebuah tombol yang dapat ditekan oleh user akan memudahkan user dalam menjalankan suatu prosedur otomasi. Tombol bisa berupa Shape, Form Control, atau ActiveX Control.

Cara menambahkan suatu object yang akan berfungsi sebagai tombol dalam sebuah worksheet adalah sebagai berikut :
  • Menggunakan shape
    ribbon Insert -> group Illustrations -> Shapes -> pilih sebuah shape -> gambar kotak dalam worksheet
  • Menggunakan Form Control
    ribbon Developer -> group Controls -> Insert -> lihat bagian Form Controls (sisi atas) -> pilih Button -> gambar kotak dalam worksheet
  • Menggunakan ActiveX Control
    ribbon Developer -> group Controls -> Insert -> lihat bagian Form Controls (sisi atas) -> pilih Button -> gambar kotak dalam worksheet

Cara mengganti nama tombol antara lain dengan :
  • Menggunakan shape
    klik kanan shape dalam worksheet -> klik Name Box (pojok kiri atas worksheet [diatas nomor baris Excel 1]) -> ganti teks yang ada (misal menjadi shpPesan) -> tekan ENTER
  • Menggunakan Form Control
    klik kanan Button dalam worksheet -> klik Name Box (pojok kiri atas worksheet [diatas nomor baris Excel 1]) -> ganti teks yang ada (misal menjadi ctlBPesan) -> tekan ENTER
  • Menggunakan ActiveX Control
    • Aktifkan Design Mode
    • Ganti nama control
      klik kanan Command Button dalam worksheet -> klik Name Box (pojok kiri atas worksheet [diatas nomor baris Excel 1]) -> ganti teks yang ada (misal menjadi cmdPesan) -> tekan ENTER
    • Non aktifkan Design Mode

Pengaturan nama prosedur yang akan dijalankan oleh si tombol selalu diawali dengan adanya prosedur yang akan dijalankan. Misalkan pada sebuah general module telah dibuat sebuah prosedur bernama PesanShapeNFormControl yang berupa :
   Public Sub PesanShapeNFormControl()
       MsgBox "Hello " & Environ("USERNAME")
   End Sub

Kemudian diinginkan untuk dijalankan dengan object berupa sebuah shape atau sebuah form control Button.

Cara mengatur tombol berupa shape atau form control Button yang telah ada dalam worksheet, sehingga bisa menjalankan prosedur diatas ketika ditekan, adalah sebagai berikut :
  • Menggunakan shape
    • klik kanan shape dalam worksheet -> pilih Assign Macro

    • pilih nama prosedur PesanShapeNFormControl -> OK

  • Menggunakan Form Control
      seperti menggunakan shape, tetapi yang diklik kanan adalah Button
    • klik kanan Button dalam worksheet -> pilih Assign Macro
    • pilih nama prosedur PesanShapeNFormControl -> OK
Pada penggunaan ActiveX Control, proses pengaturan CommandButton untuk dapat menjalankan sebuah prosedur harus melalui event yang dimiliki si control CommandButton tersebut. Misalkan sebuah CommandButton bernama cmdPesan dijadikan sebuah tombol yang akan menjalankan prosedur lain bernama PesanActiveXControl.

Prosedur PesanActiveXControl berupa blok prosedur sebagai berikut :
   Public Sub PesanActiveXControl()
       MsgBox "Welcome, " & Environ("USERNAME")
   End Sub


Cara mengatur Command Button tersebut adalah sebagai berikut :
  • Aktifkan Design Mode

  • Bentuk prosedur event click (ketika tombol di-click maka akan diproses)
    double click Command Button dalam worksheet -> muncul blok event Click milik tombol tersebut (gambar bawah sisi kiri) -> isi dengan nama prosedur PesanActiveXControl

  • Non aktifkan Design Mode

Catatan

  • Form Controls adalah bawaan Excel, sehingga cenderung dapat digunakan disemua komputer yang memiliki Excel dan tidak memerlukan pengaturan Excel Security.
  • ActiveX Controls tergantung pada file library, sehingga controls tersebut dapat berfungsi dengan baik jika komputer setempat (yang membuka workbook) juga memiliki file library yang berisi si control.
  • ActiveX Controls termasuk object yang diawasi oleh Excel Security, sehingga membutuhkan pengaturan Excel Security agar dapat berfungsi.
  • ActiveX Controls mudah ditata dengan baris-baris VBA dan memiliki banyak events.

:)

Insya Allah pembahasan berikutnya adalah tentang beberapa Form Control dan ActiveX Control yang sering digunakan seperti ComboBox, ListBox, dan sebagainya. Pembahasan masih tentang penggunaan controls dalam worksheet.



10 komentar:

  1. Makasih banyak atas Ilmunya.....

    BalasHapus
  2. bagimana caranya scroll dengan cell yang isinya adalah jam ?

    BalasHapus
  3. Menarik pembahasannya, sangat berguna bagi orang lain. Hal ini pun dapat menjadi inspirasi ide bagi saya dalam membahas tentang Excel di blog saya. Kebetulan saya ada pembahasan juga mengenai microsoft Excel di blog saya, silahkan berkunjung untuk melihatnya

    BalasHapus
  4. mas kalau spin buttonnya tdk jl bagaimana yah?


    BalasHapus
    Balasan
    1. Maaf, saya kurang paham dengan kata 'tdk jl'.
      Silakan postong ke milis Belajar-Excel di belajar-excel@yahoogroups.com
      Bila belum menjadi member, silakan mendaftar lebih dulu. Berikut adalah website milis Belajar-Excel :
      https://groups.yahoo.com/neo/groups/belajar-excel/info

      Hapus
  5. terima kasih ilmunya, saya jadi pengen tanya nih mas, kalau boleh tau option button yang ada di dalam user form itu bisa di buat untuk menentukan worksheet yang akan ditempati tidak ya

    BalasHapus
    Balasan
    1. Hai Abhimanyu,

      Apakah maksudnya adalah memilih sebuah option button dari beberapa option button yang disediakan dalam userform akan membuat sebuah worksheet menjadi aktif ?

      Jika hal tersebut yang dimaksud, maka jawabnya bisa, yaitu dengan memanfaatkan event change milik option buton tersebut.

      Misal ada 3 option button bernama opt1, opt2, dan opt3 yang telah di-set properti GroupName dengan nama grup yang sama. Misalnya groupname-nya adalah 'Aktifkan'.

      Kemudian membuat blok prosedur event change dari masing-masing option button. Lalu diisi baris kode :
      (misal di event change option button bernama opt1)
      if opt1.value then
      sheets("nama sheet yang diaktifkan opt1").activate
      endif

      Sesuaikan nama option button dan nama sheet yang akan diaktifkan di setiap event change agar sesuai dengan option button terkait.

      Regards,
      Kid

      Hapus
  6. terima kasih atas inspirasinya...
    mas mau tanya, bagaimana jika "option button" lebih dari 2 pilihan.
    misalnya pilihan 1 memilih jenis kelamin (L / P), kemudian pilihan kedua memilih tingkat pendidikan (SD/SMP/SMU/S1 dst).
    saya sudah mencoba, tapi pada saat saya memilih pendidikan, pilihan jenis kelamin akan hilang.
    terima kasih sebelumnya

    BalasHapus
  7. Mantab terima kasih banyak ilmunya

    BalasHapus