Pada bagian pertama seri panduan VBA Excel Dasar ini kita sudah belajar menulis beberapa baris kode VBA excel sederhana. Pada halaman tersebut dijelaskan bahwa diantara langkah-langkah untuk menyusun sebuah kode macro VBA adalah membuka VBE kemudian membuat sebuah modul baru.
Penjelasan lebih lanjut mengenai VBE atau Visual Basic Editor bisa anda pelajari pada bagian kedua seri Tutorial VBA Dasar ini, sedangkan pada bagian ketiga ini Anda akan kami ajak untuk mengenal lebih jauh tentang apa itu Module dan Procedure pada VBA Excel.
Saya kira pembahasan ini cukup penting dan masih jarang sekali ada yang membahasnya. Meskipun hanya sebatas gambaran umum, dengan panduan ini harapannya Anda yang masih mulai belajar VBA akan mendapatkan gambaran bagaimana dan dimana harus menuliskan script-script VBA secara benar.
Module Pada VBA Excel
Bagaimana pengertian module pada VBA Excel?
Dalam pengertian yang sederhana modul dapat diartikan sebagai tempat untuk menyimpan kode-kode VBA. Jika VBE merupakan sebuah rumah anda dapat membayangkan kamar-kamar atau ruangan pada rumah tersebut sebagai sebuah modul, dimana pada masing-masing kamar atau ruangan tersebut tersimpan berbagai macam barang lain dengan fungsi-fungsi tertentu.
Barang lain yang dimaksudkan dalam pembahasan VBA ini adalah Procedure VBA yang didalamnya termuat kode-kode program dengan fungsi dan tujuan tertentu.
Pada VBA Excel, setidaknya dikenal ada 4 macam tipe Module sebagai berikut:
- Standart Module
- Biasa disebut sebagai modul kode atau modul saja merupakan jenis modul umum yang dapat diisi dengan banyak prosedur serta fungsi-fungsi tertentu. Tipe modul inilah yang akan sering anda gunakan dalam menyusun kode-kode VBA.
- Workbook dan Sheet Module
Adalah modul khusus yang terikat langsung pada objek Workbook dan Sheet. Modul untuk workbook disebut ThisWorkbook, dan modul untuk setiap sheet atau Lembar kerja memiliki nama yang sama dengan nama sheetnya. Jenis modul ini sebenarnya mirip dengan Standart Module, hanya saja pada jenis ini dapat juga diisi dengan event procedures.
Event procedure ini semacam detonator atau pemicu aktifnya sebuah kode. Jika anda sudah pernah mengenal VBA saya kira anda sudah cukup faham bahwa untuk menjalankan sebuah kode butuh pemicu tertentu semisal klik pada sebuah tombol. Selain menggunakan tombol sebuah kode juga bisa berjalan dalam kondisi tertentu. Kondisi atau aktifitas yang terjadi pada object VBA inilah yang dimaksud dengan Event, misal kita ingin menjalankan beberapa baris kode saat file dibuka, saat sebuah sheet aktif dan lain sebagainya, maka event procedure inilah yang kita butuhkan. Lebih lanjut mengenai event procedure ini akan kita bahas lain waktu.
- User Forms
- Merupakan jenis modul yang merupakan bagian dari objek UserForm, dan berisi prosedur-prosedur VBA serta event procedure untuk kontrol-kontrol yang terkait dengan objek Form.
- Class Module
- Modul jenis ini digunakan untuk membuat sebuah objek baru pada VBA. Untuk saat ini anda tidak perlu terlalu memikirkan jenis modul ini.
Pada modul-modul inilah nantinya Anda akan menempatkan dan mengelompokkan prosedur-prosedur VBA sesuai kebutuhan.
Pada saat membuat sebuah file excel, kemudian membuka VBE maka excel secara otomatis sudah menyiapkan modul workbook dan modul sheet sejumlah sheet yang terdapat pada file tersebut. Defaultnya ada tiga modul sheet yang bisa anda kurangi atau anda tambahkan sesuai kebutuhan. Adapun untuk jenis modul yang lain anda harus menambahkannya secara manual melalui menu insert seperti yang sudah dijelaskan pada panduan sebelumnya.
Tipe Modul 2 dan 3 atau Modul Workbook, sheet dan User forms biasa juga disebut sebagai Object Module sebab modul-modul ini memiliki bentuk nyata berupa Workbook, WorkSheet, Userform, Chart, dan lain-lain. Umumnya kode-kode VBA yang terdapat pada modul ini hanya berlaku pada object terkait. Misal pada Modul Sheet1 maka kode-kode yang kita buat didalamnya hanya berlaku untuk Sheet1 saja dan tidak bisa dipanggil untuk Sheet2.
Adapun Standart Modul atau Modul Tipe 1 biasa disebut juga sebagai Code Module (Modul Kode) merupakan wadah untuk seluruh prosedur atau variabel yang bisa digunakan oleh module yang lainnya juga, selama prosedur atau variabel tersebut dideklarasikan sebagai Public.
Beberapa kali saya menyebutkan istilah procedure, sebenarnya barang macam apa sih ini?
Procedure Pada VBA Excel
Procedure adalah blok kode program yang berisi baris-baris perintah tertentu di antara baris statement pembuka prosedure dan statement penutup prosedure untuk mengerjakan tugas atau tindakan tertentu.
Dengan kata lain, pada VBA Excel jenis blok kode program yang berisi perintah untuk mengerjakan tugas tertentu disebut sebagai Procedure.
Apabila di dalam kode program atau project VBA yang kita buat ada perintah-perintah untuk melakukan tugas atau aktifitas yang sama di beberapa tempat, maka akan lebih baik perintah-perintah tersebut dibuat dalam sebuah procedure. Kemudian, procedure itu bisa di-panggil pada procedure lainnya saat diperlukan.
Penggunaan procedure sangat menghemat penulisan kode program, karena kode-kode program yang sama dibeberapa tempat cukup dibuat pada satu bagian saja. Selain itu, keberadaan procedure akan memudahkan perbaikan bila terjadi perubahan atau kesalahan, karena perbaikan cukup dilakukan pada satu bagian saja.
Struktur Procedure VBA Excel
Struktur deklarasi sebuah prosedur VBA terdiri dari 3 bagian:
- Statement Pembuka atau Awal
- Kode program
- Statement Penutup atau akhir
Sebuah procedure yang dituliskan pada sebuah modul selalu diawali dengan statement pembuka dan diakhiri dengan sebuah statemen penutup. Kemudian kode-kode program yang dilakukan oleh procedure tersebut dituliskan diantara kedua statement tersebut.
Perhatikan contoh procedure sederhana berikut:
Seperti terlihat pada contoh prosedur di atas, cara penulisan sebuah prosedur sederhana setidaknya seperti dibawah ini:
[Scope] JenisProsedur NamaProsedur()
'Baris kode program 1, dst.
End JenisProsedur
Selanjutnya akan kita pelajari penjelasan umum untuk masing-masing bagian pada prosedur VBA.
Deklarasi Statement Procedure
Statement pembuka atau deklarasi sebuah prosedure setidaknya harus memuat 3 hal:
[Scope] JenisProsedur NamaProsedur()
Ketiga hal diatas adalah bentuk tersederhana dalam deklarasi prosedure. Jadi, setiap deklarasi prosedur, minimal akan selalu berisi 3 hal tersebut, yaitu: scope, jenis prosedur, nama prosedur.
Sebenarnya statement deklarasi sebuah prosedur VBA tidak hanya ini saja, ada beberapa keyword lain yang juga bisa Anda sertakan, hanya saja untuk menyederhanakan pembahasan, 3 bagian utama deklarasi ini saya kira sudah cukup untuk saat ini.
Scope Pada VBA Excel
Karena pembahasan Procedure juga melibatkan Scope, maka saya kira penting untuk memberikan gambaran umum tentang Scope pada VBA Excel.
Istilah Scoope digunakan untuk menggambarkan bagaimana sebuah variabel dapat diakses dan bagaimana sebuah prosedur dapat dipanggil. Hal ini bergantung pada di mana dan bagaimana sebuah variabel atau prosedur dideklarasikan. Istilah visibilty juga digunakan untuk menggambarkan scope(ruang lingkup). Kedua istilah ini setara.
Ada 4 level scope dari ruang lingkup terkecil sampai terbesar:
- Procedure:
Variabel yang digunakan secara lokal dalam prosedur itu saja dan tidak bisa diakses oleh prosedur dari module lain secara langsung. Usia pakai variabel adalah selama prosedur itu diproses. Jika prosedur telah selesai diproses, maka variabel dibuang dari memori komputer. - Module:
Prosedur atau variabel yang digunakan oleh seluruh prosedur yang ada dalam module tersebut dan tidak dapat diakses secara langsung oleh prosedur dari module lain. - Project:
Prosedur atau variabel yang digunakan oleh seluruh prosedur yang ada dalam VBAProject tersebut. Usia pakainya adalah sejak VBAProject di-load ke memori komputer, yaitu sesaat setelah melewati security macro, sampai saat workbook selesai ditutup. - Global:
Prosedur, variabel, atau class yang digunakan oleh seluruh prosedur dari VBAProject lain. Pintu penggunaannya adalah dengan membuat referensi ke VBAProject yang dibutuhkan. Misal, VBAProject1 memiliki prosedur, variabel, atau class yang ber-scope global. VBAProject2 bisa menggunakan apa yang ada di VBAProject1 jika VBAProject2 menambahkan VBAProject1 dalam referensinya.
Scope dideklarasikan dengan keyword tertentu:
- Public
Dengan menggunakan Keyword "Public" pada dasarnya variabel atau prosedur bisa digunakan dimana saja. - Private
Dengan menggunakan Keyword "Private" pada dasarnya, variabel atau prosedur hanya bisa digunakan oleh module yang menggunakan keyword ini. - Friend
Keyword ini khusus untuk object dan class module saja dan digunakan oleh VBProject dimana keyword Friend digunakan. - Dim
Keyowrd ini digunakan untuk khusus untuk mendeklarasikan sebuah variabel. Pada dasarnya, hanya bisa digunakan oleh kode program yang ada setelah baris deklarasi variabel.
Pembahasan mengenai scope ini sebenarnya cukup panjang dan biasanya akan cukup membingungkan jika anda baru mengenal VBA Excel. Untuk tahap pengenalan VBA ini gunakan saja cara praktis pemakaiannya sebagai berikut :
- Gunakan Dim untuk mendeklarasikan variabel didalam prosedur saja.
- Gunakan Private untuk variabel atau prosedur yang hanya boleh digunakan atau dipanggil didalam module tersebut saja.
- Gunakan Public untuk variabel atau prosedur yang boleh digunakan dimana saja didalam VBProject tersebut.
Tipe atau Jenis Procedure VBA Excel
Secara umum ada 2 tipe procedure pada VBA, yakni Sub Procedure dan Function Procedure.
- Sub Procedure
Sub Procedure merupakan sebuah procedure yang hanya menjalankan aktifitas tertentu tanpa menghasilkan sebuah nilai (Value). Aktifitas pada procedure ini tergantung pada baris-baris perintah yang terdapat pada procedure tersebut. - Function Procedure
Function Procedure merupakan sebuah procedure yang menghasilkan sebuah nilai (Value).Anda tentu sudah mengenal berbagai macam functions atau fungsi excel semisal fungsi SUM, AVERAGE dan lain sebagainya. Cara kerja Function Procedure ini sangat mirip dengan fungsi-fungsi excel ini. Hanya saja fungsi-fungsi tersebut memang sudah ada didalam excel. Jika kita membutuhkan fungsi tertentu yang belum ada, Anda bisa membuat sebuah fungsi khusus yang sering disebut sebagai UDF (User Defined Functions) semisal fungsi terbilang excel.
Lain waktu akan kita ulas lebih dalam tentang kedua tipe procedure ini pada sebuah artikel tersendiri. Untuk saat ini silahkan Anda biasakan dulu untuk menggunakan prosedur dengan tipe Sub terlebih dahulu.
Selain kedua jenis prosedur di atas sebenarnya masih ada jenis prosedur lainnya pada VBA excel yakni Jenis Property Procedure.
Prosedur jenis ini digunakan untuk mengisi nilai ke sebuah variabel atau mengambil nilai dari sebuah variabel.
Umumnya jenis prosedur property digunakan ketika membentuk sebuah custom class dalam Class Module. Jadi, pada dasarnya, prosedur jenis ini bisa digunakan dimana saja seperti halnya prosedur jenis Sub maupun Function.
Prosedur property terdiri dari :
- Let: untuk memasukkan nilai kedalam variabel selain object dan kerjanya mirip dengan penggunaan jenis Sub
- Set: untuk memasukkan nilai kedalam variabel object dan kerjanya mirip dengan penggunaan jenis sub
- Get: untuk mengambil nilai dari suatu variabel dan kerjanya mirip dengan jenis Function
Lain waktu akan kita bahas tentang property, namun sebelum itu Anda harus sudah memahami dulu tentang Tipe Sub dan Function.
Nama Procedure VBA Excel
Sebuah Prosedur harus diberi nama. Aturan utama yang harus Anda ikuti saat menamai sebuah prosedur VBA adalah sebagai berikut:
- Karakter pertama harus berupa Letter Abjad (A-Z,a-z).
- Karakter berikutnya dapat berupa huruf, angka atau karakter tanda baca tertentu (tidak semua tanda baca bisa digunakan).
- Tidak boleh memakai titik (.) Dan spasi ( ) juga tidak bisa memakai karakter berikut: #, $,%, &, @, ^, * dan !.
- Tidak ada perbedaan antara huruf besar dan huruf kecil.
- Jumlah maksimum karakter yang bisa digunakan adalah 255.
Penjelasan lain mengenai aturan menamai procedure ini bisa anda baca pada halaman microsoft berikut.
Sebaiknya nama yang digunakan untuk sebuah procedure itu deskriptif, bermakna dan tidak ambigu sehingga dapat mewakili tujuan atau fungsi dari prosedure tersebut. Dengan demikian saat anda membaca namanya saja anda akan dengan mudah mengetahui maksud dari isi kode program pada procedure tersebut. Jadi jangan asal-asalan membuat sebuah nama procedure sehingga Anda akan dibuat bingung saat sebuah project VBA sudah memuat banyak procedure.
Baris Kode Program VBA Excel
Baris kode umumnya merupakan sebuah Executable statements, merupakan sebuah baris program yang berisi perintah VBA untuk melakukan sesuatu yang tentunya harus mengikuti kaidah-kaidah penulisan VBA.
Baris kode pada sebuah prosedur VBA selalu diproses baris per baris. Jadi bedakan antara baris program dan baris penulisan.
Baris program pastilah selalu satu baris. Satu baris program ini bisa ditulis dalam beberapa baris penulisan dan ada kemungkinan beberapa baris program ditulis dalam satu baris penulisan.
Dalam penulisan baris program, terdapat beberapa karakter khusus yang memiliki arti atau tujuan khusus, antara lain :
- Tanda petik tunggal (')
Karakter ini menandakan bahwa mulai dari karakter petik tunggal ini merupakan sebuah keterangan atau teks yang tidak perlu diproses. Teks atau keterangan ini umumnya digunakan untuk memberikan penjelasan pada baris-baris kode VBA. - Underscore (_)
Karakter ini menandakan pindah baris penulisan untuk satu baris program tersebut. Jika sebuah baris kode program cukup panjang, gunakan underscore untuk menandai bahwa baris berikutnya merupakan kelanjutan dari baris program tersebut. - Titik dua (:)
Karakter ini digunakan untuk menandai akhir sebuah baris program. Titik dua (:) ini merupakan kebalikan dari karakter underscore (_). Jika Underscore digunakan untuk memisahkan 1 baris program menjadi beberapa baris, titik dua digunakan untuk menjadikan beberapa baris program menjadi 1 baris saja. Artinya, dalam satu baris penulisan akan terdapat beberapa baris program.
Statement Akhir Procedure
Sebuah prosedur VBA selalu diakhiri atau ditutup dengan keyword "END" yang diikuti dengan jenis prosedure. Contoh:"End Sub" atau "End Function".
End JenisProsedur
Latihan VBA Excel
Untuk lebih memahami panduan VBA pada halaman ini, silahkan ikuti latihan-latihan berikut.
Latihan 1
Sebisa mungkin lakukan penulisan setiap kode secara manual (Jangan Copy Paste) agar sekaligus melatih kepekaan anda pada kode-kode VBA.
- Buat sebuah file excel baru dengan ekstensi .xlsm dan beri nama file "Kelas Excel-Latihan VBA 2". Simpan file ini pada folder yang sudah kita siapkan pada panduan VBA sebelumnya.
- Pada modul ThisWorkbbok buatlah sebuah prosedur berikut:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) 'Ini contoh Event procedure pada modul ThisWorkbook MsgBox "Sheet tertentu pada file ini sedang aktif" End Sub
- Jika sudah, cobalah untuk berpindah antar sheet pada workbook anda. Apa yang terjadi?
Saat anda mengaktifkan Sheet1, sheet2 atau sheet3 maka akan muncul sebuah kotak pesan (Message Box) yang berisi teks: "Sheet tertentu pada file ini sedang aktif". Event Prosedur pada thisWorkbook tadi berjalan ketika anda mengaktifkan sheet manapun pada file.
- Selanjutnya Pada modul Sheet1 buatlah sebuah prosedur berikut:
Private Sub Worksheet_Activate() 'Ini contoh Event procedure pada modul sheet MsgBox "Sheet 1 Sedang aktif" End Sub
- Sekarang cobalah untuk mengaktifkan Sheet1, Sheet2 dan Sheet3 pada file tersebut secara bergantian. Apa yang terjadi?
Saat anda mengaktifkan Sheet1 selain muncul pesan dari kode pada ThisWorkbook tadi muncul pesan lain yang merupakan hasil dari kode pada modul Sheet1. Sedangkan pada Sheet2 dan Sheet3 tidak berlaku hal yang sama.
Dari latihan ini, anda bisa belajar bahwa event procedure pada thisWorkbook berpengaruh pada semua Sheet sedangkan event procedure pada sebuah sheet tidak berpengaruh pada Sheet lain.
Latihan 2
Masih pada file yang sama lakukan beberapa hal berikut:
- Tambahkan 2 standart modul baru dengan klik Insert--Module.
- Aktifkan Modul 1 (Double klik) kemudian tulis buatlah prosedure VBA berikut:
Public Sub latihanMacro1() 'Ini prosedur public dengan nama "latihanMacro1" MsgBox "Ini prosedur public pada -Modul 1- dengan nama -latihanMacro1-" MsgBox "Belajar VBA by -Kelas Excel-" End Sub
- Jalankan sub prosedur tersebut.
- Buatlah 2 prosedur baru dibawah prosedur latihanMacro1 tadi, kode VBA-nya sebagai berikut:
Prosedur latihanMacro2:
Sub latihanMacro2() 'Ini prosedur dengan nama "latihanMacro2" MsgBox _ "Ini prosedur pada -Modul 1- dengan nama -latihanMacro2-" MsgBox "Belajar VBA by -Kelas Excel-" End Sub
Prosedur latihanMacro3:
Private Sub latihanMacro3() 'Ini prosedur private _ dengan nama "macroUmum3" MsgBox "Ini prosedur private dengan nama -latihanMacro3-": MsgBox "Belajar VBA by -Kelas Excel-" End Sub
- Jalankan masing-masing sub prosedure tersebut secara bergantian.
Pada latihan di atas saya ingin menekankan bagaimana cara membuat sebuah prosedur sederhana pada sebuah modul serta bagaimana menggunakan tanda baca petik tunggal ('), underscore(_) dan titik dua(:).
Silahkan baca ulang penjelasannya pada bagian sebelumnya.
Latihan 3
Jika sudah bisa memhami maskud dari prosedur-prosedur di atas, sekarang kita lanjutkan dengan latihan 3.
- Masih pada file yang sama, buka standart Modul 2, kemudian buatlah sebuah sub prosedure dengan nama latihanMacro4 dengan kode sebagai berikut:
Sub latihanMacro4() 'Memanggil prosedur latihanMacro1 latihanMacro1 End Sub
- Jalankan prosedure tersebut.
Prosedure latihanmacro4 ini bermaksud memanggil atau menjalankan prosedur latihanMacro1 dengan cara menuliskan nama prosedure yang akan dipanggil tadi. Saat latihanMacro4 dijalankan maka prosedur ini akan memanggil dan menjalankan kode program yang ada di latihan Macro1.
- Selanjutnya kita buat 2 prosedur lain pada modul 2 dengan masing-masing kode sebagai berikut:
Prosedur latihanMacro5:
Sub latihanMacro5() 'Memanggil prosedur latihanMacro2 latihanMacro2 End Sub
Prosedur latihanMacro6:
Sub latihanMacro6() 'Memanggil prosedur latihanMacro3 latihanMacro3 End Sub
- Jika sudah silahkan coba jalankan kedua prosedure di atas secara bergantian. Apa yang terjadi?
Saat latihanMacro5 dijalankan prosedur ini memanggil untuk menjalankan prosedur latihanMacro2 sehingga yang muncul adalah kotak pesan seperti yang bisa andalihat saat menjalankan prosedur latihanMacro2.
Saat latihanMacro6 dijalankan yang terjadi adalah error "Compile error: Sub or Functions not Defined" seperti gambar dibawah ini:
Kenapa terjadi hal demikian? Ya tebakan anda benar, sebab deklarasi pada latihanMacro3 scopenya adalah private, sehingga prosedur tersebut hanya bisa dipanggil dari modul 1 dan tidak dapat dipanggil dari modul 2.
Selain mencoba sedikit memahami tentang scope private dan public dari latihan ke-3 ini saya ingin menyampaikan juga pada dasarnya sub prosedur pada sebuah modul standart scopenya adalah public sehingga jika Anda tidak menuliskan keyword Public pada sebuah prosedur VBA didalam sebuah modul standart, maka akan dianggap sebagai public (lihat latihanMacro1 dan latihanMacro2) dan hanya dianggap private jika anda menyertakan keyword "Private" pada prosedur tersebut (latihanMacro3).
Jika anda masih bingung dengan penjelasan pada halaman ini, sangat bisa saya maklumi karena keterbatasan kemampuan saya untuk memilih kata-kata. Untuk itu jangan sungkan-sungkan untuk bertanya melalui bagian komentar yang sudah tersedia.
Download File Latihan VBA Excel
Untuk melengkapi pembahasan kali ini silahkan download File latihan di bawah ini :
Download File *Jika link mati / tidak dapat diakses silahkan lapor via kontak yang tersedia
LINK DOWNLOAD TERKUNCI.
Silahkan SHARE untuk download file!
Sekian dulu pembahasan kita mengenai Module dan Procedure pada VBA Excel. Jika tutorial ini bermanfaat silahkan juga untuk dibagikan sehingga kawan anda lainnya juga ikut mendapatkan manfaatnya.
Terimas kasih, sampai jumpa pada seri panduan VBA Dasar berikutnya kita akan belajar tentang Tipe Data pda VBA Excel.