BelajarVBA 007 - Property, Methods, Events

Coretan Mr. Kid

Ilmu yang bermanfaat menjadi amal kebaikan yang tak pernah putus, sedangkan ilmu yang tidak bermanfaat bisa menjadi sumber petaka di hari kiamat nanti.

Pada pembahasan sebelumnya telah disinggung tentang member dari sebuah object yang merupakan elemen penyusun dari object tersebut. Setiap object memiliki member yang dapat dikelompokkan minimal salah satu dari kelompok Property, Methods, atau Events. Ada object yang memiliki begitu banyak member. Excel VBA Help telah menyediakan informasi lengkap dari seluruh member dari seluruh object yang ada didalamnya. Help ini bisa diperoleh secara online maupun di-install agar bisa digunakan secara offline. Alangkah baiknya untuk terbiasa melihat Help ketika bingung akan menggunakan member apa untuk aplikasi yang sedang dibangun. Caranya adalah dengan menakan tombol F1 dari VBE dan melakukan search tentang object member. Misal akan mencari member yang dimiliki object worksheet, maka pada Help dicari dengan key berbunyi Worksheet Object Member.



Property suatu object

Property adalah member suatu object yang berupa elemen-elemen penyusun karakteristik object. Misalkan ada sebuah object mobil, maka warna mobil, harga beli, nilai aset si mobil, set multimedia yang ada didalamnya, kursi mobil, dan segala hal yang mencerminkan si mobil adalah properti dari mobil tersebut. Pada sebuah object range, maka nilai dalam cell, font, interior, border, formula, dan sebagainya yang ada dalam range adalah beberapa contoh properti dari object range.

Beberapa class menyediakan default property dari object yang dibentuk oleh class tersebut. Contohnya adalah property Value yang menjadi default property dari object range. Keberadaan default property ini akan memungkinkan penggunaan object tanpa menyebut nama property-nya. Meskipun demikian, sebaiknya tetaplah disebut nama property-nya walaupun sebuah default property. Contohnya adalah untuk mendapatkan property Value dari sebuah range bisa ditulis dengan :
     Range("alamatnya")
yang akan menghasilkan nilai yang tersimpan dalam property Value, karena property Value adalah default property dari object range. Meskipun demikian, tetaplah lebih baik untuk ditulis disertai nama property-nya sebagai berikut :
     Range("alamatnya").Value

Menggunakan property suatu object berarti akan menjalankan prosedur jenis Property milik class dari object tersebut. Misalkan akan mengambil nilai property Value dari sebuah object range, berarti menjalankan prosedur jenis Property Get milik si object range yang bernama Value. Ketika akan mengubah nilai property Value dari suatu object range, berarti menjalankan prosedur jenis Property Let milik si object range yang bernama Value.

Methods suatu object

Methods adalah member suatu object yang berupa runtime untuk melakukan proses tertentu. Misalkan ada sebuah object mobil, maka menambah kecepatan, mengurangi kecepatan, membersihkan kaca depan, membuka atau menutup jendela samping, membuka atau menutup pintu, mengeluarkan suara klakson adalah beberapa contoh methods yang dimiliki. Semua contoh tersebut berkaitan dengan kemampuan si object mobil untuk melakukan sesuatu. Proses copy, pastespecial, clear, clearcontents, merge, unmerge, dan sebagainya adalah beberapa contoh dari methods yang dimiliki oleh sebuah object range.

Methods selalu berupa prosedur jenis Sub atau Function. Methods yang menggunakan prosedur jenis Function akan memberikan nilai balik hasil proses yang menjadi karakteristik sebuah prosedur function seperti yang telah dibahas pada bahasan lalu tentang prosedur. Sebagian besar methods suatu object adalah berupa prosedur jenis Function. Contohnya adalah ketika ingin meng-Copy suatu range ke clipboard menggunakan methods bernama Copy milik si object range, maka prosedur Function yang ada di class Range milik si object range akan dijalankan. Prosedur jenis Function bernama Copy ini akan memberikan nilai balik berupa suatu data ber-datatype Variant. Contoh methods dengan prosedur jenis Sub adalah Merge. Ketika menggunakan methods bernama Merge dari suatu object range, berarti akan menjalankan prosedur jenis Sub bernama Merge yang ada dalam class milik si object range.

Dengan mengetahui jenis prosedurnya, akan diketahui keberadaan nilai balik dari prosesnya. Dengan diketahui datatype dari nilai balik prosesnya, maka akan dapat disusun kode program yang lebih sesuai dan bermanfaat. Contohnya adalah penggunaan methods Find. Dengan mengetahui bahwa jenis prosedurnya adalah Function dengan nilai balik ber-datatype Range, maka bisa disusun suatu rangkaian baris program yang tidak akan terjebak pada error atau tidak membutuhkan error trap dengan clausa On Error. Nilai balik methods Find berupa object range bila prosesnya menemukan sesuatu dan akan tetap NULL atau Nothing jika prosesnya tidak menemukan sesuatu. Dengan begitu, maka dapat disusun baris-baris kode tanpa kuatir akan muncul error sebagai berikut :
     Dim rngHasilFind As Range
     Set rngHasilFind = Range("D2:D34").Find("Kid")
     IF rngHasilFind Is Nothing Then
        MsgBox "Tidak ditemukan"
     Else
        MsgBox "Ditemukan di " & rngHasilFind.Address
     End IF


Events suatu object

Events adalah member suatu object yang merespon perlakuan user terhadap wujub si object. Member object yang berupa Events dapat ditemukan pada combobox Prosedur di code window setelah combobox object telah dipilih sebuah object tertentu. Umumnya events akan ada dalam object module seperti ThisWorkbook, object sheet atau chart atau UserForm. Selain itu, events juga sering ditemui pada setiap object ActiveX Control. Events selalu berupa prosedur jenis Sub. Prosedur jenis sub tentang si events akan dibuatkan langsung oleh VBE jika ada dalam combobox prosedur di code window tersebut.

Secara umum, events dapat digambarkan layaknya sebuah object pedal rem sebuah mobil. Pedal rem tersebut akan merespon perlakuan user, dalam hal ini adalah pengendara mobil, yang berupa events penekanan rem dan events pelepasan rem. Saat user melakukan penekanan rem, maka sistem yang berisi seluruh proses pengereman akan bekerja. Akan tetapi, pada saat terjadi penekanan rem tersebut, Anda bisa membuatkan sebuah rangkaian proses baru tepat sesaat sebelum seluruh proses dalam sistem pengereman bekerja. Misalnya saja (misal loh ya), Anda membuat proses untuk menyalakan lampu hazard beserta membunyikan klakson.

Events dalam object Worksheet

Object worksheet yang memiliki events seperti Change, Activate, dan sebagainya. Ketika user mengubah nilai suatu cell, maka sebenarnya events Change milik si worksheet dijalankan. Jika Anda menambahkan suatu proses tertentu pada events tersebut, maka proses tersebut akan dijalankan. Cobalah langkah-langkah berikut ini :
  • Buat sebuah workbook baru dan segera menuju ke VBE (menekan ALT F11)
  • Cari Sheet1 (Sheet1) dalam Project Explorer dan lakukan double click padanya
  • Lihat area code window dikanannya
  • Pada combobox object (sisi kiri atas code window) pilih Worksheet
  • Pada combobox prosedur (sisi kanan atas code window) pilih Change
  • Akan terbentuk blok prosedur jenis Sub milik events change seperti berikut :
     Private Sub Worksheet_Change(ByVal Target As Range)

     End Sub

  • Isi baris kosong dalam blok prosedur Sub tersebut dengan baris-baris kode proses yang diinginkan, misalnya menjadi seperti prosedur events berikut :
     Private Sub Worksheet_Change(ByVal Target As Range)
       Target.Interior.ColorIndex = 5  'cell berlatar biru
       Target.Font.ColorIndex = 2      'teks berwarna putih
       Target.Font.Size = 16           'ukuran teks jadi 16
       Target.Font.Bold = True         'teks di-bold
       Target.EntireColumn.AutoFit     'penyesuaian lebar kolom sesuai isi
       Target.EntireRow.AutoFit        'penyesuaian tinggi baris sesuai isi
     End Sub

  • Kembali ke workbook window (tekan ALT F11)
  • Aktifkan sheet bernama Sheet1
  • Ubah isi dari sembarang cell
Pada contoh di atas :
  1. setiap kali isi cell berubah (change) maka prosedur jenis sub milik events Change si worksheet akan dijalankan. Didalamnya ada rangkaian proses yang diinginkan user, yaitu mulai dari mengubah warna latar cell sampai mengatur tinggi barisnya.
  2. Target adalah variabel dengan datatype object range (berisi minimal sebuah cell) yang berubah nilainya selain akibat kalkulasi ulang.
  3. Variabel target dikenai proses dari setiap baris kode dalam prosedur sub si events change.

Events milik worksheet yang sering digunakan dan kondisi yang membuatnya dijalankan :
  • Change : saat ada cell yang berubah isinya
  • Activate : saat worksheet berubah status dari tidak aktif menjadi sheet aktif
  • Deactivate : saat worksheet berubah status dari sheet aktif menjadi tidak aktif
  • BeforeRightClick : saat user menekan tombol kanan mouse
  • BeforeDoubleClick : saat user melakukan double click pada sebuah cell
  • Calculate : saat akan terjadi proses kalkulasi ulang terhadap sheet


Events dalam object Workbook

Excel memiliki object utama seperti Worksheet dan Workbook. Object Workbook juga memiliki events. Worksheet adalah member (anggota) dari workbook. Events workbook akan dikerjakan setelah events worksheet selesai diproses. Pada contoh di atas sudah ada sebuah events milik worksheet yang bernama Change dan sudah berisi baris-baris kode proses yang diinginkan user. Sekarang, coba lakukan langkah berikut ini :
  • Buat beberapa sheet baru di workbook window.
  • Kembali ke VBE (menekan ALT F11)
  • Pada Project Explorer, aktifkan code window milik ThisWorkbook (double click ThisWorkbook)
  • Pada combobox object dipilih Workbook dan pada combobox prosedur dipilih SheetChange
  • Akan muncul blok prosedur berbunyi :
     Private Sub Workbook_SheetChange(ByVal Sh As Object, _
                                      ByVal Target As Range)

     End Sub

  • Isi baris kosong dalam blok prosedur tersebut dengan proses yang diinginkan. Misalnya seperti prosedur Sub events SheetChange berikut :
     Private Sub Workbook_SheetChange(ByVal Sh As Object, _
                                      ByVal Target As Range)
         Target.Interior.ColorIndex = 3      'cell berlatar merah
     End Sub

  • Kembali ke workbook window (tekan ALT F11)
  • Ubah isi sembarang cell di Sheet1
  • Ubah isi sembarang cell di sheet lainnya (selain Sheet1)

Proses yang terjadi pada contoh diatas :
  1. Ketika sebuah cell dalam Sheet1 berubah isinya, events Change milik Sheet1 akan dijalankan, sehingga warna latar akan menjadi biru, warna teks menjadi putih, dan seterusnya seperti contoh sebelumnya.
  2. Setelah events Change milik Sheet1 selesai dikerjakan, maka events SheetChange milik ThisWorkbook dikerjakan.
  3. Proses dalam events SheetChange milik ThisWorkbook adalah mengubah warna latar cell yang berubah isinya menjadi berwarna merah.
  4. Cell yang berubah isinya akan memiliki warna latar merah sesuai proses events SheetChange milik ThisWorkbook dan warna teks mengikuti hasil events Change milik worksheet karena events SheetChange milik ThisWorkbook diproses setelah events Change milik si Worksheet.
  5. Ketika sebuah cell pada sheet lainnya (selain Sheet1) berubah isinya :
  6. events Change milik sheet tersebut dijalankan. Karena tidak ada proses buatan user melalui events Change pada sheet tersebut, maka proses events change dianggap sudah selesai.
  7. Proses berlanjut dengan menjalankan events SheetChange milik ThisWorkbook.
  8. Prosesnya adalah mengubah warna latar cell yang berubah isinya menjadi berwarna merah.
  9. Cell yang berubah isinya akan memiliki warna latar merah sesuai proses events SheetChange milik ThisWorkbook dan warna teks tidak berubah karena tidak ada events Change milik worksheet tersebut.
  10. Variabel Target berisi range yang berubah isinya.
  11. Variabel Sh yang ber-datatype object akan berisi object worksheet dari cell yang berubah isinya.

Events workbook yang sering digunakan beserta kondisi yang membuatnya dijalankan :
  • Open : saat workbook dibuka pertama kali dan setting Macro dalam keadaan Enable
  • Activate : saat workbook berubah status dari keadaan tidak aktif menjadi workbook aktif
  • Deactivate : saat workbook berubah status dari keadaan sebagai workbook aktif menjadi tidak aktif
  • BeforeClose : saat workbook akan ditutup
  • NewSheet : saat user membuat sheet baru
  • BeforeSave : saat user akan melakukan proses Save
  • BeforePrint : saat user akan melakukan proses Print
ditambah dengan events yang biasa digunakan pada worksheet seperti SheetChange, SheetActivate, SheetDeacvtivate, SheetBeforeRightClick, SheetBeforeDoubleClick, SheetClaculate yang akan dijalankan jika menemui kondisi yang sudah dijelaskan dalam Events Worksheet.

Events dalam object Application

Aplikasi Excel juga memiliki beberapa events. Secara umum, seluruh events milik workbook juga menjadi events milik application dengan adanya penambahan input parameter berupa variabel bernama wb yang ber-datatype object workbook yang ditransfer dengan klausa ByVal. Misalnya, events bernama WorkbookActivate milik object Application akan dijalankan ketika sebuah workbook berubah status menjadi workbook aktif. Hal ini mirip dengan events Activate milik Workbook. Perbedaannya adalah events WorkbookActivate bekerja pada object dengan hirarki yang lebih tinggi daripada workbook, sehingga membutuhkan input parameter dengan deklarasi yang umumnya berbunyi :
     ByVal wb As Workbook
yang berarti workbook manapun yang sedang terbuka yang mengalami perubahan status menjadi workbook aktif akan membuat events bernama WorkbookActivate dijalankan.

Events milik Application tidak bisa serta merta digunakan seperti halnya events milik Workbook. Hal ini dikarenakan events milik Application tidak didefinisikan secara langsung saat aplikasi Excel dibuka. Dibutuhkan sebuah baris deklarasi yang menjelaskan bahwa events milik object Application tersebut boleh digunakan dan sebuah baris inisialisasi object ber-events tersebut. Secara sederhana, baris deklarasi ini diletakkan pada object module ThisWorkbook. Tentu saja baris deklarasi inipun bisa dibentuk dalam sebuah class module.
Bunyi deklarasinya adalah dengan memanfaatkan klausa WithEvents sebagai berikut :
     Private WithEvents nama_variabel_object As Application
contohnya adalah :
     Private WithEvents app As Application
dimana variabel bernama app yang ber-datatype Application akan disertai ijin penggunaan events yang dimiliki oleh Application.

Agar variabel ini dapat digunakan, maka dibutuhkan sebuah baris inisialisasi object yang akan disimpan oleh si variabel app tadi. Pada umumnya, proses inisialisasi ini diletakkan pada events saat workbook pertama kali dibuka yang bernama Open milik object Workbook. Dengan demikian, maka variabel app akan segera terinisialisasi dan segera dapat aktif bekerja.

Beberapa events milik Application yang sering digunakan beserta kondisi yang membuatnya dijalankan adalah :
  • AfterCalculate : saat aplikasi selesai melakukan proses kalkulasi
  • WorkbookOpen : saat ada workbook yang baru saja dibuka
  • NewWorkbook : saat terbentuk sebuah workbook baru
Contoh sederhananya adalah seperti langkah-langkah berikut :
  • Pada object module ThisWorkbook diberi baris deklarasi berikut ini : (letakkan pada area General Declaration)
     Private WithEvents app As Application
  • Buat blok events Open milik Workbook dengan cara memilih Workbook pada combobox Object dan memilih Open pada combobox prosedur
  • Isi blok events Open dengan baris kode inisialisasi variabel app sebagai berikut :
     Set app = Application
  • Buat blok events milik Application bernama WorkbookOpen. Dalam hal ini, object application yang disertai events sudah diwakili oleh variabel object bernama App, sehingga pada combobox object dipilih app dan pada combobox prosedur dipilih WorkbookOpen
  • Isi blok events milik Application bernama WorkbookOpen tersebut dengan baris kode berikut :
     MsgBox "Workbook bernama " & wbk.name & " baru saja terbuka."
  • Simpan file dengan format Macro Enabled Workbook yang berekstensi .xlsm
  • Tutup workbook tersebut dan buka kembali
  • Untuk mencobanya, coba buka workbook apa saja melalui File Open
Prosedur-prosedur jenis sub yang berupa events object sheet sampai dengan application akan dijalankan mulai dari events milik object worksheet kemudian object milik workbook dan diakhiri dengan events milik application.

Prosedur sub bernama Auto_Open

Prosedur Auto_Open dijalankan ketika sebuah workbook dibuka secara manual atau melalui File Open. Prosedur Auto_Open adalah prosedur yang mirip dengan kerja events milik Workbook yang bernama Open. Prosedur ini adalah prosedur bawaan Excel 4.0 Macro. Jadi prosedur Auto_Open bukanlah sebuah events dari sebuah object. Prosedur Auto_Open dikerjakan setelah seluruh prosedur sub berupa events selesai dikerjakan. Prosedur Auto_Open harus diletakkan pada sebuah general module dan dideklarasikan dengan scope Public. Blok prosedur Auto_Open adalah sebagai berikut :
     Public Sub Auto_Open()
         'baris kode disini
     End Sub


:)

Sampai disini dulu saja pembahasan tentang dasar-dasar object beserta membernya. Untuk sesaat, kita akan meninggalkan object range beserta teman-temannya. Pembahasan selanjutnya akan membahas tentang beberapa hal yang menyangkut penyusunan alur proses atau penyusunan logika program dalam sebuah prosedur yang sangat sering dijumpai. Pembahasan awal akan dimulai dari pengkondisian yang lebih sering dikenal dengan IF, yang sebenarnya ada banyak sekali macamnya.




6 komentar:

  1. Makasih atas Ilmunya yg dibagi secara umum....
    Wslm,
    d_arief
    Mks

    BalasHapus
    Balasan
    1. Sama-sama Pak Arief. Semoga dikembangkan agar menjadi bermanfaat.

      Hapus
  2. Mr. Kid Sangat Luar Biasa

    BalasHapus
    Balasan
    1. Terimakasih. Disebarkan kepada yang lain ya, supaya manfaatnya tersebar luas.

      Hapus
  3. Ini sangat keren sekali, saya buat ratusan tips excel tapi mudengya malah disini

    BalasHapus
    Balasan
    1. Terimakasih...

      Semoga 'mudengnya' bisa memperbanyak tips yang Anda buat.

      Hapus