Coretan Mr. Kid Harta akan terasa habis yang ada ditangan ketika dibagikan, sedangkan ilmu tidak pernah habis ketika dibagikan Pada BelajarVBA 002 telah disinggung sedikit tentang prosedur, yaitu pengertian dan bentuk dasar sebuah prosedur. Pada pembahasan kali ini, akan kita jelajahi lebih jauh tentang seluk beluk prosedur. Mulai dari jenisnya hingga penggunaan prosedur yang dideklarasikan secara lengkap. Untuk memudahkan proses belajar, maka file BelajarVBA004.xlsm bisa menjadi media untuk mencoba secara langsung hal-hal yang dijabarkan dalam pembahasan kali ini. File BelajarVBA004.xlsm bisa diunduh disini. Pembahasan kali ini adalah seri pertama dari tiga seri pembahasan tentang prosedur. Jenis ProsedurProsedur di dalam VBA ada 3 (tiga) jenis, yaitu : Sub Prosedur yang berisi proses kerja tanpa memberikan nilai balik hasil kerja. Jadi nama prosedur tidak menyimpan nilai apapun. Prosedur jenis sub yang dideklarasikan dengan keyword Public dan tanpa parameter
input apapun dapat dijalankan melalui workbook window sebagai sesuatu yang sering disebut Macro. Function Prosedur yang berisi proses kerja yang menghasilkan suatu nilai balik hasil kerja. Nilai balik hasil kerja disimpan dalam nama prosedur. Prosedur function yang dideklarasikan dengan keyword Public dapat digunakan dalam cell seperti fungsi
bawaan Excel. Property Prosedur yang digunakan
untuk mengisi nilai ke sebuah variabel atau mengambil nilai dari sebuah variabel. Umumnya jenis prosedur property digunakan secara intensif 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.
Pembahasan tentang property akan dilanjutkan setelah memahami Sub dan Function lebih detil. Deklarasi Prosedur Sebuah contoh deklarasi prosedur sub yang diletakkan pada sebuah general module (misal di mod04)
adalah sebagai berikut : ArgumenSetiap bentuk yang seperti suatu deklarasi variabel, misal sNama As String, disebut sebuah argumen. Prosedur bisa berisi banyak argumen. Contoh di atas berisi 7 argumen. Argumen terdiri dari nama argumen (misal sNama) dan datatype argumen (misal As String). Nama argumen bekerja layaknya variabel didalam prosedur tersebut (scope level local). Argumen adalah sesuatu yang harus disediakan oleh prosedur lain yang bermaksud memanggil prosedur berargumen ini, yang berupa sebuah nilai input parameter. Jadi, prosedur lain yang akan menggunakan prosedur DataMember di atas harus menyediakan nilai bagi setiap argumen yang harus dipenuhi. Keyword OptionalKeyword Optional digunakan untuk menyatakan bahwa argumen tersebut boleh tidak disediakan nilainya. Penggunaan keyword Optional bisa disertai dengan penetapan nilai default bagi argumen tersebut ketika tidak disediakan nilainya ooeh prosedur pemanggil, seperti =TRUE pada Optional bMember As Boolean =TRUE. Setiap argumen dengan keyword optional dikumpulkan dan diletakkan pada bagian akhir daftar argumen, seperti jejeran argumen yang menggunakan keyword optional pada contoh diatas. Pada contoh di atas, bila argumen bMember tidak diberi nilai oleh prosedur pemanggil, maka akan diisi oleh nilai default menurut baris deklarasi tersebut, yaitu bernilai TRUE. Keyword ByVal dan ByRef Keyword ByVal dan ByRef adalah penunjuk cara penggunaan sesuatu yang diserahkan oleh prosedur pemanggil kepada prosedur berargumen yang dipanggil. ByRef adalah sebagai default, sehingga sNama As String dapat ditulis sebagai ByRef sNama As String. Cara memanggil prosedur berargumen Prosedur yang memiliki argumen harus disediakan nilai data setiap argumen utamanya
(tanpa Optional) agar bersedia bekerja. Misalkan akan memanggil prosedur sub berargumen seperti prosedur DataMember yang diletakkan pada general module bernama mod04 yang menjadi contoh di atas tadi. Pada general module bernama mod03 bisa diberi prosedur pemanggil seperti prosedur berikut ini : Pada gambar tersebut tampak nama prosedur, yaitu DataMember, yang memiliki banyak argumen, mulai dari sNama yang harus dipenuhi sampai dengan bMember yang bersifat optional (bila ada atau
bila dibutuhkan). Cara memanggil prosedur DataMember dengan menggunakan keyword Call akan berbentuk seperti prosedur berikut : 'diisi nilai konstan secara langsung Jadi, nilai TRUE tidak perlu ditulis dalam pemanggilannya. Pada contoh di atas, bMember ada dibagian akhir deklarasi. Argumen yang bersifat optional lainnya, seperti sTelp, tidak ditentukan nilai default-nya. Maka nilai default dari argumen sTelp adalah nilai default dari datatype yang digunakan oleh sTelp. Karena sTelp menggunakan datatype String, maka nilai default-nya adalah NULLSTRING atau teks kosong. Jika argumen sTelp yang bersifat optional tidak ingin diisi sesuatu atau ingin menggunakan nilai default dari argumen sTelp, maka pemanggilan prosedur DataMember akan menjadi seperti dalam prosedur PanggilBerargumen4 berikut ini : Public Sub PanggilBerargumen4() 'diisi nilai konstan secara langsung 'untuk bMember yang akan diisi TRUE 'yang sesuai nilai default bMember 'dan argumen sTelp akan diisi sesuai defaultnya DataMember "Kid", 17, 0, "Jakarta", , "" 'diisi nilai konstan secara langsung Kehadiran sebuah item kosong antara nilai untuk argumen sAlamat (yang bernilai 'Jakarta') dengan nilai untuk argumen sEmail (yang bernilai '') menunjukkan bahwa argumen sTelp tidak disediakan nilainya oleh prosedur PanggilBerargumen4 yang menjadi prosedur pemanggil prosedur DataMember. Pemanggilan seperti di atas, baik dengan atau tanpa keyword Call, akan membuat argumen sTelp diisi dengan NULLSTRING yang menjadi nilai default. Nama argumen dari prosedur yang dipanggil juga bisa dituliskan agar lebih mudah pembacaan kode programnya dilain waktu. Misal, cara pemanggilan prosedur PanggilBerargumen1 akan menyertakan nama-nama argumennya, maka akan seperti prosedur PanggilBerargumen5 berikut ini : Penyertaan nama argumen akan terasa manfaatnya ketika berhubungan dengan argumen-argumen yang bersifat optional yang tidak seluruhnya akan diisi nilai. Pada contoh prosedur DataMember, penyertaan argumen akan terasa ketika akan mengisi argumen sTelp sampai bMember. Misalkan saja seperti
pemanggilan prosedur DataMember seperti contoh prosedur PanggilBerargumen4 yang hanya akan mengisi argumen bersifat optional bernama sEmail saja. Ketika menyertakan nama argumen, maka prosedur PanggilBerargumen4 bisa diubah seperti prosedur PanggilBerargumen7 berikut ini : 'argumen optional yang diisi hanya sEmail saja Pada prosedur PanggilBerargumen7 tampak bahwa argumen sNama sampai dengan argumen sAlamat yang harus dipenuhi (bukan bersifat optional) ditulis tanpa menyertakan nama argumen. Sedangkan pada satu-satunya argumen bersifat optional yang akan diisi, yaitu argumen bernama sEmail, disertai dengan nama argumennya. Dengan cara ini, maka tidak diperlukan adanya ruang kosong antara nilai 'Jakarta' (untuk argumen sAlamat) dengan nilai '' (untuk argumen optional sEmail). Hal ini akan terasa manfaatnya ketika jumlah argumen optionalnya sangat banyak seperti contohnya pada pemanggilan prosedur sub Sort yang menjadi sebuah methods (kemampuan kerja) dari object range. Prosedur Sort memiliki banyak sekali argumen. Pada prosedur Sort, seluruh argumen bersifat Optional. Misalkan akan melakukan sort terhadap area A1:C5 yang memiliki header pada area A1:C1 berdasar kolom B secara Ascending. Kegiatan ini akan memerlukan nilai input parameter untuk argumen berupa :
Contoh prosedur untuk proses ini akan seperti gambar berikut : Dari gambar di atas tampak bahwa prosedur sort memiliki argumen dari Key1 sampai dengan DataOption3 yang bersifat optional dan beberapa diantara argumen tersebut telah ditetapkan nilai defaultnya. Untuk
proses sort pada kasus ini cukup mengisi argumen Key1 dan argumen Header saja. Argumen Order1 diabaikan karena nilai defaultnya sudah sesuai dengan kebutuhan, yaitu secara Ascending. Argumen Key2 sampai dengan Order3 diabaikan karena tidak dibutuhkan. Begitu juga dengan argumen OrderCustom sampai dengan DataOption3 yang diabaikan karena tidak dibutuhkan.
Dari uraian di atas semestinya sudah bisa mulai terbayang tentang adanya potensi untuk membuat sebuah proses dalam sebuah prosedur atau serangkaian prosedur yang bisa digunakan berulang-ulang oleh banyak prosedur kerja. Contohnya seperti prosedur sort yang bisa digunakan oleh banyak kegiatan sort tanpa harus selalu menulis algoritma proses perulangan (loop) untuk mengurutkan data. Insya Allah pembahasan prosedur pada seri kedua adalah tentang ByRef dan ByVal serta pemanfaatan scope untuk membuat sebuah rangkaian proses lebih bersifat modular. Pemahaman tentang scope, variabel, dan prosedur berargumen akan lebih intensif dibahas dan digunakan. |