Pengenalan VBA
Apa itu VBA
VBA, yang merupakan singkatan dari Visual Basic for Applications, adalah sebuah bahasa
pemrograman dikembangkan oleh Microsoft untuk bekerja dengan Microsoft Office.
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
1. Excel akan mengeksekusi semua perintah yang diperintah dalam urutan yang sama/
konsisten
2. Excel akan melaksanakan semua perintah tadi dengan kecepatan yang jauh lebih cepat
daripada dilakukan secara manual/
3. Dengan pemrograman yang baik maka perintah2 tadi bisa dibuat tanpa error
4. Bisa dilakukan oleh orang yang memiliki pengetahuan excel yang rendah, yang penting
tekan tombol/menu yang diberikan
5. Bisa melakukan yang tidak bisa dilakukan dengan excel secara manual . misal membuat
games di excel
6. Untuk pekerjaan-2 yang memakan waktu , VBA bisa melakukannya tanpa kita perlu
nungguin
Kekurangan VBA
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)
Obyek memiliki Method, Properties, serta Event. Method adalah 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
Macro akan mencatat semua tindakan kita sekecil apapun akan tercatat olehnya dan akan bisa
dieksekusi sepanjang file yang menyimpan macro tersebut dalam posisi terbuka
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. Klik/checkmark Show developer tab in The Ribbon
4. Klik Tombol Ok
5.
6.
Menjalankan Macro
Pilih cell yang akan diterapkan macro bersangkutan
Klik Developer Tab
Klik macros, maka akan muncul Macro dialog box
Shortcut (Alt+F8)
Relative Reference
Security Option
VBA bisa digunakan untuk hal2 yang baik seperti penjelasan kita sebelumnya namun juga bisa
melakukan hal2 yang sangat berbahaya seperti :
Menghapus file/folder
mengformat Hardisk
melakukan hal2 diatas via network
berlaku sebagai virus komputer yang bisa melakukan hal2 berbahaya lainnya
Oleh karena itu maka kita perlu berhati2 dalam menjalankan vba, kita harus yakin bahwa vba
aman sebelum menjalankannya
Macro Setting
1. 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 meng-enable atau
men-disable kan macro tersebut
2. Jika kita memilih 1 maka semua macro akan di-disabled
3. Jika kita pilih 3 maka yang dijalankan hanya yang memiliki certificate digital, bisa kita
buat sendiri jika hanya akan dijalankan di PC kita, atau minta ke pengelola IT di Intranet
Kita atau harus beli ke penjual certificate digital dunia jika mau di internasionalkan
4. Pilihan 4 tidak disarankan
Checkmark pada Trust access to the VBA object model perlu dilakukan jika kita mau
memanipulasi VBA Editor misalnya mo menulis code secara otomatic/ membuat form secara
otomatic, dll
Enable/Disable Macros
Jika kita memilih nomor 2 maka pada waktu membuka file yang ada makronya akan ditampilkan
peringatan seperti dibawah ini
Trusted Location
Trusted location artinya semua file2 yang disimpan disitu tidak akan terpengaruh atas apapun
setting kita di Trust Center. Jadi pasti akan di enabledkan secara otomatis. Untuk
menambahkan folder kita ke Trusted Location maka kita Pilih Trusted Location di Trust center
dialog box
Kita klik Add new location
Pilih lokasi folder kita
Kita tentukan apakah subfolder akan kita masukan juga
Klik OK
Cara diatas hanya berlaku jika file yang berisi macro dalam posisi terbuka, karena jika filenya
belum kita buka maka macro tersebut tidak ada di dalam daftar macro jika kita
klik Ribbon Developer >Macros
Agar macro selalu bisa dijalankan tanpa perduli posisi open/close maka ada cara ketiga yaitu
dibuatkan menunya/dibuatkan buttonnya, untuk office 2007 karena ribbonnya tidak bisa
dimodifikasi maka kita buatkan di Quick Access Toolbar
Shape
Kita buat dulu shapenya
10.
Commandbutton pada worksheet
1. Kita buatkan dulu commandbutton
2. Ribbon Developer >Insert >Form Control >Button
3.
4. Lalu kita bikin commandbuttonnya dengan cara click and drag lalu buat kotak
5. Otomatis akan muncul macro mana yang akan kita assign-kan
6.
Saving Macros
Workbook yang berisi macro harus disimpan dalam format Excel macro enabled workbook
(.xlsm) supaya bisa dieksekusi, kalo nggak maka macronya akan dihapus oleh excel
Hal2 yang berhubungan dengan Macro
1. Makro akan dijalankan sepanjang file excel yang menyimpan macro tersebut dalam
keadaan terbuka
2. File Excel yang menyimpan macro tidak harus dalam posisi aktive, dalam posisi hide juga
tetep bisa dijalankan
3. Shortcut jangan samapai menyamai shortcut milik excel seperti Ctrl+N, Ctrl+S, dll karena
akan dioverwrite oleh shortcut macro kita
4. Macro tidak bisa di Undo, jadi hati2 waktu menjalankan
5. Macro tidak mengenal warning/error jadi akan dijalankan tanpa memberikan peringatan
lebih dulu atau kondidi apapun
6. Macro bisa diperbaiki/ diberikan warning/ nilai error/ penjelasan lain via VBA
Ada cara lain yang bisa kita pakai yaitu memastikan bahwa file itu selalu terbuka setiap kita
menjalankan Excel. ada 2 cara yaitu :
Personal Macro Workbook (PMW) diciptakan secara otomatis oleh Excel jika kita merekan
macro dan menyimpannya di PMW. untuk membuatnya tidak perlu capek2 bikin file baru tapi
cukup merekam macro baru dan disimpan di PMW
jika kita exit dari excel dan kita melakukan perubahan pada personal.xlsb maka akan keluar
peringatan sbb :
Kita pilih Yes (jadi kita tidak perlu secara explicit menyimpan file PMW ini)
maka setiap kali kita buka Excel, file personal.xlsb tersebut pasti dalam posisi terbuka namun
tersembunyi (hidden), kalao kita klik ribbon View -> Unhide
jadi mulai sekarang, setiap kali kita record macro atau ketik code vba, sepanjang disimpan di
PMW pasti 0tomatis bisa dijalankan tanpa repot2
Folder ini bisa dilihat di Excel Option, kita bisa buat sendiri atau ikut defaultnya
Hanya saja karena windows melarang perubahan di program files, maka biasanya disimpan di
C:\Users\names\AppData\Roaming\Microsoft\Excel\XLSTART
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)
1. Project Explorer
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
2. Properties
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 di project explorer
4. Userform window
Untuk membuat form atau kotak dialog dalam menjalankan VBA, versi visualnya
5. Object Browser
Untuk mengetahui properties, method, event yang dimiliki oleh suatu object
6. Immediate
untuk menampilkan tekan Ctrl+G atau ViewImmediate Window command. Window ini biasa
digunakan untuk eksekusi perintah langsung atau untuk fungsi debugging
Project Explorer
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
Customizing VB Editor
Editor Settings
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
Require Variable Declaration menentukan apakah setiap variabel perlu dideklarasikan
dahulu sebelum eksekusi, akan menampilkan option explicit untuk tiap modul baru
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
Window Settings
Drag-and-Drop Text 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 menampilkan separator untuk menandai tiap prosedur
Editor Format
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
Displays sample text for the font, size, and color settings.
General
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
Menentukan apakah jika folder di Project explorer ditutup juga akan ikut menutup code window
yang bersangkutan
Error Trapping
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
Docking
Windows disini akan di-dock/ 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
Windows posisi Docking
terlihat jika posisi windows2 itu nempel dan fixed/tidak bisa dipindah2kan
Windows Undock
Project Name bisa diisi dengan 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
Protection
Tick mark lock project 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
Membuat new module
Pilih project module yang diinginkan (buat workbook baru kalo belum ada)
Klik kanan untuk memunculkan menu, pilih insert->Module
Atau pilih insert menu/ insert button dari toolbar lalu pilih module
Collection
Collection artinya sekumpulan obyek yang sama, misalnya :
workbooks(myfile.xlsx)
Workbooks(1)
Worksheets(5) artinya worksheet ke 5 dalam 1 workbook
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,.)
Properties
Properties merupakan karakteristik dari suatu object. Misalnya kalau Object itu kita, maka kita
punya umur, tinggi, berat, warna kulit, dll. Begitu juga misalnya Object workbook memiliki
nama, path, saved, dll
Di VBA kita menggunakan properties untuk mengambil nilainya ataupun mengubah nilainya,
misalnya :
Untuk mengubah property kita bisa gunakan code ataupun visual (properties windows) ,
misalnya mengubah nama worksheet mysheet menjadi your sheet kita bisa gunakan code
worksheets(mysheet).name=your sheet
Atau kita ubah di properties window
ini hasilnya
Methods
Disamping properties, Object memiliki method, yaitu suatu tindakan/action yang bisa dilakukan
oleh obyek tersebut, misalnya Obyek workbook memiliki method printout (untuk ngeprint),
printpreview, protect dll
misalnya Code untuk menutup/close suatu workbooks tanpa menyimpan perubahannya adalah
sbb:
workbooks(myfile.xlsx).close false
Parameters
Data
Name Required/Optional Description
Type
If there are no changes to the workbook, this
argument is ignored. If there are changes to the
workbook and the workbook appears in other
open windows, this argument is ignored. If there
are changes to the workbook but the workbook
doesnt appear in any other open windows, this
SaveChanges Optional Variant
argument specifies whether changes should be
saved. If set to True, changes are saved to the
workbook. If there is not yet a file name
associated with the workbook, then FileName is
used. If Filename is omitted, the user is asked to
supply a file name.
Filename Optional Variant Save changes under this file name.
If the workbook doesnt need to be routed to the
next recipient (if it has no routing slip or has
already been routed), this argument is ignored.
Otherwise, Microsoft Excel routes the workbook
RouteWorkbook Optional Variant according to the value of this parameter. If set to
True, the workbook is sent to the next recipient.
If set to False, the workbook is not sent. If
omitted, the user is asked whether the workbook
should be sent.
Events
Event adalah suatu keadaan yang terjadi pada suatu Obyek, misalnya events pada obyek
workbook adalah :
Open
Activate
BeforeClose
BeforeSave
dan lain2 (lihat helpnya excel)
jadi misalnya pada event Open maka code yang terdapat pada event Open akan dieksekusi,
misalnya suatu file akan otomatic menampilkan messagebox berisi tanggal dan waktu sekarang
,pada waktu file tsb terbuka maka codenya adalah sbb:
End Sub
caranya :
1. Masuk ke VBE
2. Klik kanan pada workbook kita di project explorer
3. Pilih View code
4. akan keluar code windows
5. pilih workbook di isian sebelah kiri dan open pada isian sebelah kanan
6. otomatic akan muncul sub prosedur baru yaitu :
7.
8. Private Sub Workbook_Open
9.
10. ketik code
11.
12. MsgBox Date & vbCrLf & Time()
13.
14. msgbox akan menampilkan suatu jendela message box
15. vbCrLf akan membuat baris baru, sehingga text diatas akan terbagi menjadi 2 baris
16. Date() dan Time() akan menampilkan tanggal dan waktu sekarang
17. code diatas akan tereksekusi jika file ini dibuka
18.
1. Object Browser
2. Excel Help
3. Auto List member
Object Browser
Object Browser akan menelusuri/ browsing semua object yang tersedia di project kita serta
melihat semua properties, methods dan events. sebagai tambahan semua sub prosedure dan
konstant juga kelihatan lalu kita bisa membaca help-nya baik yang online maupun offline
Thisworkbook.s
procedure
Kita bisa menggunakan huruf dan nomor sebagai nama, tapi karakter 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.
End Sub
Jadi suatu sub diawali dengan Sub dan diakhiri dengan End Sub
Exit Sub berguna untuk mengakhiri suatu sub prosedure walaupun belum mencapai akhir (End
sub)
Klik didalam sub prosedure yang diinginkan, lalu klik menu Run>Run 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()
'Debug.Print cb
cbroot = CubeRoot(cb)
MsgBox cbroot
Else
Exit Sub
End If
End Sub
Syntax dari Function prosedure
[Public | Private | Friend] [Static] Function name [(arglist)] [As type] [statements] [name =
expression] [Exit Function] [statements] [name = expression]
End Function
Exit Function berguna untuk mengakhiri suatu function prosedure walaupun belum mencapai
akhir (End Function)
Jangan lupa bahwa fungsi harus menghasilkan nilai yaitu dengan statemen/code
[name = expression]
Misalnya
cuberoot = number ^ (1 / 3)
Contoh
Function CubeRoot(number)
CubeRoot = number ^ (1 / 3)
End Function
Sub test_Function()
MsgBox CubeRoot(27)
End Sub
Gaya pemrograman yang baik
Pemrograman merupakan suatu seni, artinya kita memprogram menurut cara yang paling kita
senangi, tentu saja tidak ada cara pemrograman yang paling baik karena setiap orang punya
style masing2
Namun ada bebarapa cara yang banyak dipakai dan menurut penulis cukup masuk akal , antara
lain :
Sub procedure01()
Dim tgl As String
tgl = Format(Now(), "yyyy-mm-dd")
If tgl > Format(ExpireDate, "yyyy-mm-dd") Then
FrmUpdate.Show
ThisWorkbook.Close False
Exit Sub
End If
If tgl > Format(WarnDate, "yyyy-mm-dd") Then
If fnReadSetting("Version") = ATversion Then
Else
fnDoSetting "Version", ATversion
fnDoSetting "Reminder", ""
End If
strReminder = fnReadSetting("reminder")
If strReminder = "" Or tgl >= strReminder Then FrmUpdate.Show
End If
End Sub
Visual Basic
Total = 0
For i = 1 To 100
Total = Total + i
Next i
1 Sub VBA_Demo()
2 ' This is a simple VBA Example
3 Dim Total As Integer, i As Integer
4 Total = 0
5 For i = 1 To 100
6 Total = Total + i
7 Next i
8 MsgBox Total
9 End Sub
Comments
Variable
Constant
Array
Comments
Comments merupakan code vba yang paling simple, gunanya untuk memberikan
penjelasan atas suatu baris kode/ variable/sub/ function
Cara penggunaan Comment cukup dengan memberikan karakter (apostrophe) diawal
maka semua karakter yang ada setelah tanda akan diabaikan oleh VBA
Comment bisa diberikan diatas baris kode atau di sebelah kanan dari baris kode yang
akan diberi penjelasan
Contoh:
Visual Basic
Sub panggil_fungsi()
1 Sub panggil_fungsi()
2
3 Dim cb, cbroot
4
5 'minta input dari user
6
7 cb = InputBox("masukkan bilangan yg mo dicari akar pangkat tiga-nya")
8
9 'Debug.Print cb
10
11 If cb <> "" Then
12
13 cbroot = Cuberoot(cb)
14
15 MsgBox cbroot
16
17 Else
18
19 Exit Sub
20
21 End If
22
23 End Sub
24
25 'Cuberoot merupakan akar pangkat tiga dari suatu bilangan
26 Function Cuberoot(lngNilai)
27
28 Cuberoot = lngNilai ^ (1 / 3)
29
30 End Function
prosedur untuk menghasilkan akar pangkat tiga dari angka yang diberikan oleh user
Hal ini juga berguna dalam pemrograman dimana jika kita tidak ingin mengeksekusi
satu/ beberapa baris code kita tidak perlu men-delete baris tersebut tapi cukup jadikan
comment dengan menambahkan apostrophe () didepan baris2 tsb maka tidak akan
diproses oleh VBA
Comment sangat penting dalam programming karena bisa menjelaskan suatu code
Kita tuliskan algoritma/ logika serta penjelasan atas suatu baris code untuk dokumentasi
dikemudian hari
Tanda petik tunggal/Apostrope () tidak berlaku jika berada diantara tanda petik 2,
misalnya msg = Cant do it
Variable
Variable bisa didefinisikan sebagai lokasi penyimpanan/ storage yang ada pada memory
yang diperlukan agar suatu proses bisa berjalan
Pada contoh dibawah ini 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 =)
Visual Basic
Sub panggil_fungsi()
1 Sub panggil_fungsi()
2
3 Dim cb, cbroot
4
5 'minta input dari user
6
7 cb = InputBox("masukkan bilangan yg mo dicari akar pangkat tiga-nya")
8
9 'Debug.Print cb
10
11 If cb <> "" Then
12
13 cbroot = Cuberoot(cb)
14
15 MsgBox cbroot
16
17 Else
18
19 Exit Sub
20
21 End If
22
23 End Sub
24 'Cuberoot merupakan akar pangkat tiga dari suatu bilangan
25 Function Cuberoot(lngNilai)
26
27 Cuberoot = lngNilai ^ (1 / 3)
28
29 End Function
Disini variabel cb akan diisi dengan karakter yang diisikan oleh user, misalnya 27
Visual Basic
cb = InputBox("masukkan bilang
cbroot = CubeRoot(cb)
1 cbroot = CubeRoot(cb)
Disini variabel cb akan diambil nilainya (yaitu 27) dan diproses dengan fungsi Cuberoot
Declaring Variable
Kita mendeklarasikan variabel agar program berjalan lebih efisien dan lebih cepat, juga
agar kita tidak salah dalam mengetik nama variabel ,menggunakan auto correct pada
editor vba (Ctrl+Space)
Dari gambar dibawah ini terlihat karena kita sudah men-deklarasikan variabel intLokal
maka jika kita ketik int maka akan muncul daftar yang berisi semua variabel ,methods,
properties yang berawalan int, nanti tinggal kita pilih yang kita butuhkan, hal ini akan
mengurangi kesalahan ketik
VBA tidak case sensitif, namun jika sudah dideklarasikan maka case variabel akan
mengikuti case dideklarasi
Juga jika dideklarasikan diawal prosedur/ awal module bisa diberi penjelasan yang
lengkap sehingga programmer bisa lebih memahami program secara keseluruhan
Syntax :
Misalnya
Visual Basic
Dim DasarPengenaanPajak as in
[([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 yaitu 1,2,3
Jika array tidak diberi angka (misalnya: myvalue() ) maka artinya adalah array dinamis,
yang bisa berubah pada saat run time
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
Compatibility of variables
harus diingat jika kita melakukan perhitungan antar 2 atau lebih variabel harus diupayakan
memiliki type yang sama, jika tidak akan menimbulkan hasil yang tidak terduga
Visual Basic
Sub Mix_Variable()
Dim answ er As Integer
Dim num1 As Single
Dim num2 As Integer
1 Sub Mix_Variable()
2 Dim answer As Integer
3 Dim num1 As Single
4 Dim num2 As Integer
5 num1 = 5.3
6 num2 = 6
7 answer = num1 * num2
8 MsgBox answer
9 End Sub
fungsi msgbox untuk dispaly hasilnya saja tapi yang penting untuk dilihat adalah karena terdiri
dari type data yang berbeda maka hasilnya akan mengikuti yang paling kompatibel, dimana
untuk kode diatas akan dijadikan integer (hasilnya 32 bukan 31.8)
Variabel harus diisi sesuai type datanya jika tidak maka akan terjadi type mismatch error
seperti Code sbb :
Visual Basic
Sub Type_Data_Error()
1 Sub Type_Data_Error()
2
3 Dim myVar As Integer
4 myVar = 10
5 myVar = "Testing"
6
7 End Sub
Kesalahan diatas bisa diperbaiki dengan mengganti type data menjadi variant, karena variant
bisa menampung segala macam jenis data
Variabel juga jangan diisi dengan nilai diatas jangkauannya misalnya code :
Visual Basic
Sub out_range()
Dim myNum As Integer
myNum = 50000
End Sub
1 Sub out_range()
2 Dim myNum As Integer
3 myNum = 50000
4 End Sub
Procedure only, dideklarasikan didalam prosedur, hanya bisa digunakan dan dikenali di
dalam prosedur tersebut, begitu program keluar dari prosedure yang bersangkutan maka nilai
variabel akan direset ke nilai awal
Sub test_variable_lokal()
1 Sub test_variable_lokal()
2
3 'deklarasikan variabel intLokal
4 Dim intLokal As Integer
5
6 'tampilkan hasilnya
7 MsgBox "intLokal =" & intLokal
8
9 'isi variabel dengan suatu angka
10 intLokal = 100
11
12 'tampilkan hasilnya
13 MsgBox "intLokal =" & intLokal
14
15 End Sub
Jika sub diatas dijalankan maka akan muncul display menyatakan bahwa intLokal=0
jika dioke, maka akan lanjut ke code berikutnya yang akan mengisi variabel tsb dng
angka 100, lalu akan muncul display menyatakan intLokal=100
Karena intLokal adalah variabel bersifat lokal maka begitu kita jalankan lagi sub diatas
maka variabel tersebut akan direset, jika integer jadi nol, jika text jadi blank, jika variant
jadi null
All procedure in a Module, bisa dipakai dan dikenali oleh semua prosedur didalam suatu
module, dideklarasikan diluar prosedur dan diawal module
nilainya masih ada dan dapat dikenali oleh Sub/Fungsi lain di module tersebut
Lihat kode dibawah ini
Visual Basic
All Procedure in All Module, bisa digunakan oleh semua prosedur dalam file VBA
bersangkutan. Dideklarasikan di awal module dan diberi prefik Public
ini seperti scope module hanya lebih luas, karena dikenali di module lain sepanjang
berada di satu workbook
Static berarti nilai dalam variabel disimpan jika kita kembali lagi ke sub/fuction tersebut. seperti
kita tahu kalau variabel didekalarasikan di sub/fungsi maka bersifat lokal dan akan direset
setiap kali kita masuk ke sub/fungsi bersangkutan, namun jika dideklarasikan dengan static
maka nilai akan disimpan samapi workbook diclose
Sub MySub()
Static Counter As Integer
Dim Msg As String
Counter = Counter + 1
Msg = "Number of executions: " & Counter
MsgBox Msg
End Sub
Jika prosedur itu kita jalankan maka pertama akan menghasilkan nilai 1, kita jalankan yg kedua
maka akan menghasilkan nilai 2, begitu seterusnya sampai workbook kita close baru variabel
Counter akan direset
Workbooks("myfile.xlsx").worksheets("sheet1").range("A1:V100).select
Workbooks(myfile.xlsx).worksheets(sheet1).range(A1:V100).Font.bold=true
Workbooks(myfile.xlsx).worksheets(sheet1).range(A1:V100).Font.italic=true
dst
rngList.select
rngList.Font.bold=true
rngList.Font.italic=true
...dst
Ingat untuk assignment type data Object harus dengan keyword Set
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 hanya boleh dipakai di module level declaration, tidak boleh di dalam prosedur
'type variant
Const terserah="Emang Gue pikirin type datanya"
Array
Array adalah sekumpulan variabel dengan nama sama serta type data sama
Daripada kita memiliki suatu variabel dengan nama berurutan misalnya
baris1,baris2,baris3,. mending kita gunakan array, jadi jika bisa kita namai baris(1),
baris(2),baris(3), .
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
Jika diawal module kita tulis option base 1 maka berarti array akan dimulai dari angka
1, jika tidak maka VB akan selalu berbasis 0
Syntax :
Contoh :
Visual Basic
'dimulai dari 1 s.d 100, misalnya
Dim strNama(1 to 100) as string
Kalo array () artinya bisa diisi dengan berapapun jumlah datanya, array dinamis
Array juga bisa multi dimensi, kalo contoh diatas maka datanya ada 12100=1200 data,
dari lngData(1,1) sampat lngData(12,100)
Untuk mengisi bisa satu persatu, pakai For .. Next atau gunakan fungsi Array
Visual Basic
Option Base 1
Sub isi_array()
1 Option Base 1
2
3 Sub isi_array()
4
5 'dimulai dari 1 s.d 100 karena ada option base 1
6 Dim strNama(100) As String
7
8 For k = 1 To 100
9 strNama(k) = "nama ke " & k
10 Next
11
12 MsgBox strNama(67)
13
14 End Sub
15
16 Sub Isi_with_array_function()
17
18 'deklarasikan sebagai variant maka bisa diisi oleh array
19 Dim MyWeek, MyDay2,myday4
20
21 'fungsi array akan menghasilkab array yang bisa diisikan ke
22 'variabel nertype variant
23 MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
24
25 ' Return values assume lower bound set to 1 (using Option Base
26 ' statement).
27 MyDay2 = MyWeek(2) ' MyDay contains "Tue".
28 MyDay4 = MyWeek(4) ' MyDay contains "Thu".
29
30 MsgBox "MyDay2 = " & MyDay2 & vbCrLf & "MyDay4 = " & MyDay4
31 End Sub
Memperbesar array/resize
Array bisa dedefinisikan ulang, misalnya jika data yang mau diisikan terus bertambah
Visual Basic
Sub Array_Dinamis()
Dim MyArray() As Integer '
ReDim MyArray(5) ' Al
For I = 1 To 5 ' Loop 5
1 Sub Array_Dinamis()
2 Dim MyArray() As Integer ' Declare dynamic array.
3 ReDim MyArray(5) ' Allocate 5 elements.
4 For I = 1 To 5 ' Loop 5 times.
5 MyArray(I) = I ' Initialize array.
6 Next I
7 MsgBox MyArray(2)
8
9 'resize array / tambah 5
10 ReDim MyArray(10)
11
12 'lihat hasilnya
13 'untuk melihat batas atas kita gunakan fungsi ubound(nama_array)
14 'untuk batas bawah kita gunakan fungsi lbound(nama_array)
15 MsgBox UBound(MyArray)
16
17 'jika diresize maka isinya akan hilang
18 MsgBox MyArray(2)
19
20 'agar tidak hilang kita tambahkan keyword "preserve"
21 'lihat sub dibawah ini
22 End Sub
23
24 Sub Array_Dinamis2()
25 Dim MyArray() As Integer ' Declare dynamic array.
26 ReDim MyArray(5) ' Allocate 5 elements.
27 For I = 1 To 5 ' Loop 5 times.
28 MyArray(I) = I ' Initialize array.
29 Next I
30 MsgBox MyArray(2)
31
32 'resize array / tambah 5
33 ReDim Preserve MyArray(10)
34
35 'lihat hasilnya
36 'untuk melihat batas atas kita gunakan fungsi ubound(nama_array)
37 'untuk batas bawah kita gunakan fungsi lbound(nama_array)
38 MsgBox UBound(MyArray)
39
40 'jika diresize maka isinya akan hilang
41 'namun karena sudah pake preserve maka isinya disimpan
42 MsgBox MyArray(2)
43
44 End Sub
Visual Basic
Sub copy_array()
1 Sub copy_array()
2
3 'kedua arrau\y dibawah ini bertype sama
4 Dim astr1(0 To 9) As String
5 Dim astr2() As String
6
7 'variant bisa diisi segala macam data
8 Dim astr3 As Variant
9
10 'isi data dulu
11 For k = LBound(astr1) To UBound(astr1)
12 astr1(k) = k
13 Next
14
15 'masukin array astr1 ke astr2
16 astr2 = astr1
17
18 'lihat hasilnya
19 MsgBox "astr1(2) = " & astr1(2) & vbCrLf & "astr2(2) = " & astr2(2)
20
21 'masukin array ke variant
22 astr3 = astr1
23
24 'lihat hasilnya
25 MsgBox "astr1(2) = " & astr1(2) & vbCrLf & "astr3(2) = " & astr3(2)
26
27 End Sub
Range Objects
Range mewakili satu atau lebih cell, satu atau lebih row, satu atau lebih column, satu atau lebih
area (sekumpulan cells yang saling berhubungan) , atau sebuah 3-D range (terdiri dari beberapa
sheet).
Cara merujuk/refer to range
Cara lain merujuk ke range
Property penting dari range Object
Methods penting dari range Object
Property Range
1. Syntaxt :
2.
3. expression.Range(Cell1, Cell2)
4.
5. Expresion menunjuk ke worksheet (jika diabaikan akan diasumsikan di active worksheet)
atau range lain
6. Cells1 harus ada, ini menunjuk ke alamat atau range, berbentuk text, bisa terdapat
range operator (titik 2/:), intersection operator (spasi) atau union operator (koma)
7. Visual Basic
'merujuk ke alamat A1
Range("A1")
1 'merujuk ke alamat A1
2 Range("A1")
3
4 'merujuk ke range B1:B5
5 Range("B1:B5")
6
7 'merujuk ke seluruh kolom B
8 Range("B:B")
9
10 'merujuk ke seluruh baris 4
11 Range("4:4")
12
13 'merujuk ke 2 area yaitu range A1:B8 dan range D9:G16
14 Range("A1:B8,D9:G16")
Range("NPWP")
Range("Menurut_Pemeriksa")
1 Range("NPWP")
2 Range("Menurut_Pemeriksa")
10. Cells2 adalah optional, menunjuk ke alamat sudut lain dari cell1
11. Visual Basic
'merujuk ke cell A1:C5
range("a1","c5")
12. Property range bersifat relatif terhadap worksheet/range jika merujuk ke worksheet
maka relatif terhadap sel A1 (sudut kiri atas)
13. Jika terhadap range maka menunjuk ke sudut kiri atas range, misalnya
14. Visual Basic
15. Kalau kita tidak menyebutkan nama worksheetnya maka diasumsikan oleh VBA bahwa
kita merujuk ke worksheet yang sedang aktif, jika ternyata yang aktif adalah Chartsheet
bukan worksheet maka akan error
16. Untuk merujuk ke worksheet lain kita harus berikan nama worksheet bersangkutan
17. Visual Basic
Worksheets("Sheet1").Range("A
1 Worksheets("Sheet1").Range("A1:C5")
18. Begitu juga kalau merujuk ke workbook lain, seperti contoh dibawah ini
19. Visual Basic
Workbooks("Budget.xlsx").Work
Workbooks("Budget.xlsx").Work
1 Workbooks("Budget.xlsx").Worksheets("Sheet1").Range("A1:C5")
2 Workbooks("Budget.xlsx").Worksheets("Sheet1").Range("Range_Test")
Cells
Cells merupakan property dari worksheet yang akan merujuk ke suatu range dengan alamat
tertentu
Sintaxt:
cells(baris, kolom)
Jika tanpa argumen (baris, kolom) maka cells berarti semua cell di worksheet (A1:XFD1048576)
Contoh:
Visual Basic
'merujuk ke cell A1
'memilih cell A1
Worksheets("test").Cells(1, 1).S
1 'merujuk ke cell A1
2 'memilih cell A1
3 Worksheets("test").Cells(1, 1).Select
4
5 'merujuk ke cell B5
6 'memilih cell B5 di worksheet Test
7 Worksheets("test").Cells(5, 2).Select
8
9 'memilih sel B5 di worksheet aktif
10 Cells(5, 2).Select
11
12 'merujuk ke semua cells di worksheet
13 'mengubah semua menjadi bold
14 Worksheet("test").Cells.Font.Bold = True
Offset
Offset menunjuk ke suatu range dengan menggeser arah berdasarkan range yang lain, misalnya
kita akan menunjuk ke sel dibawah kita 2 baris maka kita ketik Selection.Offset(2, 0)
Sintaxt :
Offset(baris, Kolom)
Baris dan kolom kalau positif berarti ke bawah dan kekanan kalau negatif berarti ke atas
dan kekiri
Kalau 0 berarti tidak menggeser
Contoh :
Visual Basic
'geser 1 baris kebaw ah, dan 2 k
Range("A1").Offset(1, 2)
Selection
Selection artinya range yang sekarang sedang dalam posisi terselect
Visual Basic
'akan menghasilkan range yang
selection.address
Jika kita memilih sekelompok cell untuk dimanipulasi per cell, misalnya mengubah formula
dalam tiap cell menjadi value maka kita harus merubah satu persatu cellnya, tidak bisa
sekaligus, untuk itu kita akan gunakan For Each .. Next
Begini kodenya
Visual Basic
Sub Change2value()
'kita deklarasikan dulu
'bisa saja nggak, tapi lebih mu
'dan kita bisa gunakan Intelse
1 Sub Change2value()
2 'kita deklarasikan dulu
3 'bisa saja nggak, tapi lebih mudah dibaca
4 'dan kita bisa gunakan Intelsense/utilities yang akan
5 'mengenali Object sehingga kita tidak perlu mengetik
6 'namun hanya menuliskan titik setelah object dan
7 'Komputer akan mengisikan Properties dan methodnya
8 Dim sel As Range
9
10 For Each sel In Selection
11 'cek apakah berisi formula
12 If sel.HasFormula Then
13 'ubah isinya dengan nilainya
14 sel.Value = sel.Value
15 End If
16 Next
17
18 End Sub
Jika property bersifat read-only maka kita tidak bisa mengeset/mengubah property tersebut
hanya dapat mengetahui nilainya saja
Syntax :
Visual Basic
Sub Range_Address()
Set mc = Worksheets(1).Cells
MsgBox mc.Address()
MsgBox mc.Address(Row Ab
1 Sub Range_Address()
2 Set mc = Worksheets(1).Cells(2, 2)
3 MsgBox mc.Address() ' $B$2
4 MsgBox mc.Address(RowAbsolute:=False) ' $B2
5 MsgBox mc.Address(ColumnAbsolute:=False) ' B$2
6 MsgBox mc.Address(ReferenceStyle:=xlR1C1) ' R2C2
7 MsgBox mc.Address(ReferenceStyle:=xlR1C1, _
8 RowAbsolute:=False, _
9 ColumnAbsolute:=False, _
10 RelativeTo:=Worksheets(1).Cells(3, 3)) ' R(-1)C(-1)
11 End Sub
Jadi jika cell terpilih (bisa kita rujuk dengan keyword Selection) kita isi dengan 12548596000
lalu kita format Comma maka :
Sedang FormulaR1C1 akan menghasilkan formula namun dengan notasi R1C1 (Row dan Column
relatif terhadap sel yang berisi formula)
Berikut adalah contoh dari penggunaan property diatas, kita buat dulu commandbutton dan
kita isi dengan procedure sbb
Visual Basic
Sub Button_ValueTextFormula()
Dim strResult
strResult = strResult & "Selec
& "Selection.Text : " & S
1 Sub Button_ValueTextFormula()
2 Dim strResult
3 strResult = strResult & "Selection.Value : " & Selection.Value & vbCrLf _
4 & "Selection.Text : " & Selection.Text & vbCrLf _
5 & "Selection.Formula : " & Selection.Formula & vbCrLf _
6 & "Selection.FormulaR1C1 : " & Selection.FormulaR1C1
7 MsgBox strResult
8 End Sub
Kita buat formula di worksheet lalu kita format dengan currency, Ini hasilnya
B1 akan diubah menjadi notasi R1C1 menjadi R[-1]C karena baris naik keatas (-1) dan kolom
tetap (0/blank)
Property dari Object Font antara lain adalah Bold yang bisa mengubah huruf menjadi Bold/non-
Bold
Property Interior juga akan menghasilkan Interior Object yang antara alain memiliki property
Color (mengubah background dari range)
Misalnya :
Visual Basic
Sub Change_Bold_Blue()
'mengubah menjadi Bold
Range("A1:A3").Font.Bold = T
1 Sub Change_Bold_Blue()
2 'mengubah menjadi Bold
3 Range("A1:A3").Font.Bold = True
4
5 'mengubah background menjadi biru
6 'fungsi RGB untuk mencari warna biru
7 Range("A1:A3").Interior.Color = RGB(0, 0, 255)
8 End Sub
Property lainnya :
'harus begini
1 'Error when Sheet1 is not active
2 Sheets("Sheet1").Range("A1:C12").Select
3
4 'harus begini
5 Sheets("Sheet1").Activate
6 Range("A1:C12").Select
1 Sub CopyRange()
2 'cara lebih ribet
3 'pilih dulu rangenya
4 Range("A1:A12").Select
5
6 'lakukan copy methods
7 Selection.Copy
8
9 'pilih range tujuan
10 Range("C1").Select
11
12 'lakukan paste methods dengan Object worksheet
13 '(activesheet artinya Object worksheet yang aktif)
14 ActiveSheet.Paste
15
16 'atau gunakan cara yang lebih mudah yaitu
17 Range("A1:A12").Copy Range("C1")
18
19 'copy ke worksheet lain
20 'disini kita gunakan nama argumen diikuti karakter ":=" berguna
21 'agar lebih mudah dibaca
22 Worksheets("sheet2").Range("A1:A3").Copy
23 Destination:=Worksheets("sheet3").Range("A5")
End Sub
1. Built-in Excel Function, terdapat pada excel namun bisa dipakai pada VBA
2. Built-in VBA Function, hanya bisa dipakai di VBA, kecuali kita masukkan pada User
Defined Function
3. User defined Function, yaitu fungsi yang kita rancang sendiri.
Untuk Built-in Excel tidak kita bahas disini karena akan kita bahas di modul Excel
Replace Function
menghasilkan suatu string dimana sebagian karakternya telah digantikan dengan karakter lain
Syntax
Part Description
expression Harus ada. string yang mau diganti.
find harus ada. karakter yang mau diganti
replace harus ada, karakter pengganti.
start Optional. posisi awal penggantian, jika diabaikan akan diisi dengan posisi 1, ingat jika tidak
dimulai dari satu maka hasilnya dimulai dari posisi ini
Optional. Berapa kali mau diganti karakter bersangkutan, jika diabaikan akan diisi dengan -1,
count
yang berarti semua karakter yang cocok akan diganti
compare Optional. Suatu nilai sesuai tabel dibawah
Hasilnya
If Replace returns
expression is zero-length Zero-length string ()
expression is Null An error.
find is zero-length Copy of expression.
replace is zero-length Copy of expression dengan semua karakter yang cocok akan hilang.
start > Len(expression) Zero-length string. Karena start adalah posisi awal mulai pengambilan karakter
count is 0 Copy of expression.
Contoh
Visual Basic
'ganti semua huruf A atau a
Debug.Print Replace(strAsli, "
"1", , , vbTextCompare)
1 Sub test_Function_Replace()
2
3 Dim strAsli As String
4 strAsli = "Returns A String In Which A specified Substring Has Been Replaced With Another
5 Substring A Specified Number Of Times"
6
7 'print aslinya
8 Debug.Print strAsli
9
10 'membuang semua spasi yang ada
11 Debug.Print Replace(strAsli, " ", "")
12
13 'karena start=10, maka pengambilan karakter dimulai dari
14 'karakter ke 10
15 'lalu semua spasi yang ada dibuang
16 Debug.Print Replace(strAsli, " ", "", 10)
17
18 'membuang hanya 3 spasi pertama
19 'jika dikosongkan atau diabaikan maka start dianggap dari awal/1
20 Debug.Print Replace(strAsli, " ", "", , 3)
21
22 'ganti hanya huruf A kapital
23 Debug.Print Replace(strAsli, "A", "1")
24
25 'ganti semua huruf A atau a
26 Debug.Print Replace(strAsli, "A", "1", , , vbTextCompare)
27
End Sub
Untuk bisa menggunakan maka kita pergunakan Object WorksheetFunction yang merupakan
sub-object dari Application (Object Application adalah Excel itu sendiri), misalnya kode dibawah
ini akan memakai fungsi =SUM
Visual Basic
'ke 3 cara dibaw ah akan mengh
Total = Application.WorksheetFu
1
2
'ke 3 cara dibawah akan menghasilkan nilai yang sama
3
Total = Application.WorksheetFunction.Sum(Range("A1:A12"))
4
Total = WorksheetFunction.Sum(Range("A1:A12"))
5
Total = Application.Sum(Range("A1:A12"))
6
'namun cara dibawah ini akan error
7
'karena keyword Application/WorksheetFunction harus ada
8
Total = Sum(Range("A1:A12"))
9
10
Bab VIII. Controlling Program Flow and Making
Decisions
Pemrograman Terstruktur
GoTo Statement
IfThenElse Statement
Select Case Statement
For..Next Statement
DoLoop Statement
For EachNext Statement
Pemrograman Terstruktur
Programming terstruktur merupakan tata cara dalam mengetik kode agar program
mudah dipahami serta bisa dikembangkan lebih lanjut, terstruktur artinya program yang
besar kita pecah2 menjadi banyak fungsi/ sub sehingga lebih mudah dipelajari
Komputer akan mengeksekusi suatu kode secara berututan, dari awal hingga ketemu
keyword End, namun suatu baris perlu dianalisa, terus bisa lompat ke baris tertentu,
atau loop berapa kali sehingga mencapai nilai tertentu, atau bahkan langsung keluar
dari sub jika mencapai kondisi tertentu
How It Works
Construct
GoTo Pindah ke baris/label tertentu
If-Then Analisa perbandingan, jika true lakukan sesuatu jika false lakukan sesuatu
Select Memilih suatu tindakan berdasarkan pilihan nilai2
For-Next Melakukan action selama beberapa kali sesuai keinginan
Do-While Lakukan sesuatu sepanjang suatu kondisi benar
Do-Until Lakukan sesuatu sampai suatu kondisi tercapai
GoTo Statement
GoTo artinya program langsung berpindah ke baris/label tertentu tanpa syarat apapun,
biasanya dihindari karena mengacaukan aliran logika, dipakai hanya karena tidak ada jalan lain.
Label merupakan nama yang diikuti tanda titik dua (:), kita boleh memiliki label sebanyak
apapun. Label merupakan pengganti baris yang ada di jaman BASIC dulu
Visual Basic
Sub GoToDemo()
UserName = InputBox("Enter
1 Sub GoToDemo()
2 UserName = InputBox("Enter Your Name: ")
3
4 If UserName <> "Bill Gates" Then
5 GoTo WrongName
6 End If
7
8 MsgBox ("Welcome Bill...")
9
10 ' ...[More code here] ...
11
12 Exit Sub
13
14 WrongName:
15 MsgBox "Sorry. Only Bill Gates can run this."""
16 End Sub
17
18 'Versi yang lebih bagus
19 Sub GoToDemo2()
20 UserName = InputBox("Enter Your Name: ")
21
22 If UserName <> "Bill Gates" Then
23
24 MsgBox "Sorry. Only Bill Gates can run this."
25 Exit Sub
26
27 End If
28
29 MsgBox ("Welcome Bill...")
30
31 ' ...[More code here] ...
32
33
34
35 End Sub
IfThenElse Statement
Menjalankan suatu perintah atau group perintah berdasarkan suatu kondisi
Syntax
jika statements/elsestatement lebih dari satu baris kita pisahkan dengan titik dua (:)
If condition Then
End If
Argumen
Part Description
Harus ada, suatu perbandingan yang akan menghasilkan True, false atau null
condition
(dianggap sebagai false)
Optional jika kita buat dalam bentuk blok if; harus ada jika kita buat dalam
statements
satu baris , dijalankan jika kondisi True.
condition-n Optional. Sama seperti condition.
elseifstatements Optional. dijalankan jika condition-n True.
elsestatements Optional. dijalankan jika tidak ada kondisi yang benar
Contoh
Visual Basic
'Contoh if satu baris
If A > 10 Then A = A + 1 : B = B
1 Sub ShowDiscount2()
2 Dim Quantity As Integer
3 Dim Discount As Single
4 Quantity = InputBox("Enter Quantity: ")
5
6 If Quantity > 0 And Quantity < 25 Then
7 Discount = 0.1
8 ElseIf Quantity >= 25 And Quantity < 50 Then
9 Discount = 0.15
10 ElseIf Quantity >= 50 And Quantity < 75 Then
11 Discount = 0.2
12 ElseIf Quantity >= 75 Then
13 Discount = 0.25
14 End If
15
16 MsgBox "Discount: " & Discount
17 End Sub
semua kondisi akan dijalankan dulu sebelum mencapai kondisi yang benar, hal ini merupakan
pemborosan karena menjadikan program lambat
Untuk memilih lebih dari 2 kondisi lebih baik kita pakai select case, coba kita lihat code dibawah
ini
Visual Basic
Sub Show Discount3()
1 Sub ShowDiscount3()
2
3 Dim Quantity As Integer
4 Dim Discount As Double
5 Quantity = InputBox("Enter Quantity: ")
6
7 Select Case Quantity
8 Case 0 To 24
9 Discount = 0.1
10
11 Case 25 To 49
12 Discount = 0.15
13
14 Case 50 To 74
15 Discount = 0.2
16
17 Case Is >= 75
18 Discount = 0.25
19
20 End Select
21 MsgBox "Discount: " & Discount
22 End Sub
Syntax
End Select
Part Description
testexpression harus ada. bisa numeric atau string expresion
harus ada, berisi numeric atau string, bisa merupakan range angka misalnya 1
expressionlist-
to 100 namun harus dari kecil ke besar (tidak bisa 100 to 1) , bisa terdiri dari
n
beberapa kondisi dipisahkan dengan koma
Optional. satu atau beberapa baris kode yang akan dijalankan jika sesuai
statements-n
dengan expressionlist-n.
Optional. satu atau beberapa baris kode yang akan dijalankan jika tidak ada
elsestatements
yang cocok
Contoh
Visual Basic
Sub test_selectCase()
1 Sub test_selectCase()
2
3 Number = 8 ' isi variabel
4
5 Select Case Number ' evaluasi number.
6 Case 1 To 5 ' Number between 1 and 5, inclusive.
7 Debug.Print "Between 1 and 5"
8
9 ' hanya baris ini yang akan dieksekusi
10 Case 6, 7, 8 ' Number between 6 and 8.
11 Debug.Print "Between 6 and 8"
12 'langsung ke end select
13
14 Case 9 To 10 ' Number is 9 or 10.
15 Debug.Print "Greater than 8"
16
17 Case Else ' Other values.
18 Debug.Print "Not between 1 and 10"
19 End Select
20
21 End Sub
begitu ketemu dengan kondisi maka group code yang sesuai akan dieksekusi dan akan langsung
keluar dari select case sehingga program lebih efisien
For..Next Statement
Melakukan looping/ perulangan atas suatu group kode sebanyak angka yang ditentukan
Syntax
For counter = start To end [Step step] [statements] [Exit For] [statements]
Next [counter]
Part Description
counter Harus ada , berupa numerik variabel
start harus ada merupakan awal dari loop.
end harus ada, akhir dari loop.
Optional. yaitu berapa jarak tiap looping antar star dan end, bisa positif bisa
step
negatif, kalau diabaikan defaultnya adalah 1
statements Optional. kode yang mau dieksekusi
Contoh
Visual Basic
Sub test_loop()
Dim Words, Chars, MyString
For Words = 10 To 1 Step -1
For Chars = 0 To 9 ' Set u
1 Sub test_loop()
2 Dim Words, Chars, MyString
3 For Words = 10 To 1 Step -1 ' Set up 10 repetitions.
4 For Chars = 0 To 9 ' Set up 10 repetitions.
5 MyString = MyString & Chars ' Append number to string.
6 Next Chars ' Increment counter
7 MyString = MyString & " " ' Append a space.
8 Next Words
9 Debug.Print MyString
10 'akan menghasilkan
11 '0123456789 0123456789 0123456789 0123456789 0123456789
12 '0123456789 0123456789 0123456789 0123456789 0123456789
13 End Sub
14
15 Sub isi_cells()
16 For baris = 1 To 10
17 For kolom = 1 To 10
18 Selection.Offset(baris, kolom) = baris * kolom
19 Next kolom
20 Next baris
21 End Sub
hasilnya
DoLoop Statement
Mengulangi/loop block of statements selama kondisi True atau sampai suatu kondisi
terpenuhi.
Syntax
Do
[statements] [Exit Do] [statements]
Part Description
Optional. Numeric expression or string expression that is True or False. If condition
condition
is Null, condition is treated as False.
statements One or more statements that are repeated while, or until, condition is True.
Remarks
Any number of Exit Do statements may be placed anywhere in the DoLoop as an alternate
way to exit a DoLoop.Exit Do is often used after evaluating some condition, for example,
IfThen, in which case the Exit Do statement transfers control to the statement immediately
following the Loop.
When used within nested DoLoop statements, Exit Do transfers control to the loop that is one
nested level above the loop where Exit Do occurs.
Visual Basic
Sub test_do_loop()
Dim Check, Counter
Check = True: Counter = 0 '
Do ' Outer loop.
1 Sub test_do_loop()
2 Dim Check, Counter
3 Check = True: Counter = 0 ' Initialize variables.
4 Do ' Outer loop.
5 Do While Counter < 20 ' Inner loop.
6 Counter = Counter + 1 ' Increment Counter.
7 If Counter = 10 Then ' If condition is True.
8 Check = False ' Set value of flag to False.
9 Exit Do ' Exit inner loop.
10 End If
11 Loop
12 Loop Until Check = False ' Exit outer loop immediately.
13
14 End Sub
15
Syntax
Next [element]
Part Description
Harus ada. Variable yang digunakan untuk looping seluruh elemen yang
element
dimiliki/terdapat pada koleksi object/array
group Harus ada. Nama dari koleksi object/array
statements Optional. Sekelompok grup kode
Remarks
Contoh
Visual Basic
Sub test_For_each()
Dim w s As Worksheet
1 Sub test_For_each()
2 Dim ws As Worksheet
3 ' Iterate through each element.
4 'thisworkbook.worksheets (make s) merupakan
5 'group karena merupakan worbook yang
6 'terdiri dari beberapa worksheet
7 'sedang worksheet merupakan element
8 'variable ws merupakan Object variable yang berisi worksheet
9 For Each ws In ThisWorkbook.Worksheets
10 strWsName = strWsName & " " & ws.Name
11 Next
12 Debug.Print strWsName
13 'akan menghasilkan
14 'Sheet1 Sheet2 Sheet3
15 End Sub
16
17
18
19
Contoh 2
Visual Basic
Sub test_for_each2()
Dim sel As Range
For Each sel In Selection.Cells
K=K+1
1 Sub test_for_each2()
2 Dim sel As Range
3 For Each sel In Selection.Cells
4 K=K+1
5 sel.Value = K
6 Next
7 End Sub
Hasilnya
Bab IX. Automatic Procedures and Events
Event/keadaan yang terjadi di Excel
Membuat prosedur yang dijalankan setiap kali workbook dibuka
Workbook Events lainnya
Events2 lain yang berhubungan dengan Worksheet dan range
Events yang berhubungan dengan Object Excel
Ketik kode berikut ini
Visual Basic
Jika workbook dibuka pada hari selasa misalnya maka akan muncul tampilan ini
1 'Program ini akan menanyakan apakah backup file akan dibikin
2 Private Sub Workbook_BeforeClose(Cancel As Boolean)
3 Dim Msg As String
4 Dim Ans As Integer
5 Dim FName As String
6
7 Msg = "Would you like to make a backup of this file?"
8 Ans = MsgBox(Msg, vbYesNo)
9
10 If Ans = vbYes Then
11 FName = "F:\BACKUP\ & ThisWorkbook.Name"
12 ThisWorkbook.SaveCopyAs FName
13 End If
14 End Sub
15
16 'Program ini akan mencegah orang menyimpan dng nama lain (Save As)
17 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
18 If SaveAsUI Then
19 MsgBox "You cannot save a copy of this workbook!"""
20 Cancel = True
21 End If
22 End Sub
1 'Program ini akan mengeluarkan dialog format angka jika sel yang diklik kanan
2 'berisi angka (cancel=true artinya shortcut menu tidak akan muncul)
3 Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
4
5 If IsNumeric(Target) And Not IsEmpty(Target) Then
6 Application.Dialogs(xlDialogFormatNumber).Show
7 Cancel = True
8 End If
9 End Sub
10
11
12 'Program ini akan mencegah user mengisi cell "A1" dengan non numeric
13 Private Sub Worksheet_Change(ByVal Target As Range)
14 If Target.Address = "$A$1" Then
15 If Not IsNumeric(Target) Then
16 MsgBox "Enter a number in cell A1."""
17 Range("A1").ClearContents
18 Range("A1").Activate
19 End If
20 End If
21 End Sub
22
OnTime
Akan terjadi sesuai waktu yang telah diset
Visual Basic
'harus dipastikan komputer hidu
'akan terjadi
Sub SetAlarm()
'akan memanggil sub display
1 'harus dipastikan komputer hidup sampai saat yang ditentukan jika tidak maka events
2 ini tidak
3 'akan terjadi
4 Sub SetAlarm()
5 'akan memanggil sub display alarm pada jam 3 pm
6 Application.OnTime 0.625, "DisplayAlarm"
7 Application.OnTime TimeValue("3:00:00 pm"), "DisplayAlarm"
8
9 'akan memanggil sub display alarm pada tanggal 12/31/2013 jam 5:00 pm
10 Application.OnTime TimeValue("12/31/2007 5:00 pm"),
11 "DisplayAlarm"
12
13 'akan memanggil sub display alarm 5 detik lagi
14 Application.OnTime Now + TimeValue("00:00:05"),
15 "DisplayAlarm"
16 End Sub
17
18 Sub DisplayAlarm()
Beep
MsgBox "Wake up. Its time for your afternoon break!"""
End Sub
Keyboard Events
lihat contoh dibawah ini
Visual Basic
'taruh di module code
'akan mengubah tombol pagedo
'page up menjadi naik cuma 1 ba
Sub Setup_OnKey()
Userform
Userform adalah basic dari VBA jika kita mau membuat antar muka/interface. VBA
sederhananya kan adalah script/macro yang kita jalankan via macro dialogs. namun jika kita
ingin berinteraksi dengan pengguna kita harus menggunakan antarmuka/interface agar user
bisa mengisi text atau memilih option2 pada program /script kita agar lebih sempurna dalam
eksekusinya
Misalnya kita mau membuat suatu fungsi yang bisa mengubah text di range kita menjadi huruf
besar semua/huruf kecil semua, jika kita tidak menggunakan form maka kita harus membuat 2
script yaitu script huruf besar dan script huruf kecil. dengan form tidak perlu karena nanti akan
muncul form/jendela dimana kita bisa memilih mau huruf besar/huruf kecil
memilih range
Membuat daftar
menampilkan gambar
dll
Form merupakan container/ tempat menaruh semua control2 yang kita butuhkan dalam
program misalnya :
Karena VBA adalah Object Oriented Programming maka userform merupakan suatu Object
yang memiliki Collection (kumpulan object yang sama), Properties
(Behavior,penampilan),Methods (kegiatan) serta Events (Peristiwa)
Berikut adalah Properties yg penting dari userform yang akan menentukan penampilan/option2
yang ada di userform
Name =merupakan nama dari userform yang berguna untuk keperluan coding
BackColor = background color of the form.
Caption =Merupakan title/judul dari form yang akan nampak pada saat eksekusi
Height = Tinggi/height of the form.
StartUpPosition =awal dari penampakan form
Width = lebar/width of the form.
Methods
Load = membuka form ke dalam memory namun belum menampilkannya
Unload = menutup form dari memory
Show =load dan menampilkan di layar
Untuk menampilkan form kita gunakan
Visual Basic
userform1.show
1 userform1.show
Unload userform1
1 Unload userform1
Initialize, terjadi sebelum form ditampilkan, digunakan biasa untuk mengisi variabel
atau meresize/move control, mengisi listbox/combobox/controls lain
Terminate, terjadi setelah kita meng-Unload/close userform
Untuk membuat code kita tinggal klik 2x pada userform atau control atau klik kanan dan
pilih View Code
Defaultnya adalah event Click
Kita ubah dengan klik pada panah bawah, lalu pilih events yang sesuai
Kita tulis code jika sudah cocok eventsnya
Listbox Control
Menampilkan suatu daftar nilai/tabel dan kita memilih satu/lebih nilai didalamnya
Kita klik listbox ikon diatas lalu kita buat diuserform dengan klik dan drag untuk menentukan
letak dan sizenya
secara default nama listbox adalah listbox1, lalu jika kita bikin lagi maka dinamain
listbox2, dst
Bisa juga terdiri dari beberapa kolom sehingga kita bisa memindahkan range di Excel ke
dalam listbox
Mengisi Listbox
Untuk mengisinya kita gunakan methods Additem (item, index) , jika Index diabaikan
maka akan ditambahkan ke akhir list
Visual Basic
Private Sub AddItem1()
'Hapus dulu isi yang ada di lis
ListBox1.Clear
Agar lebih terstruktur dan enak dibaca kita pakai struktur With .. End With
Visual Basic
Visual Basic
Untuk menampilkan isinya kita pakai property value/text (karena value merupakan
property default maka bisa kita gunakan hanya listbox1 saja)
Visual Basic
Kita bisa memilih single atau multiple value, dan bisa ditampilkan dalam bentuk pilihan
atau checkmark, artinya jika multiple kita bisa memilih lebih dari satu item
Kita bisa gunakan code atau edit di propertiesnya
Visual Basic
Jika terpilih kita bisa mengetahui dengan property Selected(item), yang akan
menghasilkan True jika terpilih, jika tidak akan menghasilkan False
ini cara memilih jika listbox bersifat multiple
Visual Basic
ListBox Events
Events yang banyak dipakai di listbox adalah Change dan Dbl_Click
Change terjadi jika isi berubah/atau item yang terselect berubah, ini contohnya
Visual Basic
Event Double_Click biasa digunakan untuk melakukan suatu tindakan atas item tertentu
di listbox
Visual Basic
Program ini akan menampilkan sebuah window yang ada tombolnya, yang jika tombol tersebut
kita klik maka akan muncul kotak dialog dengan tulisan Hello World
Langkah-2nya
ini hasilnya
Cara lain yaitu kita buatkan macro/prosedur untuk menampilkan form tadi
Sub HelloWorld()
UserForm1.Show
1 Sub HelloWorld()
2
3 UserForm1.Show
4
5 End Sub
15.
16. atau
17. Kita taruh di Quick Access Toolbar (QAT)
18. Klik panah dikanan QAT
19. Pilih More Command
20. Pilih Macros > Helloworld
21. Klik Add, lalu akan muncul nama Helloworld dikotak sebelah kanan
22. Klita pilih (klik) lalu klik button modify
23. Pilih Iconnya lalu OK
24. Klik OK sekali lagi
25.
26. akan muncul ikon helloworld di QAT
27.
28. untuk menjalankan kita klik ikon tadi
29. Selesai.
Close workbooks
Kita akan pelajari step by step bagaimana membuat program/utilities seperti di e-Audit Utilities,
yaitu Close workbooks
7.
8. Akan muncul jendela userform
9. Kita beri nama dan Caption dulu
10. Kita beri nama yang informatif agar pada saat coding mudah dibaca
11. Caption untuk title yang muncul pada jendela userform
12.
13.
14. Jika sudah kita tempat control listbox untuk menampung nama2 workbook yang mau
diclose
15. Kita klik listbox pada Toolbox lalu klik dan drag sesuai ukuran yang kita inginkan pada
userform kita
16.
17. Jika sudah kita edit properties dari listbox tersebut
18. Pertama dan paling penting adalah kasih nama
19. berguna saat coding biar tidak keliru karena lstWorkbooks lebih informatif daripada
listbox1
20. Oleh karena itu kita ganti namanya dari listbox1 menjadi lstWorkbooks
21. Kita ingin agar kita bisa memilih lebih dari satu item, maka kita ubah di
bagian MultiSelect, kita pilih 1 fmMultiSelectMulti, dimana kita untuk menselect kita
klik dan untuk un-Select maka kita klik lagi (kayak tombol On-Off)
22. Kalau fmMultiSelectExtended, kita klik dulu diawal baru Shift+Klik dibagian akhir (kayak
ngeblok di Excel), bisa juga gunakan Ctrl+Klik untuk bagian yang tidak bersambungan
23.
24.
25. Agar ada tampilan seperti Radio Button atau Checkmark maka kita pilih 1
fmListStyleOption di bagian ListStyle
26.
27.
28. Jika sudah ada isinya maka akan berbentuk seperti ini
29.
30. Lalu kita buat Tombol command untuk menurup semua workbooks yang terbuka
31. Kita tambahkan pada userform seperti cara menambahkan listbox diatas
32. kita beri nama : cmdCloseWorkbooks dan caption Close!!!
33. Selesai tinggal kita tambahkan kode untuk control2 diatas
34. bersambung ..ke Bagian 2
Ingat karena VBA merupakan Event Driven programming dimana semua Object akan berreaksi
atas action yang diberikan kepadanya, misalnya Userform pada saat load/terminate, tombol
perintah (Command Button) jika diklik, listbox jika diisi, textbox jika kita tulis didalamnya, dst.
Jadi kita akan menambahkan code pada events2 yang terjadi diprogram kita.
Untuk userform kita akan berikan kode pada saat inisialisasi, yaitu saat program dijalankan
namun userform belum tampil, disini kita akan menambahkan workbooks2 yang posisi terbuka
Begini caranya :
7.
8. Kita berikan penjelasan satu persatu
9. Kita inisialisasi dulu variabel wb sebagai workbook
10. Gunanya adalah biar gampang dibaca dan tidak membuat code yang panjang sehingga
membingungkan bagi yang membacanya, dan juga mempermudah kita dalam coding
11. Visual Basic
Dim w b As Workbook
1 Dim wb As Workbook
If TypeName(Selection) = "No
MsgBox "sorry,You must o
'tutup form dan keluar prog
Unload Me
18. Jika excel terbuka pasti ada bagian yang aktif, misalnya worksheet aktif maka
ada TypeName(Selection) akan menghasilkan Range atau shape jika kita sedang
memilih gambar di worksheet kita, namun jika posisi tidak ada workbook yang terbuka
maka code diatas akan menghasilkan Nothing
19. Lalu kita isi listbox dengan workbook yang terbuka dan posisi non Hidden
20.
21. Visual Basic
22.
23. Lengkapnya
24. Visual Basic
Dim w b As Workbook
36. Coba jalankan dengan klik pada code window dan klik Run/F5
37. Selesai
Hal ini dikarenakan jumlah faktur pajak yang bisa mencapai ribuan bahkan jutaan denga jumlah
KPP yang mencapai ratusan kantor, yang membuat kita capek karena harus melakukan
pekerjaan yang sama berulangkali. ini bisa kita otomasi menggunakan VBA
7.
8. ini adalah tampilan dari template surat
9.
10. Kita lihat yang ditandai dengan kotak merah adalah data yang perlu kita edit kita
sesuaikan dengan data kantor kita dan WP kita, oleh karena itu harap diedit dulu
11. Kita edit juga Template Lampirannya
12. Kita Link ke template surat
13. Lihar gambar dibawah ini
14.
Tips : Bisa juga anda link-kan ke file KKP Integrasi anda, jadi untuk WP lain tinggal Buka, trus
Edit Link >Change Link Source, lalu Save As sebagai File baru
Langkah2nya :
3.
4. nggak persis sama juga gak papa, karena yang penting adalah urutannya
5. untuk kolom KPP kita buat rumus sbb:
6. =IF(D2<>,LEFT(RIGHT(D2,6),3),Kosong)
7. Penjelasan rumus, biasanya 3 digit terakhir adalah kode pusat/cabang baru 3 digit
berikutnya adalah kode KPP, maka kita ambil dulu 6 dari kanan baru kita ambil dari
hasilnya, 3 dari kiri, maka ketemulah kode KPP
8. Mengapa tidak kita ambil dengan fungsi MID saja dari digit ke 9 sebanyak 3 digit??
karena kadang kode depan bisa 01 atau cuman 1, seperti data pertama
9. lalu kita buang semua faktur pajak yang PPN-nya dibawah 500 ribu (aneh bener ini
peraturan??? padahal untuk konfirmasi kredit pajak 1 perak-pun mesti dikonfirmasi, kan
sama2 duit???, perlu dilaporin KPK kayaknya ini, hehehehe)
10. Tidak perlu disort karena akan disort secara otomatis oleh macronya nanti yaitu
kode KPP,NPWP lalu Tanggal
Sheet ini akan menjumlah berapa baris data untuk tiap2 KPP/ tiap lampiran
Langkah2nya :
29.
30. Kita siap dengan Kode macronya
ini adalah kode lengkap dari otomatisasi Konfirmasi PPN, code ini terdiri dari sub prosedure
yaitu MakeLampiran dan Sort_Data
Visual Basic
'macro
untuk klarifikasi
'Bikin surat & Lampiran
Sub MakeLampiran()