MS. Excel Visual Basic for Application (VBA – Macro) Daftar ISI Microsoft® Excel VBA Macro Contents I. Persiapan......................................................................................................................................... 4 Developer Ribbon ........................................................................................................................ 4 Macro Security ............................................................................................................................. 5 Macro Enabled Workbook (.xlsm) ................................................................................................ 5 II. Recording Macro ............................................................................................................................. 7 Overview ......................................................................................................................................... 7 Record Macro .............................................................................................................................. 7 Manage Macro ............................................................................................................................ 8 Relative References ..................................................................................................................... 9 Edit Macro ................................................................................................................................... 9 III. VBE, Module & Procedures ........................................................................................................ 11 Overview ....................................................................................................................................... 11 Mengakses VBE.......................................................................................................................... 11 Module ...................................................................................................................................... 12 Procedures ................................................................................................................................ 14 IV. Object & Addressing .................................................................................................................. 15 Overview ....................................................................................................................................... 15 V. Object Addressing ...................................................................................................................... 16 Property Format ............................................................................................................................ 19 Overview ....................................................................................................................................... 19 VI. Format menggunakan .Address .................................................................................................. 19 With … End With ........................................................................................................................ 20 Overview ....................................................................................................................................... 20 Penggunaan With.. End With ..................................................................................................... 20 VII. Formula R1C1 ............................................................................................................................ 22 Overview ....................................................................................................................................... 22 Penggunaan R1C1 ...................................................................................................................... 22 VIII. Variable ..................................................................................................................................... 24 Copyright © Hery Purnama Halaman 1 MS. Excel Visual Basic for Application (VBA – Macro) Overview ....................................................................................................................................... 24 Fase Variable ............................................................................................................................. 24 Local Variable ............................................................................................................................ 24 Public Variable ........................................................................................................................... 26 Constant Variable ...................................................................................................................... 27 Object Variable .......................................................................................................................... 27 IX. Inputbox .................................................................................................................................... 30 Overview ....................................................................................................................................... 30 X. Penggunaan Inputbox ................................................................................................................ 30 Conditional If ................................................................................................................................. 32 Overview ....................................................................................................................................... 32 Penggunaan Conditional IF......................................................................................................... 32 UCASE Function ......................................................................................................................... 34 XI. User Defined Function (UDF)...................................................................................................... 36 Overview ....................................................................................................................................... 36 Pembuatan UDF ......................................................................................................................... 36 XII. Msgbox ...................................................................................................................................... 40 Overview ....................................................................................................................................... 40 Penggunaan Msgbox .................................................................................................................. 40 XIII. Anatomi Script & Project Password ............................................................................................ 42 Overview ....................................................................................................................................... 42 Anatomi script ........................................................................................................................... 42 Project Password ....................................................................................................................... 45 XIV. Subrutin & Error Handling .......................................................................................................... 47 Overview ....................................................................................................................................... 47 Penggunaan SUBRUTIN .............................................................................................................. 47 Penggunaan ERROR HANDLING .................................................................................................. 48 XV. Looping ...................................................................................................................................... 50 Overview ....................................................................................................................................... 50 Jenis Looping ............................................................................................................................. 50 For .. Next .................................................................................................................................. 50 Do... Loop .................................................................................................................................. 51 isEmpty function ........................................................................................................................ 52 Copyright © Hery Purnama Halaman 2 MS. Excel Visual Basic for Application (VBA – Macro) XVI. Object Form & Control ............................................................................................................... 53 Overview ....................................................................................................................................... 53 Form .......................................................................................................................................... 53 Toolbox...................................................................................................................................... 54 Lable .......................................................................................................................................... 55 Textbox ...................................................................................................................................... 56 Enabled = False .......................................................................................................................... 56 ComboBox ................................................................................................................................. 57 Command Button....................................................................................................................... 60 TabIndex Property ..................................................................................................................... 61 Text Property ............................................................................................................................. 61 Event & Private Sub ................................................................................................................... 62 XVII. Run Macro from Excel ................................................................................................................ 66 Overview ....................................................................................................................................... 66 Menambahkan Control Button Form di Sheet ............................................................................ 66 Copyright © Hery Purnama Halaman 3 MS. Excel Visual Basic for Application (VBA – Macro) I. Persiapan Overview Saya Hery Purnama Certified IT Trainer dari Bandung yang akan mengajarkan Anda secara step by step melalui buku ini terkait Excel VBA Macro. Macro adalah fasilitas yang disediakan Microsoft untuk memaksimalkan kinerja fitur dan lembar kerja excel, menggunakan macro bisa 2 cara yaitu dengan merekam (Recording) atau Scripting Manual, pada umumnya baik recording dan scripting manual digunakan bersama sama karena tidak semua aktifitas recording macro bisa menyelesaikan masalah automation Sebelum Anda memulai belajar Excel VBA Macro , alangkah baiknya jika anda mempersiapkan dahulu kelengkapan berikut ini Developer Ribbon Anda membutuhkan "Developer Ribbon" untuk membantu pekerjaan Macro Anda Excel 2007 : Office Button - Options - Popular - [Check] Show Developer tab In the ribbon Excel 2010/2013 : File - Options - Customize Ribbon - [Check] Developer Tab Copyright © Hery Purnama Halaman 4 MS. Excel Visual Basic for Application (VBA – Macro) Macro Security Selama proses pengerjaan Macro , anda harus melemahkan security macro Anda Tab Developer - Macro Security - Enabled all macros (not ....) Macro Enabled Workbook (.xlsm) Mulai Excel 2007 semua aktifitas macro harus disimpan dalam tipe macro enabled workbook (.xlsm) File - Save As - (Beri nama file) "topikvba" - (ganti type) Excel Macro - Enabled Workbook (.xlsm) Copyright © Hery Purnama Halaman 5 MS. Excel Visual Basic for Application (VBA – Macro) File tipe ini tidak berbeda dengan file xlsx lainnya hanya saja mendukung script macro Copyright © Hery Purnama Halaman 6 MS. Excel Visual Basic for Application (VBA – Macro) II. Recording Macro Overview Anda harus paham dahulu tahapan rekaman yang akan anda lakukan , hati hati ! setiap aktifitas akan direkam , maka pastikan aktifitas recording Anda dilakukan secara sistematis dan efektif, tidak ada salahnya Anda membuat catatan di secarik kertas mengenai langkah - langkah yang akan dilakukan atau simulasikan dahulu sebelum Anda merekam macro. Untuk kasus topikial ini Anda akan merekam aktifitas membuat tabel template berikut : Langkah yang paling efektif dalam recording adalah didahului dengan mengetikkan semua text/ content di setiap sel , setelahnya baru lakukan kegiatan formating (border, shading, font, column width , format currency , dll ) Record Macro Silahkan buka file topikvba.xlsm Tab Developer - Record Macro Pada kotak dialog record macro Copyright © Hery Purnama Halaman 7 MS. Excel Visual Basic for Application (VBA – Macro) Keterangan : Macro Name (tanpa spasi/ tanda baca/ angka didepan) , Shortcut (tekan keyboard SHIFT + Q , tanpa shortcut juga tidak apa apa ) , Store Macro in ( This workbook : Macro tersimpan dan hanya bisa dijalankan di file itu saja ,Personal Macro .. : Macro di simpan di Aplikasi Excel sehingga bisa dijalankan di semua file , New Workbook : Macro bisa dijalankan di sebuah file baru dengan syarat file dimana macro dibuat dalam kondisi terbuka), Description : (hanya keterangan, tidak harus diisi), Begitu tombol OK anda tekan, maka semua aktifitas anda terhadap aplikasi/ file/ sheet/ cell/ menu bahkan scrollbar akan terekam karenanya lakukan dengan hati hati Silahkan mulai merekam membuat table template seperti contoh kasus diatas Setelah table selesai anda buat rekamannya dalam macro, jangan lupa tekan "STOP Recording" Manage Macro Setelah merekam macro maka Anda bisa menjalankannya dengan menggunakan shortcut Ctrl+Shift+Q , coba jalankan disetiap sheet baru, dan table template hasil rekaman akan tampil Copyright © Hery Purnama Halaman 8 MS. Excel Visual Basic for Application (VBA – Macro) Untuk Manajemen (Run, Edit , Delete) setiap macro yang Anda buat silahkan akses Tab Developer - Macros Setiap kali Anda mengedit macro , Anda akan masuk ke area VBE (Visual Basic Editor). Anda akan memahami Script VBA yang terlihat pada next topikial Relative References Jika anda perhatikan, Setiap kali macro rekaman table template Anda jalankan , hasilnya berupa table yang selalu berada dalam posisi yang absolute (sama lokasi), jika Anda ingin hasil table yang tampil start pointnya tergatung anda menempatkan kursor , maka sebelum Anda "Record Macro" aktifkan dulu "Use Relative References" Edit Macro Gunakan tab Developer - Macro - pilih Edit , Anda akan masuk ke VBE (Visual Basic Editor), untuk bisa mengedit anda harus memahami VBA Script , Setiap macro yang direkam hasilnya adalah sebuah procedure di VBA yang diawali dengan SUB nama_prosedur .... diakhiri dengan END SUB . Copyright © Hery Purnama Halaman 9 MS. Excel Visual Basic for Application (VBA – Macro) Anda bisa mencoba menyisipkan perintah kecil berikut di awal statement msgbox "Template akan dibuat, OK untuk lanjut !" Jalankan Script dengan F5 , Jika ingin kembali ke Excel klik icon Excel di kanan atas Editor Copyright © Hery Purnama Halaman 10 MS. Excel Visual Basic for Application (VBA – Macro) III. VBE, Module & Procedures Overview VBE (Visual Basic Editor) adalah tool di Excel yang digunakan untuk mengetikan script VBA Macro Anda, Module adalah tempat dimana Anda mengetikkan Prosedur UMUM, Procedures adalah sekumpulan perintah sequential/berurut yang ingin diproses untuk mencapai target tertentu , procedure tidak harus memiliki nilai balikan, prosedur terdiri 2 kelompok (UMUM & KHUSUS) Mengakses VBE Masuk ke area VBE banyak caranya, salah satunya melalui tab Developer - Visual Basic Di dalam VBE ada 3 area utama yang telah muncul , 1) Area Project Explorer setiap file excel akan dianggap sebagai 1 project, macro yang anda rekam secara default dianggap sebagai Procedure Umum dimana akan diletakkan didalam Module , 2) Area Properties , setiap object akan memiliki properti termasuk juga module, anda bisa merubah nama module dibagian properties , Copyright © Hery Purnama Halaman 11 MS. Excel Visual Basic for Application (VBA – Macro) 3) Area Editor adalah area lembar kerja progremmer, dimana anda membuat/edit script anda Module Module adalah tempat dimana Anda meletakkan / mengelompokkan semua prosedur UMUM yang Anda buat, 1 module bisa memiliki hanya 1 atau lebih dari 1 prosedur umum, dengan kata lain tidak ada ketentuan khusus mengenai bagaimana Anda menempatkan prosedur di dalam module, semua tergantung bagaimana nantinya anda ingin me-manaje prosedur umum Anda hingga mudah di kelola kembali di kemudian hari Silahkan buat 1 buah Module Baru : Klik Kanan Modules - Insert - Module Copyright © Hery Purnama Halaman 12 MS. Excel Visual Basic for Application (VBA – Macro) Berikan Nama Module : mod_object melalui property name dibawah Copyright © Hery Purnama Halaman 13 MS. Excel Visual Basic for Application (VBA – Macro) Double click module mod_object untuk membuka lembar editor kosong disebelah kanan layar Procedures Prosedur Terbagi 2 : 1) Prosedur Umum (diletakkan dimodule, ditandai dengan penulisan SUB nama_prosedur ... End Sub) secara sederhana adalah prosedur yang fokus pada perintah perintah dalam prosedur untuk mencapai target , sedangkan pelaku/pemicu dijalankannya prosedur tersebut dipikirkan belakangan ) 2) Prosedur Khusus ( ditandai dengan penulisan Private Sub objectName_event ... End Sub , berbeda dengan prosedur umum, prosedur khusus haruslah ditentukan dahulu object apa yang jadi pelaku/ pemicu dijalankannya sebuah prosedur, baru setelahnya Anda bisa fokus pada pembuatan perintah perintah di dalam prosedur untuk mencapai target tertentu) Untuk topik ini ketikkan prosedur UMUM berikut pada module mod_object Copyright © Hery Purnama Halaman 14 MS. Excel Visual Basic for Application (VBA – Macro) IV. Object & Addressing Overview Setiap Object memiliki properti yang bisa dimanipulasi dan sebuah object bisa juga diperintah untuk melakukan sesuatu, contoh Manusia.tangan.jari = 5 (artinya munusia punya properti tangan dengan jumlah jari 5 ) atau bisa juga Manusia.tangan.pukul (artinya manusia memliki tangan dan diperintahkan untuk memukul , memukul adalah action/methode) . Artinya 2 elemen penting dari sebuah object adalah Object memiliki Properties yang bisa dimanipulasi dan object memiliki Methode untuk diperintahkan bertindak , perhatikan script hasil rekam macro proc_template sebelumnya Range("A1").Select (.Select adalah methode dari object sel A1, atau perintah agar kursor diposisikan di A1) Activecell.value = "REKAPITULASI...." (.value adalah properti dari object Activecell, atau perintah agar isi dari sel yang aktif dimanipulasi nilainya menjadi "REKAPITULASI ...") Perhatikan perbedaan penulisannya, properti selalu diakhiri "=" , sedangkan methode tidak Perhatikan juga saat Anda menekan titik setelah mengetik object akan muncul "code hint/ bantuan" , jika methode akan terlihat beruapa icon hijau , sedangkan jika property akan terllihat berupa icon telunjuk Copyright © Hery Purnama Halaman 15 MS. Excel Visual Basic for Application (VBA – Macro) Hirarki Object Excel meliputi : Object Application Excel - Workbooks - Worksheets (Range/Cells/Columns/Rows/Activecell) Selain Object Excel , Anda nantinya juga akan bekerja dengan Object VBA, Object Form dan Object Active X Object Addressing Memahami object, Property dan Methode dapat mudah Anda lakukan dengan mengenal "addressing" Absolute Address ketikkan script berikut untuk mengaktifkan object sheet "REKAP" lalu memposisikan kursor di sel "A5". Sel A5 adalah object yang memiliki absolute address karena lokasinya tetap/ fixed (selalu di A5) (Mohon ganti dahulu nama sheet1 di excel yang telah berisi hasil table template menjadi "REKAP") Copyright © Hery Purnama Halaman 16 MS. Excel Visual Basic for Application (VBA – Macro) Jalankan dengan tekan F5 , lalu kembali ke Excel dan perhatikan sheet REKAP aktif dan kursor di A5 Relative Address Ketimbang nanti Anda menuliskan alamat absolute berulang kali di dalam prosedur, lebih baik jika dikombinasikan dengan Relative Address (menggunakan object Activecell dan properti offset(...)). Seperti script terlihat berikut , dimana Anda perintahkan agar pengisian nilai NIP dimulai dari sel yang sedang aktif ("A5") lalu dilanjutkan mengisi sel sel ke arah KANAN namun dengan membuat "A5" sebagai titik sel acuan Offset(rowIndex, colindex) Ketentuan offset , jika negatif maka me-refer ke kiri atau ke atas dan jika positif maka me-refer ke kanan atau ke bawah Activecell.offset(0,1).value (Mengisi sel loncat 1 kolom ke kanan (yaitu B5) dari acuan sel aktif (A5) sedangkan secara row tetap diposisinya atau tidak turun ke bawah) 'isi nip (Cara memberikan komen di script dengan kutip satu ' ) " _ " (Underscore adalah cara memotong script di VB) Jalankan kembali dengan F5 lalu lihat hasilnya di sheet REKAP Copyright © Hery Purnama Halaman 17 MS. Excel Visual Basic for Application (VBA – Macro) Copyright © Hery Purnama Halaman 18 MS. Excel Visual Basic for Application (VBA – Macro) V. Property Format Overview Setiap objek memiliki sekelompok properti untuk kebutuhan formating, seperti layaknya pekerjaan memformat Anda di sel Excel, Cara mengisi nilai dari setiap properti tersebut tentu akan berbeda beda, Anda membutuhkan referensi dari Help menu atau google untuk mencari cara megisi nilai properti , sebagai contoh untuk property ColorIndex anda menggunakan warna Index dari 0 - 56 Format menggunakan .Address Penggunaan properti .Address dibutuhkan untuk mendapatkan referensi sel , biasanya dibutuhkan jika Anda ingin mengetahui Alamat sel dari sebuah Relative Address yang Anda buat Coba Tambahkan Script berikut dalam prosedur Properti .numberFormat juga digunakan untuk date, contoh : Activecell.numberFormat = "dd-mm-YY" Copyright © Hery Purnama Halaman 19 MS. Excel Visual Basic for Application (VBA – Macro) VI. With … End With Overview With ... End with digunakan untuk menyederhanakan penulisan object atau properti yang berulang kali dilakukan , sebenarnya perintah ini tidak perlu dilakukan karena tidak berpengaruh terhadap alokasi momori yang digunakan, pemanfaatannya lebih kepada mempermudah programmer dalam menulis script saja Penggunaan With.. End With Edit script dengan menambah With .. End With pada object activecell yang berulang Copyright © Hery Purnama Halaman 20 MS. Excel Visual Basic for Application (VBA – Macro) Perhatikan highlight kuning adalah object yang pada awalnya ditulis berulang kali dan kini telah dihilangkan perulangannya dengan With .. End with Copyright © Hery Purnama Halaman 21 MS. Excel Visual Basic for Application (VBA – Macro) VII. Formula R1C1 Overview Jika Anda perhatikan hasil sementara Total Gaji adalah berupa angka akhir dikarenakan proses kalkulasi dilakukan di VBA , Bagaimana jika Anda ingin menginjeksi formula ke dalam sel total gaji, jawabnya gunakan metode R1C1 , metode ini mirip dengan offset dimana ada sel acuan yang digunakan. Contoh jika anda ingin mereferensikan 1 kolom sebelah kiri dari acuan sel yang akan diinjeksi formula , maka "=RC[-1]" artinya Row dalam posisi fixed/ tidak turun, sedang Column refer ke 1 kolom ke arah kiri (negatif) dari sel acuan. Untuk kasus Total Gaji maka R1C1 nya adalah "=RC[-3]+RC[-2]-RC[-1]" Penggunaan R1C1 Silahkan edit script Anda pada bagian total gaji dengan metode R1C1 berikut Hasilnya setelah dijalankan dengan F5 Copyright © Hery Purnama Halaman 22 MS. Excel Visual Basic for Application (VBA – Macro) Copyright © Hery Purnama Halaman 23 MS. Excel Visual Basic for Application (VBA – Macro) VIII. Variable Overview Variable digunakan untuk menampung nilai sementara di memori, bermanfaat untuk penggunaan data/nilai yang berulang kali diminta, menyederhanakan referensi sebuah object addressing, memberikan efisiensi penggunaan memori saat mengolah data. Jenis Variable meliputi (Local Variable, Public Variable, Constant Variable, Object Variable), Variable pada beberapa kondisi perlu didefinisikan tipe data nya terutama jika terkait pengolahan data angka dan tanggal. Tipe variable diantaranya (string, int , long, single, double, date, range, worksheet, dan lainnya) setiap tipe memiliki ukuran yang berbeda dalam alokasi memori Fase Variable Tiga fase pembuatan variable yang harus Anda ingat selalu 1) Fase Pendefinisian tipe variable jika dibutuhkan 2) Fase Pengisian Variable di memori (bisa nilai/ object) 3) Fase Distribusikan isi variable (dari memori dijatuhkan ke target object, contoh : diisikan ke sel di sheet) Local Variable Adalah variable yang semua fasenya (definisi, isi, distribusi ) dilakukan didalam prosedur yang sama dan hanya bisa digunakan juga di prosedur tersebut atau tidak bisa lintas prosedur, contoh seperti berikut Copyright © Hery Purnama Halaman 24 MS. Excel Visual Basic for Application (VBA – Macro) Setelah F5 tentu saja hasil tidak berbeda dengan sebelumnya, yang membedakan adalah prosesnya yang lebih efisien karen ditampung dalam variable yang telah terdefinisikan Manfaat distribusi bisa terlihat saat nilai dari variable tersebut dibutuhkan untuk dipanggil lagi di kondisi , contoh coba sisipkan Msgbox dibagian akhir (sebelum End Sub) seperti script berikut Copyright © Hery Purnama Halaman 25 MS. Excel Visual Basic for Application (VBA – Macro) Simbol "&" digunakan untuk concatenate di VBA atau cara menggabungkan data String dengan data Variable Public Variable Variable jenis ini digunakan apabila nilai/object yang disimpan didalam variable akan digunakan lintas prosedur / prosedur lain, contoh Pajak PPH yang akan digunakan di beberapa prosedur, apabila variable PPH didefinisikan sebagai local variable maka masing masing prosedur akan memiliki variable PPH yang tidak terkait satu sama lain Copyright © Hery Purnama Halaman 26 MS. Excel Visual Basic for Application (VBA – Macro) Constant Variable Adalah variable yang nilainya constant/ tetap atau tidak dapat diubah kembali, Anda akan mempelajarinya saat masuk topik Msgbox nanti Object Variable Adalah variable yang bukan menyimpan value tapi justru menyimpan object juga beserta valuenya, analogi sederhana seperti sebuah ember yang bukan berisi air tapi Copyright © Hery Purnama Halaman 27 MS. Excel Visual Basic for Application (VBA – Macro) ember yang berisi botol yang didalam botol ada air , variable object biasanya dibuat untuk menyederhanakan akses terhadap sebuah object yang addressing-nya cukup panjang dalam penulisan referensinya sebagai contoh misalnya anda ingin mengakses sebuah nilai dari sel yang ternyata ada di file lain , maka proses pemetaan alamat referensinya akan terhitung panjang karena mencakup workbook.worksheet.range(...) Pada kasus ini Anda akan menyederhanakan penulisan object format sel yang berisi address, silahkan edit script anda seperti berikut Pengisian Object variable menggunakan "SET", sedangkan Proses distribusi nilai dilakukan dibagian bawah script seperti berikut Copyright © Hery Purnama Halaman 28 MS. Excel Visual Basic for Application (VBA – Macro) Jalankan kembali dengan F5, hasil tetap sama tentunya dengan sebelumnya, hanya script anda lebih efisien dalam mereferensikan sebuah object address Copyright © Hery Purnama Halaman 29 MS. Excel Visual Basic for Application (VBA – Macro) IX. Inputbox Overview Inputbox adalah salah satu function di VBA yang berguna sebagai media input, tidak dsarankan sebagai fasilitas entri karena sifatnya yang bergerak maju atau tidak bisa kembali ke input sebelumnya sampai proses selesai, inputbox cenderung sebagai media untuk input parameter / criteria seperti pencarian data atau range halaman yang akan di print Penggunaan Inputbox sekalipun tidak disarankan, pada kasus ini kita akan menggunakan inputbox sebagai media untuk entri data, silahkan ubah script Anda seperti berikut pada bagian fase isi variable Copyright © Hery Purnama Halaman 30 MS. Excel Visual Basic for Application (VBA – Macro) Jalankan (F5) dan lihat hasilnya, kotak dialog input untuk isi data muncul Copyright © Hery Purnama Halaman 31 MS. Excel Visual Basic for Application (VBA – Macro) X. Conditional If Overview Conditional IF digunakan untuk mengambil keputusan dari satu atau beberapa kriteria Penggunaan Conditional IF Contoh Pada kasus ini Gaji tidak lagi diisi manual tapi didapatkan dari informasi pada Jabatan dengan ketentuan : JIKA Jabatan = "STAFF" , GAJI = 3000000 JIKA Jabatan = "SUPERVISOR" , GAJI = 5000000 JIKA Jabatan = "MANAGER" , GAJI = 7000000 jabatan lainnya , GAJI = 0 Solusinya adalah anda harus melakukan perubahan script pada fase pengisian variable vargaji (dengan tidak lagi menggunakan inputbox), silahkan edit seperti berikut : Copyright © Hery Purnama Halaman 32 MS. Excel Visual Basic for Application (VBA – Macro) Alternatif lain selain IF anda bisa juga menggunakan "Select Case " , seperti berikut Copyright © Hery Purnama Halaman 33 MS. Excel Visual Basic for Application (VBA – Macro) UCASE Function Untuk handling permasalahan case sensitif saat user mengisi jabatan , maka gunakan UCASE function (Uppercase), kenapa Ucase ? karena anda mengecek kriteria jabatan dalam IF menggunakan Uppercase (STAFF, SUPERVISOR, MANAGER) Coba jalankan kembali (F5) dan lihat hasilnya, dimana gaji tidak lagi diisi manual dengan inputbox tapi telah terisi otomatis Copyright © Hery Purnama Halaman 34 MS. Excel Visual Basic for Application (VBA – Macro) Copyright © Hery Purnama Halaman 35 MS. Excel Visual Basic for Application (VBA – Macro) XI. User Defined Function (UDF) Overview Anda bisa membuat function sendiri untuk memudahkan anda dalam mengakses dan menggunakan sebuah proses , perbedaan dengan prosedur adalah function selalu membalikkan nilai, sedangkan prosedur tidak selalu , karenanya dalam membuat sebuah function anda akan memerlukan variable INPUT untuk parameter dan variable OUTPUT untuk menampung nilai balikan/ nilai hasil. varOutput(varinput1 as type , varinput2 as type) as typeOutput , variable OUTPUT dalam function sering kita kenali sebagai nama function itu sendiri. Contoh pada kasus ini adalah ketimbang anda membuat script pencarian gaji yang mengandung IF berulang kali di beberapa prosedur maka lebih baik Anda membuat sebuah UDF (function sendiri) yang diletakkan terpisah dan bisa dipanggil di berbagai prosedur atau area lainnya termasuk di Sheet Anda, lihat contoh berikut Buat module baru dengan nama mod_function Pembuatan UDF Setelah module baru anda, kini Anda bisa mulai membuat function Anda sendiri didalam module mod_function seperti berikut Copyright © Hery Purnama Halaman 36 MS. Excel Visual Basic for Application (VBA – Macro) Setelah function jadi, anda bisa mencobanya dulu di sheet excel sebelum menyisipkan function ke dalam Script prosedur Anda Setelah function yang anda coba di sheet berhasil , sekarang masukkan kedalam script untuk menggantikan conditional IF yang anda buat sebelumnya untuk mendapatkan Gaji, silahkan buka kembali mod_object yang berisi prosedur proc_object Copyright © Hery Purnama Halaman 37 MS. Excel Visual Basic for Application (VBA – Macro) Jalankan kembali (F5) dan lihat hasilnya di sheet Untuk latihan , mungkin anda bisa mencoba membuat function untuk cari total gaji seperti berikut, buka kembali mod_function Copyright © Hery Purnama Halaman 38 MS. Excel Visual Basic for Application (VBA – Macro) lalu masukkan ke dalam prosedur di mod_object Copyright © Hery Purnama Halaman 39 MS. Excel Visual Basic for Application (VBA – Macro) XII. Msgbox Overview Msgbox mirip dengan inputbox yang merupakan object VBA dalam bentuk kotak dialog, msgbox memiliki beberapa tipe kotak dialog dan setiap tipe kotak dialog memilki kombinasi tombol tombol , setiap tipe kotak dialog ataupun tombol sebenarnya memiliki nilai dan ini yang disebut sebagai Constant Variable yaitu variable yang nilainya tidak bisa diubah. Penggunaan Msgbox Dengan adanya constant variable tadi maka setiap tombol yang berisi nilai constant bisa dikondisikan nilainya menggunakan conditional IF , contoh pada kasus berikut kita akan membuat kotak dialog yang menanyakan apakah proses pengisian data rekap pegawai akan diproses atau tidak, jika pilihan tombol OK maka prosedur dijalankan seperti biasanya, jika cancel maka prosedur dihentikan "EXIT SUB", silahkan sisipkan script anda seperti berikut : di bagian atas prosedur (sisipkan script pembuka IF untuk kondisi "OK") Lalu lanjut di bagian bawah prosedur (sisipkan script Else untuk kondisi "Cancel") Copyright © Hery Purnama Halaman 40 MS. Excel Visual Basic for Application (VBA – Macro) Jalankan (F5) dan perhatikan kotak msgbox yang muncul diawal proses Copyright © Hery Purnama Halaman 41 MS. Excel Visual Basic for Application (VBA – Macro) XIII. Anatomi Script & Project Password Overview Topikial Anatomi ini tidak membahas script namun hal non teknis dan tidak baku, pada umumnya hanya merupakan etika pengelompokan area script yang dipahami para programmer. Anatomi script Pada umumnya ada 4 area teridentifikasi dalam penulisan script di VBA 1) Area Definisi Variable & Error Handling 2) Area Eksekusi program utama 3) Area Exit Program Utama 4) Area Subrutin Untuk area "exit program" dan area "subrutin" mohon tambahkan dahulu script berikut dibagian bawah, penjelasan tentang subrutin dan error handling pada topik berikutnya Copyright © Hery Purnama Halaman 42 MS. Excel Visual Basic for Application (VBA – Macro) Berikut pembagiannya secara menyeluruh Copyright © Hery Purnama Halaman 43 MS. Excel Visual Basic for Application (VBA – Macro) Copyright © Hery Purnama Halaman 44 MS. Excel Visual Basic for Application (VBA – Macro) Project Password Untuk melindungi script anda maka anda bisa memberikan password pada project VBA anda seperti berikut Copyright © Hery Purnama Halaman 45 MS. Excel Visual Basic for Application (VBA – Macro) 1) Klik kanan VBAProject (topikvba.xlsm) - vbaproject properties 2) Pindah ke tab Protection - [check] Lock project for viewing - isikan password anda Silahkan simpan dan tutup file topikvba.xlsm tersebut, lalu buka kembali file dan silahkan coba akses module program vba anda Copyright © Hery Purnama Halaman 46 MS. Excel Visual Basic for Application (VBA – Macro) XIV. Subrutin & Error Handling Overview SUBRUTIN adalah program cadangan yang dipanggil program utama hanya jika diperlukan , biasanya pada kasus penggunaan IF dimana ada alternatif pengambilan keputusan bercabang, setiap keputusan dibuatkan subrutinnya, manfaat lainnya apabila program cadangan tersebut dibutuhkan dikondisi lain oleh program utama maka dapat di gunakan berulang kali. Sedangkan Error handling dibutuhkan untuk mencegah user masuk ke debug mode saat terjadi Error, namun selama proses pengembangan sangat disarankan "error handling" tidak diaktifkan karena nanti anda tidak bisa mendapat petunjuk baris script yang error. Error handling anda aktifkan jika semua program sudah complete anda test Penggunaan SUBRUTIN Seperti yang telah anda buat pada tutor sebelumnya subrutin diletakkan diantara Exit SUB dan End Sub karena sifatnya yang merupakan program cadangan sehingga tidak mungkin dimasukkan dalam area "Eksekusi program utama", aturan penulisan subrutin adalah nama_label_Subrutin : prosedur dari subrutin End Nantinya memanggil subrutin tersebut dengan perintah Goto nama_label_subrutin Copyright © Hery Purnama Halaman 47 MS. Excel Visual Basic for Application (VBA – Macro) Pada kasus ini dibuat subrutin pesanerror , dimana subrutin ini dijalankan hanya jika terjadi error Penggunaan ERROR HANDLING Pada subrutin pesanerror yang telah dibuat terdapat baris script resume next artinya apabila terjadi debug error pada sebuah baris maka baris error tersebut akan dihandling dengan msgbox "Terjadi error " dan setelahnya baris baris berikutnya tetap akan dieksekusi. Namun terkadang Anda menghendaki program tidak lagi menjalankan script apabila terjadi suatu error pada salah satu baris, maka yang anda lakukan adalah dengan memberikan exit sub (untuk hentikan keseluruha program) lihat contoh script Lalu apa yang memicu subrutin error handling ini dijalankan nantinya ?, tentunya anda harus menambahkan script On Error Goto pesanerror dibagian atas prosedur agar bisa memantau setiap baris dari awal sampai akhir prosedur Copyright © Hery Purnama Halaman 48 MS. Excel Visual Basic for Application (VBA – Macro) Copyright © Hery Purnama Halaman 49 MS. Excel Visual Basic for Application (VBA – Macro) XV. Looping Overview Looping diterjemahkan secara gampang adalah printah untuk melakukan kegiatan perulangan dalam sekelompok data array baik dengan sebuah kondisi atau tanpa kondisi untuk akhirnya mencapai sebuah target hasil tertentu. Jenis Looping Secara garis besar Looping dibagi atas 2 kelompok besar, yaitu 1) For ...(batas perulangan oleh nilai angka) 2) Do/ While ... (batas perulangan berdasarkan kondisi dan target) Analoginya jika For (cucilah rambutmu 3x, artinya bersih tidak bersih perulangan cuci rambut hanya dilakukan 3x) , sedangkan jika do/while (Cucilah rambutmu sampai bersih, artinya perulangan cuci rambut tidak akan berhenti sampai rambut bersih) For .. Next Pada kasus sederhana ini anda akan memberikan penomoran urut kolom otomatis dibagian atas tabel rekap Copyright © Hery Purnama Halaman 50 MS. Excel Visual Basic for Application (VBA – Macro) Hasilnya setelah run (F5) Do... Loop Untuk kasus ini , Anda perintahkan program untuk "looping" mencari baris yang masih kosong sebelum proses isi data baru ke dalam sel dilakukan, dengan kata lain jumlah looping akan ditentukan oleh ditemukannnya sel kosong atau tidak, untuk kasus ini anda menggunakan "do .. loop until" Copyright © Hery Purnama Halaman 51 MS. Excel Visual Basic for Application (VBA – Macro) isEmpty function isEmpty adalah VBA function dengan nilai balikan Boolean (true/false) , digunakan untuk mengecek nilai kosong sebuah object Copyright © Hery Purnama Halaman 52 MS. Excel Visual Basic for Application (VBA – Macro) XVI. Object Form & Control Overview Dari 15 tutorial anda telah mengenal object excel serta object VBA seperti inputbox serta mengenal juga prosedur umum. Kini saatnya Anda pelajari Object Form , dimana kini anda mengenal prosedur khusus (Private sub ) yang sangat terkait kepada object pelakunya serta pemicunya terlebih dahulu ketimbang menyusun prosedur dan target dari prosedur layaknya di prosedur umum Form Untuk membuat object form , klik kanan module - insert - form dan anda akan melihat object form tampil dilayar Anda Yang perlu anda cermati adalah pada object form akan banyak terhubung dengan penggunaan properties dan toolbox, silahkan ubah properti name dan caption dari object form seperti pada gambar. Jika toolbox / properties panel hilang anda dapat menampilkan kembali dari menu View Copyright © Hery Purnama Halaman 53 MS. Excel Visual Basic for Application (VBA – Macro) dalam object form yang paling penting adalah setiap object harus di berikan nama , dalam kasus ini anda memberikan nama di property name : frmpegawai, sedangkan properti caption penggunaannya hanya untuk label/ title saja, untuk properti lainnya bisa anda ketahui seiring waktu Toolbox Toolbox akan sangat membantu dalam menambahkan object lain ke dalam object form Anda, anda bisa menampilkan toolbox melalui menu view Copyright © Hery Purnama Halaman 54 MS. Excel Visual Basic for Application (VBA – Macro) Lable Object pertama yang anda tambahkan adalah lable, gunakan Toolbox untuk membuat lable Anda , khusus lable Anda hanya harus mengubah properti caption sedangkan properti Name tidak perlu karena lable tidak akan Anda programming, buat seperti berikut Copyright © Hery Purnama Halaman 55 MS. Excel Visual Basic for Application (VBA – Macro) Textbox Object ini penting untuk Anda berikan nama, pada kasus ini Anda membuat object textbox untuk dengan properti name masing masing ( txtnip, txtnama, txtkota, txtdept, txtgaji, txttunjang, txtpotong, txttotal ) , khusus jabatan anda akan menggunakan object Combobox Enabled = False sehubungan Gaji dan Total Gaji terisi otomatis , maka textbox haruslah tidak bisa diakses user, karenanya anda harus mengubah property Enabled = False untuk txtgaji dan txttotal Copyright © Hery Purnama Halaman 56 MS. Excel Visual Basic for Application (VBA – Macro) ComboBox Untuk menampilkan list pada combo bisa dengan manual atau mengambil source dari range di sheet, silahkan buat dahulu sheet "master" dan buat table dengan nama "tbjabatan" Copyright © Hery Purnama Halaman 57 MS. Excel Visual Basic for Application (VBA – Macro) Kembali ke object form di VBE , gunakan toolbox untuk membuat object combobox dan beri nama cbojabatan Copyright © Hery Purnama Halaman 58 MS. Excel Visual Basic for Application (VBA – Macro) masih pada properti combobox, ubah properti rowSource : = tbjabatan, tbjabatan adalah nama table yang anda buat di sheet master Untuk melihat hasil sementara klik form dan jalankan (F5) Copyright © Hery Purnama Halaman 59 MS. Excel Visual Basic for Application (VBA – Macro) Command Button Selanjutnya anda akan membuat tombol menggunakan object commandButton di toolbox, silahkan buat dua tombol dengan property name (cmdtambah, cmdtutup) serta properti caption (Tambah , Tutup) seperti berikut Copyright © Hery Purnama Halaman 60 MS. Excel Visual Basic for Application (VBA – Macro) TabIndex Property Ketika anda menjalankan form dan coba mengisi data , perhatikan bahwa combobox jabatan terlewatkan (loncat) saat perpindahan control , silahkan anda mengatur ulang urutan tabulasi perpindahan control dengan properti tabIndex , anda bisa menyusun ulang di setiap object dengan urutan angka anda sendiri Text Property Sangat disarankan untuk object yang berisi angka diberikan default value , caranya yaitu dengan memberikan properti text = 0 , silahkan ubah Text Properti = 0 untuk object (txtgaji, txttunjang, txtpotong, txttotal). Anda bisa juga menggunakan value properti untuk mengisi default value Copyright © Hery Purnama Halaman 61 MS. Excel Visual Basic for Application (VBA – Macro) Event & Private Sub Event di cmdtambah Setelah object dan control didalam form telah anda buat, maka momen yang cukup penting adalah memberikan Event dan prosedur khusus (private sub), Pada prosedur khusus anda fokus dulu pada object yang akan jadi pemicu untuk menjalankan prosedur , contoh jika Anda ingin membuat prosedur untuk memasukkan/ menambahkan data dari Form ke sheet maka anda harus tahu object apa yang akan menyebabkan prosedur tambah itu jalan, jawaban logic nya tentu tombol tambah(cmdtambah). Silahkan double click tombol cmdtambah untuk masuk ke lembar editor VBE , lalu buat script seperti berikut Copyright © Hery Purnama Halaman 62 MS. Excel Visual Basic for Application (VBA – Macro) Event di cbojabatan Gaji jika anda ingat tidak diisi manual dan Anda sudah mempersiapkan function carigaji() sebelumnya, karenanya anda ingin setiap kali combobox cbojabatan dipilih salah satu listnya maka txtgaji akan terisi otomatis. Untuk itu anda akan menggunakan event Copyright © Hery Purnama Halaman 63 MS. Excel Visual Basic for Application (VBA – Macro) Change di cbojabatan yang menjalankan prosedur untuk isi txtgaji otomatis dengan memanfaatkan function carigaji(), silahkan double klik cbojabatan dan buat prosedur khusus dengan event Change seperti berikut Event di txttunjang , txtpotong Kenapa object txttunjang dan txtpotong perlu diberikan event ?, jawabannya ada pada function caritotal() dimana function ini melibatkan tunjangan dan potongan dalam mencari total gaji , sehingga apabila tidak diberi event maka setiap kali tunjangan atau potongan diupdate tidak akan merubah hasil , namun jika anda perhatikan bahwasannya prosedur yang akan diberikan ke txttunjang / txtpotong sebenarnya sama saja dengan yang ada cbojabatan , karenanya anda tidak perlu mengetikan ulang prosedur yang ada di cbojabatan cukup memanggilnya saja dengan call silahkan double click txttunjang / txtpotong, lalu ganti dengan event afterupdate dan sisipkan perintah call berikut Event di cmdtutup Untuk tombol Tutup (cmdtutup) berikan prosedur dengan event click (silahkan double click cmdtutup) , berikan script seperti berikut dalam prosedurnya Copyright © Hery Purnama Halaman 64 MS. Excel Visual Basic for Application (VBA – Macro) Copyright © Hery Purnama Halaman 65 MS. Excel Visual Basic for Application (VBA – Macro) XVII. Run Macro from Excel Overview Untuk membuka form ataupun menjalankan prosedur yang sudah anda buat dari Excel sheet tentu anda membutuhkan media berupa object button yang ada di Excel Sheet, silahkan kembali ke Excel Sheet "REKAP" lalu dari tab Developer - Insert - Buttom (Form Control), letakkan button di area sheet Menambahkan Control Button Form di Sheet Selanjutnya kembali ke area VBE dan buka mod_object buat prosedur baru proc_bukaform() seperti berikut Copyright © Hery Purnama Halaman 66 MS. Excel Visual Basic for Application (VBA – Macro) Kembali lagi ke Excel Sheet "Rekap" , klik kanan button - Assign Macro - Pilih macro "proc_bukaform" Demikian kiranya materi Excel VBA Macro, semoga bermanfaat Pengarang / Penulis Hery Purnama Certified IT Trainer www.inhousetrainer.net Copyright © Hery Purnama Halaman 67