Sekilas Tentang VBA/VBE


MODULE dan VBE.
Code program ditulis dan disimpan di sebuah Module VBA. Module VBA bersama-sama dengan Worksheet dan object lain disimpan dalam Workbook Excel.
Module VBA dapat dilihat, ditulis, disunting melalui Visual Basic Editor (VBE). VBE dapat diakses dari layar Excel melalui Menu Tools > Macro > VBE.  Dengan kata lain VBE (serta hasil programmingnya) hanya dapat dijalankan di dalam Excel, pada saat Excel aktif.
Selain ditulis secara manual, code program dapat pula diciptakan dengan cara perekaman, yaitu merekam tindakan-tindakan (actions) di Excel. Mode merekam dapat dimulai dengan instruksi menu Tools > Macro > RecordMacro..  dan diakhiri dengan instruksi menu Tools > Macro > Stop Recording.
Mode perekaman ada keterbatasannya yaitu kita tidak dapat membuat prosedur Fungsi, juga tidak dapat membuat prosedur Sub yang memerlukan Proses Pengulangan, Proses Pencabangan. Walaupun demikian dengan mode recording ini dapat kita buat program-program yang cukup berguna untuk membuat otomasi-otomasiyg berguna untuk pekerjaan rutin kita sehari hari.
Didalam VBA, paling tidak ada 3 jenis Module.
Setiap object Sheet (Worksheet dan ChartSheet), Workbook maupun UserForm mempunyai Module masing-masing, disebut Object Module.
Selain itu kita dapat membuat Module lain (dengan menu: Insert > Module) sebagai Module Umum / Module Utama. Disamping dua jenis module yg sudah disebutkan, masih dapat dibuat Class Module.
Module Umum adalah tempat menuliskan Deklarasi dan Prosedur yang berlaku umum, tidak harus mengacu ke suatu object. Module yg menyertai Object (Sheet, Workbook, UserForm) adalah wadah untuk menuliskan prosedur-prosedur yang spesifik untuk keperluan mengurus Objects tersebut. Sedangkan Module Class adalah tempat khusus ditulisnya prosedur untuk menciptakan Class Baru. Keistimewaan Module Class adalah dapat dibuatnya Prosedur Property. Yang akan menjadi property bagi Class yg akan tercipta. (Module Class dan Prosedur Property belum perlu dibicarakan lebih lanjut dalam kesempatan sekilas ini).
Class adalah bentuk formal dari sebuah object. Class belum merupakan sebuah object TERTENTU. Barangkali dapat dikatakan bahwa Class adalah cetakan / templete dari sebuah object. Object tercipta berkat instansiasi dari sebuah kelas.

USERFORM DAN OBJECT CONTROLS
UserForm dapat kita anggap sebuah “kanvas” tempat kita melukiskan object-object Controls.
UserForm setelah dibuat sedemikian rupa akan dapat ditampilkan sebagai DialogBox atau Window tempat dikontrolnya sebuah Aplikasi.
Object Controls adalah sebuah bentuk yang berguna untuk mengarahkan jalannya program / aplikasi. Misalnya TextBox untuk menampung data, ComboBox atau ListBox untuk memilih data, checkBox dan Option Button untuk menentukan pilihan, Tombol (CommandButton) untuk menjalankan suatu tindakan / kegiatan, dsb.

PROCEDURE, MACRO, CODE
Module VBA terdiri dari Prosedur-Prosedur, atau dapat dikatakan bahwa : Module adalah wadah untuk menyimpan Prosedur-Prosedur / Macro.
Prosedur (Procedure) terdiri dari sekumpulan Code yang dapat melakukan tindakan-tindakan (actions) tertentu dan atau menghasilkan nilai tertentu. Istilah lain dari Procedure adalah Macro, Rutin, Sub Rutin. Sekelompok Code dapat disebut sebagai sebuah prosedur bila memenuhi syarat tertentu, antara lain dibuka dan ditutup dengan Code tertentu.
Code adalah instruksi atau serangkaian instruksi dalam bahasa pemrograman yang dapat dilakukan oleh komputer.
Di dalam VBA dikenal ada tiga jenis prosedur, yaitu Prosedur Sub, Prosedur Fungsi dan Prosedur Property.

PROCEDUR SUB
Prosedur Sub adalah sekumpulan code instruksi yang dapat melaksanakan tindakan/aksi aksi tertentu, misal memformat sebuah range, menghapus isi range, membuat sebuah tabel, dsb. Pada contoh sederhana di bawah ini, 2 prosedur Sub dapat menampilkan kotak pesan berisi informasi, dan menebalkan huruf pada range di worksheet yg sedang diblok (terSelected).

Sub CobaMakro()
   NmDep = “Munah”
   NmBel = “Sari”
MsgBox “Nama Lengkap: “ & NmDep & “ “ & NmBel
End Sub

Sub Menebalkan()
   Selection.Font.Bold = False
End Sub

Agar Prosedur Sub dapat melakukan aksinya, maka kita harus me-RUN / menjalankannya. Cara lain ialah: memanggilnya dengan menuliskan NamaProsedurnya di Prosedur lain.

PROCEDURE FUNCTION
Di dalam Module VBA, selain dapat dibuat prosedur Sub juga dapat dibuat prosedur Fungsi (Function Procedures).  Prosedur jenis ini tidak dibuat untuk melaksanakan aksi, tetapi khusus untuk menghasilkan / mengembalikan sebuah nilai. Sebuah Fungsi dapat dipanggil oleh prosedur lain dalam Module, dapat pula dijadikan formula dalam Worksheet. Contoh Fungsi untuk menjumlah (menghasilkan suatu jumlah).
Contoh Prosedur Fungsi

Function Luas(Panjang, Lebar)
   Luas = Panjang * Lebar
End Function

Pada contoh di atas, Fungsi Luas mengembalikan hasil kali dari masukan Panjang dan Lebar.
Di dalam Prosedur Sub maupun Prosedur Function bisa (tetapi tidak harus) terdapat Arguments.
Argument adalah sebuah Variable atau Konstanta atau Ekspresi yang diumpankan kepada sebuah prosedur.
Contoh: Prosedur Function LUAS di atas, mempunyai dua buah Argument Formal yang bernama Panjang dan Lebar.
Pada pemakaiannya Fungsi tsb dapat dituliskan (pada prosedur lain, atau bisa juga pada worksheet):

A1 = Luas(5,7)

Hasilnya adalah  Cell atau Variable A1 akan berisi data bilangan 35 yaitu hasil kali dari 5 dan 7.
5 dan 7 itu disebut Argument Aktual.
Selain Fungsi-Fungsi yg kita buat sendiri, VBA sudah menyediakan banyak Fungsi yang mencakup berbagai keperluan kalkulasi dan pengolahan data.

OBJECT DAN HIERARKINYA
Excel meyediakan banyak sekali (lebih dari seribu) object, misalnya workbook, worksheet, range, chart, shapes, pivot table, commandbar, textbox, listbox, checkbox, button, dsb.  Dengan VBA kita dapat memanipulasikan object-object yang ada dalam Excel.
Di dalam Excel (maupun VBA) object-object tersusun secara hierarkis. Sebuah Object dapat menampung object-object lain. Misal  di dalam Object Application terdapat object Workbook, VBE dsb. Di dalam object Workbook terdapat object Worksheet, Chartsheet, CommandBars, WorksheetFunction dsb.  Di dalam object Worksheet ada object Range, Shapes, Comments. PivotTable  dsb.  Object yg lebih tinggi hierarkinya, yaitu yg menampung object object lain disebut object Penampung atau Container. Object yg berapa pada hierarki dibwahnya disebut Member / Anggota.

OBJECT DAN COLLECTION
Collection adalah sekelompok object yang sejenis. Misalnya bila saat itu kita membuka beberapa workbook, maka beberapa workbook tsb membentuk koleksi Workbooks yg terdiri dari beberapa Object Workbook.
Beberpa Worksheet membentuk collection Worksheets.  Beberpa Worksheet dan Chartsheet membentuk sebuah collection bernama Sheets. Collection itu sendiri (misal Workbooks,  Worksheets, CommandBars, Sheets dsb) adalah juga sebuah Object.  Dengan kata lain,  Worksheet adalah Member (anggota) dari object Workbook. Worksheet juga menjadi anggota dari Worksheets collection, selain itu dia juga menjadi anggota dari Sheets collection.

OBJECT DAN MEMBER-NYA.
Untuk menyatakan sebuah Member dari sebuah Object atau Collection, penulisan codenya harus dipisahkan dengan sebuah Dot Operator (berupa sebuah karakter titik (.) sesuai hierarki dan keanggotaanya-nya. Semakin ke kanan, semakin rendah hierarkinya.
Misal : untuk mengakses sebuah worksheet yang bernama “Data2” yg ada di dalam Book2. XLS, codenya dapat ditulis :

Application.Workbooks(“Book1).Worksheets(“Data2”)

Cell F16 yang ada di Worksheet Data2  dapat diakses dengan menuliskan code:

Application.Workbooks(“Book1).Worksheets(“Data2”).Range(“F16”)

Dalam Excel, object yang bernama Application itu adalah Excel itu sendiri, karena saat VBA dijalankan Excel lah yang sedang menjadi Host Application-nya.
Didalam Excel, bila ada beberapa workbook terbuka, maka pada saat yang sama hanya ada satu workbook yg aktif. Demikian juga dengan Worksheet dan Range / Cell.
Penulisan nama object di hierarki yang lebih tinggi dapat dihilangkan (tidak dituliskan) bila object tersebut sedang aktif.
Misal workbook Book1 sedang aktif, maka code

Application.Workbooks(“Book1).Worksheets(“Data2”).Range(“F16”)

Dapat ditulis lebih singkat:

Worksheets(“Data2”).Range(“F16”)

Bila saat itu Sheet “Data2” sedang aktif, maka code tsb dapat dipersingkat menjadi

Range(“F16”)

Dapat disimpulkan bahwa bila kita menuliskan code suatu object tanpa menyebutkan hierarki di atasnya, maka yang akan terakses adalah object senama yang ada pada object yg sedang aktif. (Ingat bahwa nama workbook, nama sheet, apalagi nama range /cell bisa sama dan ada di collection / object lain).

OBJECT DAN PROPERTY
Selain bisa mempunyai Anggota/Member, sebuah object juga memiliki  properti-properti (Properties).
Property adalah attribut atau ciri-ciri bagi sebuah Object. Setiap Property menjabarkan karakteristik sebuah object, misalnya: Warna-nya. Lebar-nya,  Lokasi-nya di layar, Statusnya (misal Visible atau “tidak-Visible”, Enabled atau “tidak-Enabled”, dsb).
Sebuah Cell (object Range) berisi data bilangan 50, Cell di sebelahnya berisi data teks “Gaji”. Dapat kita katakan bahwa kedua cell tsb berbeda Property VALUE nya.
Menuliskan properti bagi sebuah object dengan cara menggabungkan {NamaObject} {DotOperator} {Propertynya},  Gampangnya: Penulisan Object dan Property harus diAntarai oleh sebuah TITIK, yaitu cara yang sama seperti penulisan object dengan Membernya. Misalnya:
Workook.Name     menghasilkan nama workbook tsb, misalnya  “Book7.XLS”.  Name adalah sebuah property yg dimiliki oleh semua object, termasuk workbook.
Dengan VBA kita dapat mengubah ciri suatu object, yaitu dengan mengubah /memberi nilai kepada property atau (properties)-nya

Range(“A1”).Value = 1000  
     
Cell A1 diubah property VALUE nya menjadi: 1000, mengakibatkan Cell tsb berisi data bilangan 1000.

Worksheets(“Sheet1”).Name = “Laporan 2007”

Property NAME milik Worksheet “Sheet1” diubah / diisi menjadi “Laporan 2007”, mengakibatkan Nama sheet tsb (yg tampak di TabSheet-nya) menjadi “Laporan 2007”
Nilai suatu Property milik suatu Object dapat diakses dan diberikan kepada Property lain milik Object lain.  Contohnya:

Range(“A9”).Value = Sheet5.Range(“A10”).Value

Nilai yang ada di cell A10 pada Sheet5 (pada workbook yg sedang aktif) diakses dan 
diberikan/diisikan ke Cell A9 pada sheet yg sedang aktif.

VarBilKu = Sheet3.Range(“X231”).Value

Sebuah Variable yg bernama VarBilKu diisi dengan nilai milik Cell X231 yg berada di Sheet3 pada workbook yg sedang aktif. (Mengenai Variable, akan di jelaskan kemudian).
Property dapat menghasilkan sebuah Object. Misalnya: Cells adalah salah satu Property  milik worksheet. Sheet1.Cells(3,6) adalah code yang merujuk ke Cell F3, atau istilah dalam VBA : Range F3.  Range(“F3”) ini adalah juga sebuah object, yang kemudian bisa dimanipulasi dengan mengubah ubah nilai properties-nya.
Contoh lain : Font adalah salah satu Property milik object Range.

Range(“F16:F18”).Font.Color = vbRed,

Property Font menghasilkan object Font. Dan kemudian Object Font itu dengan Property Color di set menjadi bernilai vbRed, mengakibatkan Font yang ada di Range F16:F18 menjadi berwarna merah.
Konsep ini barangkali  agak “tidak segera” dapat difahami tetapi dengan menyelam ke VBA beberapa saat akan mempercepat pemahamannya.
Note: vbRed adalah salah satu konstanta bawaan dari VBA.

OBJECT DAN METHODS (METODA)
Disamping mempunyai Member dan Property,  sebuah Object dapat memiliki Methods.  Method adalah tindakan, aksi atau kegiatan yang dapat dilaksanakan oleh sebuah object.
Contoh:
Sebuah Worksheet yang semula tidak aktif dapat menjadi aktif. Dalam VBA untuk menjadikan Worksheet menjadi aktif dengan cara memberlakukan METHOD Activate

Sheet17.Activate

Mirip dengan metoda Activate bagi worksheet adalah metoda Select

Worksheet4.Select

(keluar dari koridor sebentar: Bedanya: Metoda Select dapat diberlakukan terhadap banyak Sheet secara sekaligus, sedangkan metoda activate hanya bisa mengaktifkan SATU object pada saat yang sama. Metoda Select juga sekaligus mengaktifkan salah satu Object yg diselected)
Isi suatu Range dapat dikosongkan dengan METODA ClearContents

Range(“A1:Z60000”).ClearContents 

METODA lain, Clear milik object Range bekerja seperti METODA ClearContents tetapi juga menghapus formattingnya.
Sebuah Workbook (yg semula blum ada) dapat dibuat ada dengan metoda Add.  Workbook juga dapat diSave dengan metoda Save
Seperti sudah terlanjur dicontohkan, sebuah METODA dicodekan setelah Object-nya dengan operator perantaranya: tetap sebuah Dot Operator.
Kesimpulan:  object dengan anggotanya, object dengan propertinya, object dengan metodanya semua dituliskan dengan diberi operator TITIK.

KONSEP PEMROGRAMAN
Seperti layaknya sebuah bahasa pemrograman, VBA juga mengenal adanya struktur pemrograman modern, dimana didalamnya melibatkan konsep-konsep pemrograman, antara lain:
q       Functions / Fungsi bawaan dari VBA.
VBA membawa fungsi yg cukup banyak. Dengan fungsi kita mencari nilai berdasakan nilai-nilai lain yg telah kita punyai. Semakin banyak kita mengenal Fungsi yag ada, maka semakin luas kemampuan kita memecahkan masalah dalam pemrograman.
Beberapa contoh fungsi VBA

X = Abs(N)  mengembalikan nilai absolut dari N
P = Left(variableKu, 5)   Isi (text) vaiable yg bernama variableKU diambil 5 huruf dihitung dari kiri, dan dimasukkan ke variable P
Y = Cos(N) mengembalikan cosinus dari satu Sudut N
Z = Ubound(NamaArray,Dimensi)  mengembalikan Nomor Index terbesar dari Dimensi yg ditunjuk pada sebuah Array.  Bahkan dari VBA kita dapat menggunakan banyak Fungsi milik Excel yaitu melalui object WorkshetFunction.

q       Berbagai jenis Operator
Operator Aritmatik, Operator Penggabungan, Operator Perbandingan (Comparison), Operator Penugasan (Assignment), Operator Logika. Semuanya siap untuk membantu memanipulasi dan pengolahan data-data Anda. Sifat dan cara penggunaan setiap operator harus dikenali dengan baik, agar program menghasilkan output yang benar.

q       Variable dan Konstanta (Constants)
Tanpa adanya variable, pemrograman hampir tidak mungkin dilaksanakan, karena selama program berjalan banyak data yg selalu berubah-ubah memerlukan tempat-tempat di memori yg mudah dipanggil kembali, yaitu dengan cara memberi nama. Tempat tertentu itu disebut Variable. Bila ditentukan agar tidak berubah selama program berjalan disebut Konstanta.
Variable dan Konstanta dapat diatur jangkauan / ruang-lingkupnya serta umur/waktu hidupnya. Selain itu mereka juga sebaiknya ditentukan TypeData-nya sesuai keperluan. Pengaturan ini bertujuan untuk keakuratan dan kestabilan program, serta untuk mengefisienkan pemakaian memori selama program berjalan.

q       Konstanta Bawaan (Defined Constants)  dari VBA, maupun dari Excel
      Konstanta bawaan sangat membantu pemrogram, dengannya kita tidak perlu mengingat ingat nilai-nilai yg sulit diingat. Beberapa contoh
      VbCrlf = konstanta mewakili “ENTER” memindahkan data berikutnyua ke Baris berikutnya.
      VbBlue = mewakili nilai untuk menciptakan warna biru
      XlDown = mewakili pemilihan Range dari titik tertentu keBawah hingga cell berdata berikutnya

q       Type / Jenis Data
Numbers (Byte, Integer, Long, Single, Double, Currency, Decimal, Date,) Object, String, Variant. Selain itu kita dimungkinkan menciptakan type data sendiri (User Defined Types).
Sebuah data harus punya typeData tertentu agar dapat diolah dengan akurat dan benar. Mengenal TypeData serta sifat-sifatnya adalah keharusan bagi pemrogram. Pemilihan type data yang ngawur akan meng-InEfisienkan pemakaian memory komputer dan sering mengakibatkan buruknya kinerja program.

q       Array / Larik
Array adalah data dengan keistimewaan, bahwa setiap array adalah SATU data, tetapi mempunyai banyak dimensi dan setiap dimensi dapat berisi banyak element yg berisi sub-sub data yg sejenis. Setiap sub-data dapat diakses secara individual dengan menyebutkan nomor indexnya. Array dapat berdimensi satu dapat berdimensi banyak. Diluar itu, dimensi maupun elemen Array dapat dibuat fixed / tertentu, tetapi juga dapat dibuat dinamis artinya dimensi dan elemennya bertambah maupun berkurang sesuai keperluan program. Data Array dapat diperlakukan seperti halnya data yg terletak secara beraturan di Range, sehingga dapat dengan mudah diproses (diurutkan, dicari nilai Max-nya, dicari suatu nilainya yg memenuhi kriteria tertentu, dsb). Keunggulan array antara lain dapat di akses dan diproses dengan waktu yag lebih cepat dari pada data di Sheet.
Dengan mengenal Array secara baik, seorang pemrogram akan dapat berbuat lebih banyak dengan cara yang lebih mudah dan cepat.

q       Pengulangan / Looping
Pekerjaan atau aksi yg mirip/mempunyai punya pola keteraturan, jika harus diulang-ulang, coding-nya tidak perlu ditulis berulang-ulang pula, karena adanya struktur looping. Dengan struktur looping, kita hanya cukup menulis code satu kali saja, dan program akan mengulang sebanyak yg kita kehendaki sesuai keperluan. Bisa sekedar 3 atau 5 kali tetapi juga bisa jutaan kali pengulangan. Contoh statement struktur looping:

Do-While-Loop, 
For-Next,
While – Wend

q       Pencabangan / Branching
Pada suatu titik tertentu, arah program bisa bercabang, dan pemmilihan: harus memilih arah mana, ditentukan oleh sebuah nilai (yang pada saat diprogram belum diketahui fixed-nya). Dalam kasus seperti ini, berapapun jumlah cabangnya dapat diselesaian dengan teknik Branching. Ada beberapa teknik antara lain :

If-Then-Elseif-Else, 
Select Case

q       Event Procedures
Dengan adanya EVENT yg dapat dimiliki oleh (terjadi pada) Object, maka kita dapat memanfatkan terjadinya Event tsb untuk memicu agar sebuah prosedur berjalan dengan sendirinya. Prosedur yg ditulis dengan memanfaatkan suatu Object_Event tsb disebut Event Procedures / Event Driven / Event Handler. Mungkin prosedur Event itu dapat dikatakan sebagai “tukang mengotomatiskan” jalannya program.
Pemrogram tidak boleh : tidak mengenal Event dari berbagai Object.

q       Controls
Berbagai Alat Kontrol (Controls) dapat diberlakukan di Sheet maupun di UserForm
Di sheet, Control dapat dipakai secara sederhana tanpa pemrograman. Dengan cara ini sudah banyak hal yg dapat dimudahkan. Tetapi bila kita menguasai bahasa pemrogramannya tentu kemampuan controls tsb akan menjadi lebih luas lagi.
Controls dapat pula dibuat dan dipergunakan di suatu UserForm. Pemakaian Controls di UserForm mutlak harus disertai pemrogramannya. Beberapa Control Standard yg telah disediakan oleh Excel/VBA:
CommandButton,  TextBox, ListBox, ComboBox, CheckBox, OptionButton, ToggleButton, SpinButton,  Label, Image.
Diluar itu kita masih dapat menambahkan control-control lain sesuai keperluan. Selama filenya tersedia di komputer kita.
VBA adalah bahasa pemrograman yang berorientasi object  dan terstruktur. Antar prosedur dapat saling minta bantuan prosedur lain. Prosedur-prosedur kecil saling bekerja sama membentuk Module agar memiliki kemampuan besar, antar module saling bekerja sama membentuk kemampuan yang lebih hebat lagi. Sementara itu penulisan code di tiap prosedur juga ada aturan ada strukturnya. Penyusunan secara modular ini banyak keuntungannya, misal kemudahan perawatan dan pengembangannya.

“Sekilas Tentang VBA” yg baru saja Anda baca itu saya kira sudah hampir mencakup seluruh kerangka yang ada. Selanjutnya tinggal mendalami tiap-tiap butirnya. Berhubung berExcel berarti berkutat di tiga hal utama: Book, Sheet dan Range/Cells, maka barangkali kita dapat mendahulukan mendalami pasal dan ayat yg mengatur workbuk, worksit dan cell. Bagaimana cara mengakses, merujuk, mengisi, memindah, menyalin, menghapus, menSelect, mengaktivate,  membuka menutup tiga object utama Excel itu. Tentu saja sambil mempelajari bagian/butir lain. Jangan segan membaca Help. Kalau perlu file-file Help-nya itu dicopy saja ke folder khusus. Kita dapat membukanya tanpa menjalankan Excel & VBA-nya.
Untuk belajar VBA-Excel Anda perlu sedikit modal yaitu memahami O/S Windows secara standar, memahami Excel paling tidak secara standar pula. Satu lagi hal kecil: Anda harus mengetahui maksud dan keinginan Anda, serta dapat menjabarkan keinginan tsb, paling tidak kerangkanya:
§         Sesuatu (yang jelas)
§         yang dulunya cuma begitu (juga jelas)
§         ingin dijadikan begini (juga jelas).
Bila salah satu dari tiga urusan yang harusnya jelas itu ternyata belum jelas bagi Anda, maka programnya pun, bila jadi, jangan jangan juga tidak begitu jelas asupan maupun keluarannya.

Ada yang ingin menambahkan ?


Label: ,