Modul VBA
Modul VBA
VBA, yang merupakan singkatan dari Visual Basic for Applications, adalah sebuah bahasa pemrograman dikembangkan oleh Microsoft . Singkatnya, VBA adalah alat yang kita gunakan untuk mengembangkan program-program yang akan mengontrol Excel sehingga excel akan melakukan apapun yang kita perintahkan secara cepat dan akurat
Melakukan suatu pekerjaan yang berulang-ulang, contoh membikin konfirmasi, jika tanpa VBA mungkin kita harus membuat lampiran secara manual untuk tiap KPP, trus membuat surat juga untuk tiap KPP, abis itu juga mem-printnya, namun dengan VBA anda cukup menyediakan data serta template dari surat dan lampiran maka dengan satu kali klik seketika juga akan selesai Mengotomasikan suatu pekerjaan yang komplex, contoh membuat suatu laporan keuangan dari ledger, kalo tanpa VBA mungkin melibatkan banyak sekali pekerjaan namun dengan VBA pekerjaan tadi diringkas jadi satu program dan bisa dipakai untuk tahun berikutnya bahkan Data WP yang lain sepanjang format datanya telah disesuaikan
Membuat customize command yang kalo memakai excel melibatkan beberapa kali perintah, kemudian anda bikinkan pula tombol atau menu sehingga memudahkan kita dalam pekerjaan sehari2
Menciptakan fungsi baru, misalnya fungsi penghitungan PPh 25, atau mengubah angka menjadi terbilang (mis: 1250 menjadi seribu dua ratus lima puluh rupiah) Menciptakan Ad-in yaitu pelengkap dari excel yang bisa berupa menu2 yang tidak ada di excel, yang dapat dikomersialkan. Misalnya : ASAP Utilities, Power Utilities, dll Menciptakan satu aplikasi yang lengkap, beserta template, menu, toolbar, dialog box maupun Help yang lengkap, misalnya GL for excel, Audit for excel, dll
Macro recording
Untuk meng-otomasikan pekerjaan diexcel kita tidak perlu menjadi programmer VBA, kita bisa melakukan dengan Macro recording,kita bisa merekam step by step pekerjaan kita dan macro akan mengulanginya dengan persis dan jauh lebih cepat
Developer Ribbon
Makro recorder maupun VBE (visual basic editor) terdapat di ribbon developer, ribbon ini secara default tidak muncul , untuk memunculkannya kita lakukan cara sbb: 1. Klik Office button (Tombol bulat berlogo office di kiri atas excel) 2. Klik Excel Option 3. Pilih menu Popular, lalu Tick mark Show Developer tab in the Ribbon. 4. OK.
Developer Ribbon
1. Developer Ribbon 2. Tombol untuk
3.
4.
5.
6.
Record macros Tombol untuk menjalankan macro Tombol untuk menuju VB Editor Untuk menambahkan list, check box, dan control lainnya ke worksheet Untuk menangani file xlm, import & export, dll
5.
6.
7.
workbook aktif, lalu klik developer tab Klik Record Macro, Record Macro Dialog box akan muncul Isi nama dari makro, mis: Name_Date Klik shortcut key dan isi dengan Shift+N (makro bisa dijalankan dengan Ctrl+Shift+N) Macro bisa ditaruh di workbook ini, personal workbook atau workbook lain Description bisa diisi dengan keterangan, misalnya makro untuk nulis nama dan tanggal sekarang Klik OK
Menjalankan Macro
Pilih cell yang akan diterapkan macro bersangkutan
Klik Developer Tab
6.
yg akan dijalankan Klik untuk menjalankan macro Klik untuk menjalankan macro sambil debug Klik untuk mengedit macro di VB Editor Klik untuk mengedit properties dari macro seperti shortcut dan description Untuk memilih workbook yg berisi macro
Range("C4").Select
ActiveCell.FormulaR1C1 = "Nama Anda" Range("C5").Select ActiveCell.FormulaR1C1 = "=NOW()" Range("C4:C5").Select Selection.Font.Bold = True With Selection.Font .Size = 20 End With Range("D9").Select
ActiveCell.Select
ActiveCell.FormulaR1C1 = "nama anda" ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=NOW()"
ActiveCell.Offset(-1, 0).Range("A1:A2").Select Selection.Font.Bold = True
With Selection.Font
.Size = 20
Macro Security
Untuk bisa menjalankan macro maka setting yang pertama jangan di tick mark, untuk amannya pakai setting no. 2 yaitu disable all macros with notification, karena jika kita membuka file yg ada macronya maka kita akan diberi pilihan untuk mengenable atau mendisable kan macro tersebut
Saving Macro
Workbook yang
berisi macro harus disimpan dalam format Excel macro enabled workbook (.xlsm) supaya bisa diexekusi, kalo nggak maka macronya akan dihapus oleh excel
menulis kode di VBE (Visual Basic Editor) VBA terdiri dari Sub Prosedure (kumpulan kode yang melakukan aksi atas suatu obyek) serta Fungsi (kumpulan kode yang menghasilkan suatu nilai) VBA memanipulasi Obyek, didalam excel terdapat ratusan obyek yang dapat kita perintah atau kita ubah nilainya , contoh obyek yang paling sering kita pakai antara lain: Workbook, Worksheet, range, chart, dll Obyek dalam excel disusun secara hierarki, artinya didalam satu obyek bisa terdiri dari beberapa obyek yang lain, Obyek yang paling tinggi adalah aplikasi excel sendiri yang disebut Application. Didalam Application terdapat obyek lain antara lain seperti workbook obyek dan add-in obyek , didalam workbook obyek terdapat worksheet obyek, dst. Untuk menunjuk ke suatu range dapat dipergunakan cara sebagai berikut
Jika kita tidak menyebutkan secara rinci maka excel akan menganggap bahwa obyek yang dimaksud adalah yang aktif Jika kita tahu kalo book1.xlsx adalah workbook yang aktif maka kita cukup menulis
Worksheets(Sheet1).Range(A1)
Jika kita tahu kalo Sheet1 adalah sheet yang aktif maka kita cukup menulis Range(A1)
action yang akan dilakukan oleh obyek tersebut misalnya obyek workbook memiliki Open,Save Method Properties adalah setting yang dimiliki oleh Obyek, Misalnya Workbook memiliki properties Name,Path, Saved Events adalah peristiwa yang terjadi pada suatu obyek, misalnya workbook memiliki Before_save, Before_save, Activate event
VBA memiliki konstruksi seperti bahasa pemrograman modern
karena merupakan turunan dari bahasa Visual basic yang sangat terkenal, sehingga kita bisa melakukan banyak hal2 ajaib seperti membuat browser didalam excel atau pemutar film dan MP3
VB Editor
Macro yang kita buat via recorded macro sudah bisa kita jalankan, namun masih jauh dari sempurna karena Kondisi fixed jika ada error maka tidak jalan Tidak bisa berinteraksi dengan user, dll Oleh karena itu kita perlu memodifikasi macro tersebut dengan mengetik code secara manual dengan bantuan VBE (Visual Basic Editor)
3. Cara 3, Buka macro dialog box (Alt+F8), pilih macro yang mau diedit, lalu klik edit
VB Editor
1. Project Explorer window Project Explorer menampilkan semua workbook yang terbuka (termasuk hidden dan add-ins) dalam bentuk folder2, click tanda + untuk membukanya, didalamnya terdapat semua object seperti worksheet, Modules, userform & Class, klik 2x untuk menampilkan isi nya Shortcut untuk menampilkan Ctrl+R
2. Properties Window berisi setting untuk project, userform beserta control2nya, dan workbook & Worksheet
3. Code window
Biasa disebut juga Module windows, berisi semua VBA Code, semua Object di project akan memiliki code window masing2, Untuk membuka code yang berhubungan dengan object klik 2x object bersangkutan
6. Immediate window untuk menampilkan tekan Ctrl+G atau ViewImmediate Window command. Window ini biasa digunakan untuk eksekusi perintah langsung atau untuk fungsi debugging
Code Settings Auto Syntax Check menentukan apakah VBA akan mengecek kebenaran penulisan code setiap kali kita menulis satu baris kode, akan muncul peringatan mengenai apa yang salah dengan code kita dan kita bisa klik help untuk penjelasan lebih lanjut bagus buat pemula
Customizing VB Editor 01
Require Variable Declaration menentukan apakah setiap variabel perlu dideklarasikan dahulu sebelum eksekusi, akan menampilkan option explicit untuk tiap modul baru
Code Settings Auto List Member menampilkan secara otomatis sub object, methode, dan properties dari object yang kita ketik Auto Quick Info menampilkan informasi serta parameter dari fungsi yang kita ketik Auto Data Tips Menampilkan isi dari variabel pada saat ekseckusi/ running, hanya muncul saat break mode Auto Indent untuk indent setiap awal baris, baris berikutnya akan mengikuti indent diatasnya Tab Width lebar tiap kali indent/tab
Customizing VB Editor 01
Customizing VB Editor 01
Editing buat drag & Drop editing Default to Full Module View menentukan apakah semua Code akan berbagi dalam satu code window ataupun satu window tiap satu prosedur
Procedure Separator
Customizing VB Editor 02
Code Colors Determines the foreground and background colors used for the type of text selected in the list box.
Color Text List Lists the text items that have customizable colors. Foreground Specifies the foreground color for the text selected in the Color Text List. Background Specifies the background color for text selected in the Color Text List Indicator Specifies the margin indicator color.
Font
Size
Sample
Displays sample text for the font, size, and color settings.
Customizing VB Editor 03
Form Grid Settings/ untuk pembuatan user form Show Grid menentukan apakah grid akan ditampilkan dalam userform, hal ini untuk memudahkan dalam design Grid Units menentukan lebar grid (dlm pixel) Align Controls to Grid Otomatis akan meletakkan control ke grid yang terdekat/untuk mempermudah design Show ToolTips Displays ToolTips for the toolbar buttons.
Collapse Proj. Hides Windows Menentukan apakah jika folder di Project explorer ditutup juga akan ikut menutup code window yang bersangkutan
Customizing VB Editor 03
Edit and Continue Notify Before State Loss jika code error maka akan menampilkan peringatan tentang data/ variable yang direset pada saat eksekusi diteruskan
Error Trapping Untuk penanganan masalah error Break on All Errors semua error akan ditangani sistem (break mode) tidak perduli apakah ada error handle code atau error ada di Class Module Break in Class Module hanya akan ditangani oleh sistem jika terjadi di class module Break on Unhandled Errors hanya akan ditangani oleh sistem (break mode) jika tidak ada handle error code.
Compile Compile On Demand sebelum program running akan dicompile lebih dulu agar berjalan lebih cepat dan untuk melihat apakah ada error atau tidak Background Compile compiles akan dijalankan secara background
Customizing VB Editor 04
Windows disini akan didock/ ditempelkan di satu tepi dan tidak dapat dipindahkan kemana2, kalo di undock berarti
window akan bebas dipindahkan ke mana2 , hal ini berguna untuk menambah space pada waktu design
nama yang diinginkan yang mudah dimengerti dan dibedakan dengan project yg lain (unique) Project description juga sebaiknya diisi dengan penjelasan secukupnya Help file name dan helpid diisi jika project kita memiliki file help sendiri, kalau tidak sebaiknya dibiarkan saja (nilai default) Conditional compilation biasanya diisi untuk keperluan debugging
for viewing agar kode vba anda tidak bisa oleh orang lain Lalu diisi passwordnya dan Confirm Password Code VBA tetap bisa dijalankan namun tidak bisa dilihat codenya Untuk melihat code-nya maka kita harus memasukkan passwordnya
memunculkan menu, pilih insert->Module Atau pilih insert menu/ insert button dari toolbar lalu pilih module
melibatkan suatu aksi terhadap obyek lain atau melakukan sesuatu sementara fungsi adalah prosedure yang menghasilkan suatu nilai atau kumpulan nilai (array) Public artinya bisa diakses oleh sub lain diluar module ini, kalo private berarti Cuma bisa diakses oleh sub/function lain didalam module bersangkutan Kita juga bisa menulis secara manual untuk menambah prosedur
Bab III
Excel Obyek dan VBA Sub & Procedure
Intoducing Excel Object Model Merujuk ke Obyek VBA Sub dan Fuction Procedure
How to naming
Syntax
How to run
VBA adalah pemrograman yang Obyek oriented (OOP/Object Oriented Programming) artinya VBA mendefinisikan excel sebagai sekumpulan obyek2 yang memiliki methode dan properties serta event2 yang dapat dimanipulasi sedemikian rupa Obyek yang paling atas/ induk adalah excel itu sendiri yang dalam VBA disebut sebagai Application yang memiliki methods serta properties yang akan mengatur bagaimana excel tersebut dioperasikan Object excel memiliki obyek lain (turunan/ sub obyek) yaitu antar lain workbook, lalu workbook sendiri memiliki method dan properties sendiri serta memiliki sub obyek yaitu antara lain worksheets, dimana workshetts juga memiliki sub obyek yaitu al: range/cells
Application (Excel)
Window
Commandbar
Workbook
Worksheer
VB Project
Chart
Hyperlink
Range
member a.l: worksheet Worksheet memiliki sub object range Range memiliki object font, dst..dst.
Merujuk ke Object
Kita bisa merujuk ke suatu object dengan cara bertingkat,
misalnya Workbooks(book1.xlsx).Worksheets(sheet1).range(A1) Jika obyek sebelumnya tidak ditulis maka Excel mengasumsikan bahwa obyek yang aktif adalah yang dimaksud, jadi bila workbook yang aktif adalah book1.xlsx serta sheet yang aktif adalah sheet1 maka kita cukup menulis range(A1) Workbooks artinya sekumpulan (Collection) workbook yang terbuka pada saat ini, kalo worksheets juga berarti collection dari worksheet (tanpa s/jamak). Untuk merujuk ke worbook tertentu maka bisa dipakai nama dari workbook (book1.xlsx) atau index (1,2,3,.)
Contoh:
Sub ShowMessage() MsgBox Thats all folks!
value. Contoh:
Function CubeRoot(number)
End Sub
CubeRoot = number ^ (1 / 3)
End Function
pertama haruslah huruf Tidak boleh ada spasi atau titik (.) Tidak boleh ada karakter #, $, %, &, @,^, *, ! Karakter lain seperti /,?,<,>,-,+ bisa digunakan tapi bisa menimbulkan kebingungan karena merupakan operator jadi paling aman adalah hanya gunakan huruf,nomor dan underscore( _ ) Huruf besar sama huruf kecil dianggap sama, tapi biasakan untuk menggunakan huruf besar pada karakter pertama untuk lebih menguatkan arti Tidak boleh menyamai fungsi yang sudah ada di excel misalnya SUM, AVERAGE,FIND, dll serta jangan menyamai nama sel misalnya A1 atau R1C1 Jangan lebih dari 255 karakter Nama sebaiknya mencerminkan aksi/ tujuan dari sub/function misalnya: ProcessData, PrintReport, Sort_Array, or CheckFilename. Jangan hanya bersifat umum seperti: DoIt, Update, Fix, macro1, Macro2.
Sub ini bisa diakses oleh prosedure/function lain di semua module Sub ini hanya bisa diakses oleh sub/function di module yang sama Hanya digunakan di class module Variable yang ada didalam sub ini nilainya disimpan sehingga tidak berubah Variable atau sekumpulan variabel yang merupakan argumen dari sub, dipisahkan dengan koma, syntax: [Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
Klik didalam sub prosedure yang diinginkan, lalu klik menu RunRun Sub/UserForm , shortcut F5, atau klik tombol Run Sub/UserForm di toolbar Pilih list sub procedure di Macro dialog box lalu klik run Klik Toolbar/ribbon/quick access toolbar, Shape yang telah di assign dengan sub prosedur Dari Sub procedure lain Secara otomatis begitu membuka, menutup, mensave workbook , berpindah sheet, berpindah range, merubah isi cell tertentu, dll sesuai dengan events dari tiap object di excel Dari the Immediate window in the VBE. Ketik aja sub prosedur yang diinginkan dan tekan enter
Contoh
Sub panggil_fungsi() Dim cb, cbroot 'minta input dari user cb = InputBox("masukkan bilangan yg mo dicari akar pangkat tiga-nya") Debug.Print cb If cb <> "" Then cbroot = CubeRoot(cb) MsgBox cbroot Else Exit Sub End If End Sub
Contoh
Function CubeRoot(number) CubeRoot = number ^ (1/3) End Function
Comments
Comments merupakan code vba yang paling simple, gunanya untuk
semua karakter yang ada setelah tanda akan diabaikan oleh VBA
Comment bisa diberikan diatas baris kode atau di sebelah kanan dari baris kode
Hal ini juga berguna dalam pemrograman dimana jika kesalahan code kita tidak
perlu menghapus suatu baris kode tapi cukup menambahkan tanda maka baris tersebut akan dianggap comments dan tidak akan diproses oleh VBA
Variable
Variable bisa didefinisikan sebagai lokasi
penyimpanan/ storage yang ada pada memory yang diperlukan agar suatu proses bisa berjalan Pada contoh diatas variable cb digunakan untuk tempat menyimpan dari user input, dimana variabel ini bisa dimanipulasi lebih lanjut Suatu variabel bersifat read write artinya bisa di assign value tertentu (memakai operator =)
cb = InputBox("masukkan bilangan yg mo dicari akar pangkat tiga-nya")
Declaring Variable
Kita mendeklarasikan variabel agar program berjalan lebih efisien dan lebih cepat, juga agar kita tidak salah dalam mengetik nama variabelmenggunakan auto correct pada editor vba (Ctrl+Space) Juga jika dideklarasikan diawal prosedur/ awal module bisa diberi penjelasan yang lengkap sehingga programmer bisa lebih memahami program secara keseluruhan Syntax : Dim varname[([subscripts])] [As type] Misalnya
Dim DasarPengenaanPajak as integer Dim Tarif_Pajak(1 to 3) as integer Dim Tarif_Pajak(3) as integer Dim Pajak_Terutang
[([subscripts])] artinya jika kita mendeklarasikan array maka memakai kurung awal & akhir dan diisi jumlah array-nya, ingat bahwa VB memakai dasar 0 , jadi kalo (3) artinya ada 4 nilai (0-3), kalo (1 to 3) artinya 3 nilai Kalo tidak diberi type datanya maka berarti adalah varian, varian adalah type data yang sangat flexible , bisa disi apa aja, string, number, boolean, dll namun speednya kurang dan boros memory
Type Data
deklarasi jika program/prosedure berakhir, jika kita ingin agar angka/nilai dalam variabel tidak hilang maka kita menambahkan static pada pendeklarasian variabel Misal: Static intCounter as integer (kata Dim diganti Static) Variabel static nilainya tidak akan direset kecuali workbook ditutup dan dibuka kembali, selama workbook masih terbuka maka nilai dari variabel tidak akan hilang
pertama haruslah huruf Tidak boleh ada spasi atau titik (.) Tidak boleh ada karakter #, $, %, &, @,^, *, ! Karakter lain seperti /,?,<,>,-,+ bisa digunakan tapi bisa menimbulkan kebingungan karena merupakan operator jadi paling aman adalah hanya gunakan huruf,nomor dan underscore( _ ) Huruf besar sama huruf kecil dianggap sama, tapi biasakan untuk menggunakan huruf besar pada karakter pertama untuk lebih menguatkan arti Tidak boleh menyamai fungsi yang sudah ada di excel misalnya SUM, AVERAGE,FIND, dll serta jangan menyamai nama sel misalnya A1 atau R1C1 Jangan lebih dari 255 karakter Menggunakan prefik scope (public,private,static) serta prefik type data (integer, single, boolean) Nama sebaiknya mencerminkan aksi/ tujuan dari variable misalnya: intCounter, blnWorksheet_Open, mstrFilePath Jangan hanya bersifat umum seperti: yesno, xyz, var_01, var_o2.
Constant
Constant/Konstanta adalah kebalikan dari variabel dimana variabel
nilainya berubah2 selama program berjalan maka constant nilainya fixed selama program berjalan Konstanta digunakan jika dalam program dipakai nilai tertentu beberapa kali, misalnya kalimat Direktorat Jenderal Pajak atau tarif pajak 15% sering dipakai maka lebih efisien jika nilai2 diatas disimpan di konstanta daripada kita mengetik nilai tsb secara manual beberapa kali, selain untuk menghindari kesalahan juga membuat program lebih gampang dimengerti Syintax : [Public | Private] Const constname [As type] = expression Public/private hanya boleh dipakai di module level declaration, tidak boleh di dalam prosedur Contoh Public Const strDJP as string = Direktorat Jenderal Pajak Const sngTarif_Pajak as single = 0.15
Array
Array adalah sekumpulan variabel dengan nama sama serta type
data sama Untuk merujuk ke data tertentu maka digunakan index, di vb array adalah berbasis nol jadi jika ditulis data(5) berarti ada 6 nilai yaitu data(0), data(1),..,data(5) kecuali dideklarasikan dengan data(1 to 5) artinya ada 5 data Syntax : Dim varname([subscripts]) [As type] Contoh : Dim strNama(1 to 100) as string Dim intSales() as integer Dim lngData(1 to 12, 1 to 100) as long Kalo array () artinya bisa diisi dengan berapapun jumlah datanya array dinamis Array juga bisa multi dimensi, kalo contoh diatas maka datanya ada 12x100=1200 data, dari lngData(1,1) sampat lngData(12,100)
Merujuk ke range
Merujuk ke satu cell
Range(A1)
adalah range yang ada di worksheet aktif. Untuk menunjuk ke workbook lain atau worksheet lain
Workbooks(book1.xlsx).Worksheets(sheet1).Range(A1)
Worksheets(idx).cells(row,column)
Ada satu Lagi Cells yang merupakan property dari range object Syntax
Worksheets(idx).Range(idx).cells(row,column) Kalau disini maka argumen row dan column merujuk ke range bukan ke worksheet Worksheets(1).cells(1,1) sel A1 Worksheets(1).Range(B10:C100).cells(1,1) sel B10
Rows/Columns bisa berisi angka positif, negatif, dan Nol, kalo positif berarti kebawah/kekanan, negatif berarti keatas/kekiri, nol berarti diam
Misal Range(E10).offset(-2,3) cells H8 Range(E10).offset(-2,0) cells E8
Value property Text Property Count Property Address Property HasFormula Font Interior Formula NumberFormat
Value Property
Property ini bersifat read write artinya bisa untuk mengetahui nilai dari suatu sel (single sel , jika terdiri dari banyak sel maka akan
error), atau mengubah nilai dari sel tersebut (berlaku untuk range tsb) Misal:
Msgbox Range(A1:C10).value Error Msgbox Range(A1:C10).Cells(1,1).value success Range(A1:C10).value =6 mengubah semua sel menjadi nilai 6
Text Property
Bersifat read only
Menyajikan informasi yang terlihat dilayar,
misalnya di sel A1 kita ketik 12.5 dan diberi format dollar dan 2 angka dibelakang koma maka Range(A1).text $ 12.50 Tapi, Range(A1).value 12.5
jumlah sel yang ada di range Address memberikan informasi alamat dari range, dalam bentuk string, serta bentuk absolut Hasformulamemberikan nilai yes/no (boolean) apakah suatu sel ada rumusnya atau tidak Font Property menghasilkan font object yang memiliki property2 seperty bold, italic, fontsize, dll yang bisa dimanipulasi Interior Property juga menghasilkan interior property berisi border,background,dll Formula property menghasilkan string berisi formula dari sel bersangkutan Number Format menghasilkan string berisi number format dari sel bersangkutan, juga bisa diubah nilainya (read write)
maka akan error, oleh karena itu maka harus diaktifkan dulu
Worksheets(sheet1).range(A1).select
Untuk memilih sel bisa dipakai goto methods dari application object, dimana tidak perlu mengaktifkan worksheet tujuan
Application.Goto Worksheets(sheet1).range(A1)
Copy adalah methods dari range namun paste adalah method dari worksheet, selection artinya range yang telah kita pilih dengan select methods Code diatas bisa kita singkat dng kode berikut ini karena copy methods tidak memerlukan select method lebih dulu baik untuk copy dan paste-nya
Range(A1:A12).copy range(C1)
dari cell Delete methodsmenghapus cell dan shift cell disebelah bawahnya/kananya untuk mengisi cell yang hilang Sort Methodsmensortir range sesuai urutan yang dikehendaki Merge methodsmenggabungkan dua atau lebih range PasteSpecial Methods paste value dari memory ke cell tujuan, bisa paste value, paste format, paste link, dll
Custom/user definedfunction
VBA function
Walaupun VBA telah memiliki function yang begitu banyak namun kadang2 ada yang kurang lengkap menurut kita atau ada fungsi lain yang di excel dibuat secara lebih mudah, misalnya SUM, dng vba agak repot karena harus menjumlah angka satu persatu dng looping padahal dng fungsi excel SUM, begitu gampang Semua fungsi yang biasa kita gunakan diexcel bisa diakses di VBA dengan application object Syntaxnya adalah: Application.worksheetfunction. lalu disambung dengan fungsi excel misalnya sum,avg, max, dll Misalnya
Total = Application.WorksheetFunction.Sum(Range(A1:A12))
Kalo diexcel untuk menggunakan rumus sum kita menggunakan mouse/keyboard untuk memilih range maka di VBA kita menggunakan object Range
Fungsi2 diexcel yang bisa dipakai, bisa dilihat di Object browser, caranya masuk ke VB editor, tekan F2 (atau dng menu view) cari di Classes WorksheetFunction, maka di sebelah kanannya akan muncul fungsi2 yang ada di excel Semua fungsi di excel akan tersedia kecuali di VBA juga ada fungsi yang sama
else is true Select Case Does any of several things, depending on somethings value For-Next loop Executes a series of statements a specified number of times Do-While loop Does something as long as something else remains true Do-Until loop Does something until something else becomes true
GoTo statement
GoTo Statement merupakan cara yang akan secara langsung merubah
aliran/flow dari program menuju baris kode tertentu yang ditandai dengan label (Nama diakhiri dengan tanda titik dua sebagai entry point) Misal:
Sub GoToDemo() UserName = InputBox(Enter Your Name: ) If UserName <> Bill Gates Then GoTo WrongName MsgBox (Welcome Bill...) ...[More code here] ... Exit Sub WrongName: MsgBox Sorry. Only Bill Gates can run this. End Sub
untuk menangani error (seperti kode diatas) hal ini dikarenakan Goto akan membuat program menjadi tidak berstruktur yang akan menyebabkan program susah untuk dipahami/ dimodifikasi
Syntax:
If...Then...Else Statement
Atau
If Time < 0.5 Then MsgBox Good Morning Else MsgBox Good Afternoon End if
If Then berguna kalau jumlah option hanya 2 atau 3, kalau lebih dari itu akan membuat program susah dipahami, untuk itu kita menggunakan Select Case Statement Syntax:
Select Case testexpression [Case expressionlist-n [statements-n]] . . . [Case Else [elsestatements]] End Select
Contoh:
Sub ShowDiscount3() Dim Quantity As Integer Dim Discount As Double Quantity = InputBox(Enter Quantity: ) Select Case Quantity Case 0 To 24 Discount = 0.1 Case 25 To 49 Discount = 0.15 Case 50 To 74 Discount = 0.2 Case Is >= 75 Discount = 0.25 End Select MsgBox Discount: & Discount End Sub
For..Next Statement
Syntax:
For counter = start To end [Step stepval]
[statements] [Exit For] [statements]
Next [counter]
Do..Loop Statement
Do..Loop statement digunakan untuk loop dimana kita tidak tahu kapan selesainya / berapa kali looping Syntax:
Do [While|Until condition] [statements] [Exit Do] [statements] Loop
Misal: (Program ini akan menggandakan nilai cell, dan begitu cell kosong maka akan berhenti)
Sub DoWhileDemo() Do While ActiveCell.Value <> Empty ActiveCell.Value = ActiveCell.Value * 2 ActiveCell.Offset(1, 0).Select Loop End Sub
Di VBA masih ada lagi looping yg sangat berguna yaitu Loop through a collection, kita tahu bahwa object diexcel seperti cell memiliki collection yaitu cells(kumpulan beberapa cell), worksheet memiliki collection worksheets (semuanya diberi akhiran s jamak), jika kita ingin looping cells kita bisa memakai cara merujuk ke cell satu persatu via index mereka atau dng cara mudah via looping through colllection Misal: program mengisi sekumpulan cells yang kita pilih dengan nilai urut
Dim baris as integer, kolom as integer For baris=1 to selection.rows.count for kolom=1 to selection.columns.count counter=counter+1 selection.cells(baris,kolom).value=counter next kolom Next
Kalo menggunakan collection jauh lebih mudah Dim sel as range For each sel in selection.cells
Counter=counter+1 Sel.value=counter
Next
Contoh lain: mendelete row 1 untuk setiap worksheet in workbook yang aktif
Sub DeleteRow1() Dim WkSht As Worksheet For Each WkSht In ActiveWorkbook.Worksheets WkSht.Rows(1).Delete Next WkSht End Sub
A workbook is opened or closed. A window is activated. A worksheet is activated or deactivated. Data is entered into a cell or the cell is edited. A workbook is saved. A worksheet is calculated. An object, such as a button, is clicked. A particular key or key combination is pressed. A particular time of day occurs. An error occurs.
diinginkan di project explorer Pilih folder ThisWorkbook dan klik2x / klik kananView Code Di Code Windows pilih Workbook di Dropdown yang sebelah kiri, di Dropdown yang kanan pilih Open Secara otomatis akan dibuat sub prosedure dng judul workbook_open
Entry code berikut ini Private Sub Workbook_Open() Dim Msg As String If Weekday(Now) = 6 Then Msg = "Today is Friday. Make sure that you " Msg = Msg & "do your weekly backup!" MsgBox Msg Else MsgBox "Friday is your Weekly backup", vbCritical, "Weekly Backup" End If End Sub Save, Lalu reopen workbook, maka akan keluar kotak dialog sesuai dengan apakah hari ini jumat/ bukan
(Save As)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _ As Boolean, Cancel As Boolean) If SaveAsUI Then MsgBox You cannot save a copy of this workbook! Cancel = True End If End Sub
Dim OldSheet As Object Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Set OldSheet = Sh End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object) If TypeName(Sh) = Chart Then MsgBox Sorry, you cant activate any charts. OldSheet.Activate End If End Sub
Program ini akan mengeluarkan dialog format angka jika sel yang
Private Sub Worksheet_BeforeRightClick (ByVal Target As Excel.Range, Cancel As Boolean)
diklik kanan berisi angka (cancel=true artinya shortcut menu tidak akan muncul)
If IsNumeric(Target) And Not IsEmpty(Target) Then Application.Dialogs(xlDialogFormatNumber).Show Cancel = True End If End Sub
GetOpenFile
GetSaveFile
MsgBox Function
Syntax MsgBox(prompt[, buttons] [, title] [, helpfile, context]) Msgbox adalah suatu fungsi yang menghasilkan suatu nilai yaitu vbOk,vbCancel,vbRetry,dll tergantung tombol mana yang dipilih oleh user Prompt berisi string/kalimat yang merupakan isi dari msgbox Button merupakan tombol yang akan muncul di msgbox dialog Title merupakan Caption/ Judul dari Dialogbox yang
muncul Helpfile & Context berhubungan dengan help yang telah disiapkan
Msgbox Function
Nilai Konstant pada button di
msgbox
Contoh Code:
Dim Msg, Style, Title, Help, Ctxt, Response, MyString Msg = "Do you want to continue ?" ' Define message. Style = vbYesNo + vbCritical + vbDefaultButton2 ' Define buttons. Title = "MsgBox Demonstration" ' Define title. Help = "DEMO.HLP" ' Define Help file. Ctxt = 1000 ' Define topic context. ' Display message. Response = MsgBox(Msg, Style, Title, Help, Ctxt) If Response = vbYes Then ' User chose Yes. MyString = "Yes" ' Perform some action. Else ' User chose No. MyString = "No" ' Perform some action. End If
Karena Msgbox merupakan fungsi maka dapat dipakai tanpa melalui variable lebih dulu
Sub GetAnswer2()
If MsgBox(Continue?, vbYesNo) = vbYes Then ...[code if Yes is clicked]... Else ...[code if Yes is not clicked]... End If
End Sub
Contoh InputBox
Program ini akan meminta user untuk memberikan info berapa sheet yang akan ditambah, disini terlihat ada fungsi isnumeric yang berguna untuk menentukan apakah user memasukkan angka, trus return value jika user meng-cancel inputbox
Sub GetName2AddSheet()
Dim Prompt As String Dim Caption As String Dim DefValue As Integer Dim NumSheets As String Prompt = How many sheets do you want to add? Caption = Tell me... DefValue = 1 NumSheets = InputBox(Prompt, Caption, DefValue) If NumSheets = Then Exit Sub Canceled If IsNumeric(NumSheets) Then If NumSheets > 0 Then Sheets.Add Count:=NumSheets Else MsgBox Invalid number End If
End Sub
GetOpenFilename Method
Contoh Code
Program ini akan menampilkan file open dialog dan akan muncul msgbox yang berisi nama file yang dipilih
Sub GetImportFileName() Dim Finfo As String Dim FilterIndex As Integer Dim Title As String Dim FileName As Variant ' Set up list of file filters Finfo = "Text Files (*.txt),*.txt,Lotus Files (*.prn),*.prn,Comma Separated Files (*.csv),*.csv," & _ "ASCII Files (*.asc),*.asc,All Files (*.*),*.*" ' Display *.* by default FilterIndex = 5 ' Set the dialog box caption Title = "Select a File to Import""" ' Get the filename FileName = Application.GetOpenFilename(Finfo, _ FilterIndex, Title) ' Handle return info from dialog box If FileName = False Then MsgBox "No file was selected.""" Else MsgBox "You selected " & FileName End If End Sub
GetOpenFilename hanya disini akan menampilkan dialog save Untuk menampilkan dialog pemilihan folder dipakai fungsi Application.FileDialog(msoFileDialogFolderPicker).show Contoh Code:
Sub GetAFolder() With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = Application.DefaultFilePath & "\" .Title = "Please select a location for the backup" .Show If .SelectedItems.Count = 0 Then MsgBox Canceled Else MsgBox .SelectedItems(1) End If End With End Sub