BelajarVBA 006 - Object dalam Excel

Coretan Mr. Kid

Tuhan akan menganugerahi orang yang menjadikan setiap kesempatan sebagai sarana untuk mengingat Tuhan dengan sesuatu yang lebih baik dari pada sesuatu yang diminta oleh orang yang berdoa.

Excel VBA adalah sebuah bahasa pemrograman yang berorientasi object. Seluruh perangkat pemrograman dibentuk sebagai suatu object. Pembahasan kali ini adalah tentang object, terutama object-object utama dalam Excel seperti Workbook, Worksheet, dan Range.

Sebelum memulai pembahasan ini, coba bayangkan jika ada orang lain yang tanpa sepatah kata pun langsung masuk ke rumah Anda dan makan makanan yang ada di meja makan di rumah Anda. Tentu akan segera terasa bahwa ada sesuatu yang salah disana, seperti tidak pada tempatnya bagi si orang itu untuk menggunakan apa yang Anda miliki tanpa bertemu dulu dengan Anda.

Pada dasarnya, konsep object didalam pemrograman adalah seperti hal di atas. Ada diri Anda dan diri orang lain. Sama-sama manusia, tetapi memiliki nilai dan potensi yang berbeda. Ada rumah Anda dan bisa jadi si orang lain pun memiliki rumah yang bentuk, ukuran, warna, dan segala macam nilai detilnya berbeda dengan rumah Anda. Ada meja makan milik Anda yang diatasnya terhidang banyak makanan. Anda, orang lain, rumah Anda, rumah orang lain, meja makan Anda, makanan di atas meja makan Anda adalah sesuatu yang berwujud yang memiliki suatu nilai tertentu. Sesuatu yang berwujud itulah yang disebut object.

Konsep object dalam dunia nyata tersebut ditransformasikan ke dalam dunia pemrograman yang dikenal dengan Object Oriented Programming (OOP). Semua kegiatan dalam program akan berbasis interaksi antar object yang ada di dunia pemrograman, layaknya interaksi object diri Anda berinteraksi dengan object orang lain atau object diri Anda berinteraksi dengan object rumah Anda, dan sebagainya.

Setiap object memiliki potensi dan nilai-nilai tertentu yang menjadi pembentuk ciri khas si object tersebut.


Object

Sebuah benda yang berisi kumpulan data yang mencerminkan sesuatu dan kemampuan melakukan sesuatu atau merespon perlakuan terhadapnya sebagai satu kesatuan. Contohnya adalah sebuah workbook, worksheet, range, dan sebagainya. Object seperti Worksheet memiliki kumpulan data seperti nama worksheet, statusnya tersembunyi atau tidak, memiliki range, dan sebagainya. Worksheet memiliki kemampuan untuk melakukan sesuatu seperti mengkalkulasi, diaktifkan, memproteksi diri atau melepaskan proteksi diri, meng-copy data, mem-paste data dengan kondisi tertentu, dan sebagainya. Worksheet juga bisa merespon perlakuan terhadapnya seperti ketika ada range yang menjadi bagian dirinya berubah nilainya, ketika akan memulai proses kalkulasi, atau ketika diaktifkan, dan sebagainya.

Setiap object selalu memiliki elemen-elemen penyusun yang disebut member. Penyusunnya bisa berupa nilai-nilai atribut tertentu, object-object lainnya, prosedur-prosedur untuk melakukan sesuatu atau untuk menerima respon perlakuan terhadapnya. Member-member object tersebut dapat dikelompokkan menjadi 3 hal, yaitu :
  • Property : suatu data yang menjadi ciri khusus dirinya
  • Methods : prosedur-prosedur untuk melakukan sesuatu
  • Events : respon perlakuan user terhadap dirinya
Setiap member bisa diketahui dengan mudah termasuk kelompok yang mana berdasarkan icon yang ditampilkan VBE sebelum nama membernya. Contohnya seperti dalam gambar berikut ini :
Setiap object minimal memiliki salah satu dari macam-macam member tersebut. Misalnya, sebuah worksheet memiliki :
  • Property seperti Name, Range, Cells, AutoFilter, dan sebagainya.
  • Methods seperti Copy, PasteSpecial, Activate, Calculate, Evaluate, Move, PrintOut, dan sebagainya.
  • Events seperti Change, SelectionChange, Calculate, Activate, BeforeRightClick, dan sebagainya.

Collection

Wadah yang menampung minimal satu object yang sama. Contohnya adalah Worksheets yang menampung seluruh worksheet yang ada dalam sebuah workbook. Dengan demikian, sebuah collection juga object. Salah satu isi collection bisa dipilih untuk digunakan. Seperti memilih worksheet bernama 'Laporan' dari Worksheets, dimana Worksheets adalah sebuah Collection.


Beberapa object utama Excel

Excel memiliki beberapa object utama yang selalu ditemui, seperti :

Application

  • Berupa instansi aplikasi Excel.

Workbook dan Workbooks

  • Workbook adalah object yang lebih dikenal berisi minimal sebuah sheet.

  • Workbooks adalah kumpulan (collection) dari beberapa workbook. Keberadaan Workbooks dapat diketahui lebih jelas ketika membuka workbook lain dari workbook yang sedang aktif atau melalui menu File Open dalam workbook window. Pada VBA Project Explorer akan tampak beberapa VBProject milik workbook yang berbeda-beda.

Worksheet dan Chart

  • Worksheet adalah object yang lebih dikenal berisi range. Kumpulan worksheet adalah object collection bernama Worksheets.
  • Chart adalah object yang lebih dikenal berisi grafik. Kumpulan chart adalah object collection bernama Charts.
  • Kumpulan object yang berisi Worksheet atau Chart adalah object collection bernama Sheets.

Range

Object yang mewadahi cells dalam worksheet yang akan atau sedang digunakan. Worksheet berisi cells yang membentuk suatu datagrid. Setiap cell akan menjadi wadah nilai data. Cell memiliki posisi baris dan kolom relatif terhadap object yang berisi datagrid.

Gambar berikut ini adalah hal-hal dasar tentang cell.
  • Sebuah kotak datagrid disebut cell.
  • Lokasi kursor disebut ActiveCell dan pasti ada dalam satu buah cell.
  • Cells yang memiliki posisi baris yang sama dengan posisi kolom yang berbeda-beda disebut Rows.
  • Cells yang memiliki posisi baris yang berbeda-beda dengan posisi kolom yang sama disebut Columns.
Contoh untuk menjelaskan tentang makna cell adalah sebagai berikut :
  • Cell pertama dalam worksheet adalah cell di baris 1 dan kolom 1 dari worksheet. Alamatnya adalah A1.
  • Cell ketiga dalam worksheet adalah cell di baris 1 dan kolom 3 dari worksheet. Alamatnya adalah C1.
  • Cell di baris 2 dan kolom 5 dalam worksheet adalah pada alamat E2.
  • Ketika disebut ada suatu range C7:H8, maka cells yang akan digunakan (ada dalam range tersebut) adalah mulai dari cell worksheet di posisi baris 7 dan kolom 2 hingga baris 8 dan kolom 7.
  • Cell pertama pada range C7:H8 adalah cell pada baris 1 dan kolom 1 dalam range tersebut yang memiliki alamat referensi bernama C7.
  • Cell ketiga pada range C7:H8 adalah cell pada baris 1 dan kolom 3 dalam range tersebut yang memiliki alamat referensi bernama E7.
  • Cell di baris 2 dan kolom 5 dalam range C7:H8 adalah pada alamat referensi bernama G8.
  • ActiveCell ada di I4 meskipun sedang berkerja pada range C7:H8
Dari uraian diatas, secara umum bisa dikatakan bahwa range berisi cells beserta seluruh potensinya. Sedangkan cells adalah posisi suatu datagrid relatif terhadap object. Cells selalu menghasilkan range.


Cara menggunakan object

Object memiliki hirarki dari terluar sampai terdalam sesuai daftar member dan peta object tersebut. Setiap property atau methods dari object yang akan digunakan selalu diawali dengan menyebut nama object terluar yang berbeda sampai yang terdalam hingga tiba ke property atau methods yang akan digunakan. Penyebutan object tersebut dipisahkan dengan karakter titik. Secara umum syntax-nya adalah :
     object_terluar_yang_berbeda.object_member_1.dst.property_atau_methods

Misalnya untuk object range dalam Excel, ketika workbook dalam keadaan terbuka, bisa digunakan dengan syntax lengkap sebagai berikut :
Workbooks("nama workbooknya").Worksheets("nama worksheetnya").Range("alamat rangenya").property_atau_methods_nya

Contoh 1 : Menggunakan Workbook lain

Misalkan ada dua buah workbook yang terbuka, yaitu bernama Keuangan.xls dan Laporan.xls yang masing-masing berisi banyak worksheet. Ketika bekerja pada workbook Laporan.xls bisa menggunakan nilai yang ada dalam workbook Keuangan.xls pada sheet bernama Dataku di range dengan alamat B3 sampai G9. Proses ingin meng-copy nilai dalam range tersebut ke clipboard.

Proses ini jika dikerjakan manual oleh manusia adalah dengan urutan proses :
  • Ke workbook Keuangan.xls
  • Ke sheet bernama Dataku
  • Blok range B3 sampai G9
  • Klik kanan range yang telah di-blok dan pilih Copy
Penggunaan object-nya adalah sebagai berikut :
   Workbooks("Keuangan.xls").Worksheets("Dataku").Range("B3:G9").Copy

Artinya, dari workbook Laporan.xls, hubungi workbook bernama Keuangan.xls yang sedang terbuka. Kemudian ke worksheet bernama Dataku yang ada di workbook Keuangan.xls yang telah dihubungi tersebut. Di worksheet bernama Dataku tersebut, lakukan pemilihan cells agar didapat range mulai dari B3 sampai G9. Range yang dituju tersebut di-Copy ke clipboard.

Jadi, Copy adalah methods yang akan digunakan. Seluruh bunyi yang didepan kata Copy adalah cara memanggil object-nya. Object terluar yang berbeda dengan object yang sedang aktif bekerja adalah Workbooks("Keuangan.xls"). Hal ini disebabkan karena workbook lokasi kerja ada di workbook bernama Laporan.xls

Pada proses di atas, tidak ada proses pengaktifan object. Artinya, kita hanya memberi perintah tanpa harus beranjak ke tempat lain. Jadi kita tetap berada di activecell saat proses akan dimulai. Komputerlah yang sibuk berjalan kesana kemari menjalankan setiap proses yang kita perintahkan.

Contoh 2 : Menggunakan Worksheet yang berbeda dalam sebuah workbook

Contoh lainnya adalah pada workbook Laporan.xls yang memiliki tiga sheet, yaitu bernama Tampungan, Hasil, dan LembarKerja. Saat ini, sheet bernama LembarKerja sedang aktif. Jadi kursor atau activecell (lihat lagi tentang activecell pada pembahasan di atas) sedang berada di sheet LembarKerja.

Akan dilakukan proses Copy dari sheet bernama Tampungan pada range A2:J17 dan akan di-Paste Values ke sheet bernama Hasil pada range Z7. Proses Copy Paste ini akan memiliki proses secara manual atau yang bila dikerjakan manual oleh manusia adalah dengan urutan proses sebagai berikut :
  • Ke sheet bernama Tampungan
  • Blok range A2:J17
  • Klik kanan yang telah diblok dan pilih Copy
  • Ke sheet bernama Hasil
  • Blok range Z7
  • Klik kanan range Z7 yang telah diblok dan Pilih PasteSpecial
  • Kemudian pilih Values dan tekan tombol OK
Penggunaan object-nya adalah sebagai berikut :
   Worksheets("Tampungan").Range("A2:J17").Copy
   Worksheets("Hasil").Range("Z7").PasteSpecial xlPasteValues

Artinya, pada workbook yang sama, yaitu Laporan.xls (karena tidak ada proses pemanggilan object workbook), ke sheet Tampungan untuk memilih range A2:J17 yang dilanjutkan dengan meng-Copy ke clipboard. Kemudian ke sheet Hasil untuk memilih range Z7 yang dilanjutkan dengan melakukan PasteSpecial. Opsi yang dipilih dalam PasteSpecial adalah opsi xlPasteValues yang berarti mem-paste values-nya saja.

Object terluar yang berbeda dalam contoh ini adalah worksheet, yaitu harus ke worksheet Tumpangan sedangkan kita tetap berada di worksheet LembarKeja dan harus ke worksheet Hasil sedangkan kita masih saja tetap di worksheet LembarKerja.

Contoh 3 : Sheet aktif dan worksheet lain dalm workbook yang sama

Contoh lainnya lagi adalah ketika kita berada di sheet LembarKerja berikut ini. Proses akan meng-Copy nilai di range B3 yang ada di sheet Hasil ke sheet LembarKerja (tempat kita berada alias yang sedang aktif) di range C7.

Proses ini jika dilakukan oleh manusia bisa dengan alur proses berikut ini :
  • Ke sheet Hasil
  • Blok range B3
  • Klik kanan range B3 yang telah diblok lalu pilih Copy
  • [Ke sheet LembarKerja (tempat kita berada)]
  • Blok range C7
  • Klik kanan range C7 yang telah diblok dan pilih PasteSpecial
  • Kemudian pilih Values dan tekan tombol OK
Penggunaan object-nya adalah sebagai berikut :
   Worksheets("Hasil").Range("B3").Copy
   Range("C7").PasteSpecial xlPasteValues

Artinya, pada workbook yang sama dan saya tetap di sheet LembarKerja, ke sheet Hasil untuk memilih range B3 dan melakukan proses Copy ke clipboard. Kemudian kembali ke tempat saya yang dilanjutkan dengan memilih range C7 disertai proses PasteSpecial dengan opsi paste values-nya saja.

Pada contoh ini, saat ada di sheet LembarKerja dan membutuhkan sesuatu yang milik sheet Hasil, maka disertakan penyebutan nama object terluar yang berbeda, yaitu sheet bernama Hasil. Ketika akan melakukan paste ke range yang ada dalam sheet LembarKerja, tidak diperlukan lagi pemanggilan nama sheetnya sebagai object terluar yang berbeda. Hal ini disebabkan karena saat akan memproses terhadap sheet LembarKerja yang saat ini sedang aktif atau tempat kita berada, object terluar yang berbeda adalah range-nya. Oleh sebab itu range-nya disebut agar bisa memanfaatkan methods yang dimiliki si range tersebut.

:)

Proses yang memanfaatkan banyak object beserta seluruh potensinya seperti yang dicontohkan di atas akan menjadi hal yang sangat utama dalam Excel VBA. Hal-hal lebih lanjut tentang kegiatan seperti contoh akan dibahas lebih lanjut pada topik lain. Pembahasan selanjutnya masih akan berkaitan dengan object, yaitu tentang pengenalan property, methods, dan events dari suatu object. Khusus untuk events, akan difokuskan pada pengenalan events milik object Excel seperti Worksheets, Workbook, dan Application secara berurutan.



11 komentar:

  1. Walaupun mahal, Pertamax diamanken ! (^_^)

    BalasHapus
  2. Mr. Kid,
    Motong gambarnyabisa rapi banget, pake "gunting" apa?

    BalasHapus
    Balasan
    1. Tombol keyboard ALT PrintScr lalu di Crop oleh aplikasi pengolah gambar seperti Picasa, xnView, dan sebagainya.

      Hapus
  3. Mr. Kid,
    Bgmn penulisan object shape, name dan
    chart yg ada pada ws?

    BalasHapus
    Balasan
    1. Object shape bisa diperoleh dengan bantuan shape collection bernama Shapes. Contoh :
      Worksheets("LembarKerja").Shapes("namanya").property_or_methods

      jika akan disimpan dalam variabel :
      Dim shp As Shape
      Set shp = Worksheets("LembarKerja").Shapes("namanya")

      Object chart bisa diperoleh dengan bantuan chart collection bernama ChartObjects. Item dalam chartobjects adalah object shape berupa chart. Untuk mendapatkan object chart-nya, gunakan property Chart milik shape. Contoh :
      Worksheets("LembarKerja").ChartObjects("namanya").Chart

      Jika disimpan dalam variabel :
      Dim cht As Chart
      Set cht = Worksheets("LembarKerja").ChartObjects("namanya").Chart

      Bagian Worksheets("LembarKerja").ChartObjects("namanya") menghasilkan object Shape.

      Untuk nama range.
      * Jika nama range memiliki scope Workbook (lihat di ribbon Formulas -> Name Manager), maka bisa digunakan langsung menyebut nama range sebagai alamat range. Contoh :
      Range("nama_range_berscope_workbook").property_or_methods

      * Jika nama range memiliki scope sebuah sheet tertentu, maka perlu menyebut pemiliknya terlebih dulu. Contoh :
      Worksheets("LembarKerja").Range("nama_scope_LembarKerja").Property_atau_Methods

      Hapus
    2. Sorry ada yang kurang tulis dibagian object chartobjects. Berikut lengkapnya :

      Object chart bisa diperoleh dengan bantuan chart collection bernama ChartObjects. Item dalam chartobjects adalah object shape berupa chartobject. Untuk mendapatkan object chart-nya, gunakan property Chart milik chartobject. Contoh :
      Worksheets("LembarKerja").ChartObjects("namanya").Chart

      Jika disimpan dalam variabel :
      Dim cht As Chart
      Set cht = _
      Worksheets("LembarKerja").ChartObjects("namanya").Chart

      Bagian Worksheets("LembarKerja").ChartObjects("namanya") menghasilkan object chartobject.

      Untuk mendapatkan shape dari chart :
      Dim shp as Shape
      Set shp = Worksheets("LembarKerja").Shapes("nama chart")

      Hapus
  4. Mantap.. ini singkat formulanya..
    Terima kasih Mr. Kid

    BalasHapus
  5. Mantap... isi blog ini luar biasa ,
    mr. Kid

    BalasHapus
  6. Mr. Kid
    Saya menulis prosedur macro dalam excel seperti di bawah ini :
    Private Sub Cmdsheet1_Click()
    Sheets("sheet1").Visible = -1
    Sheets("sheet2").Visible = -1
    Sheets("sheet3").Visible = -1
    Sheets("sheet4").Visible = -1
    Sheets("sheet1").Select

    End Sub
    prosedur itu dapat berjalan dengan baik, namun apabila diprotect workbook tidak jalan , mohon penjelasan dan solusi.

    terimakasih atas jawabannya

    BalasHapus
    Balasan
    1. Hai Nashori,

      Workbook yang di-protect strukturnya perlu di unprotect lebih dulu sebelum proses yang dilakukan oleh baris-baris kode Anda. Kemudian setelah baris-baris kode Anda, tambahkan juga proses mem-protect kembali workbook tersebut.


      thisworkbook.unprotect password
      dan
      thisworkbook.protect password

      Regards,
      Kid

      Hapus
  7. maap prosedur yang tidak jalan seperti di bawah ini :

    Private Sub Cmdsheet4_Click()
    Sheets("sheet4").Visible = -1
    Sheets("sheet4").Select
    Sheets("sheet1").Visible = 2
    Sheets("sheet2").Visible = 2
    Sheets("sheet3").Visible = 2
    End Sub

    BalasHapus