Anda di halaman 1dari 149

Bab I.

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

Apa yang bisa dilakukan dengan VBA


1. 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
2. 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
3. Membuat customize command yang kalo memakai excel melibatkan beberapa kali
perintah, kemudian anda bikinkan pula tombol atau menu sehingga memudahkan kita
dalam pekerjaan sehari2
4. Menciptakan fungsi baru, misalnya fungsi penghitungan PPh 25, atau mengubah angka
menjadi terbilang (mis: 1250 menjadi seribu dua ratus lima puluh rupiah)
5. 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
6. Menciptakan satu aplikasi yang lengkap, beserta template, menu, toolbar, dialog box
maupun Help yang lengkap, misalnya GL for excel, Audit for excel, dll

Kelebihan dan Kekurangan VBA


Kelebihan VBA

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

1. Kita harus punya kemampuan untuk mem-program.


2. Orang yang ingin memakai program VBA yang kita buat harus memiliki software excel
yang sesuai versinya
3. Tidak mudah untuk membuat program yang tanpa error
4. Excel selalu berkembang sehingga program yang kita buat harus menyesuaikan dengan
perkembangan software excel

Garis besar dari VBA


Kita melakukan sesuatu di VBA baik merekam maupun 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)

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

Bab II. Macro Recording


Apa itu Macro Recording
Developer Ribbon
Step by Step Record Macros
Relative Reference
Security Option
Assign macro to quick access toolbar, Shape and Button
Saving Macros
Personal Macro Workbook

Apa itu 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

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.

Tampilan Developer Ribbon


1. Developer Ribbon
2. Tombol untuk Record macros
3. Tombol untuk menjalankan macro
4. Tombol untuk menuju VB Editor
5. Untuk menambahkan list, check box, dan control lainnya ke worksheet
6. Untuk menangani file xlm, import & export, dll

Step by Step Record Macros


1. Pilih sel mana saja di workbook aktif, lalu klik developer tab
2. Klik Record Macro (menu akan berubah menjadi Stop Recording), Record Macro Dialog
box akan muncul
3. Isi nama dari makro, mis: Name_Date (nama harus diawali oleh huruf, bisa terdiri dari
huruf, angka, dan underscore, spasi sama sekali dilarang (lihat tata cara nama di VBA))
4. Klik shortcut key dan isi dengan Shift+N (makro bisa dijalankan dengan Ctrl+Shift+N,
hati2 untuk tidak memakai shortcut yang dipakai oleh excel karena akan di
overwrite/override)
5. Macro bisa ditaruh di workbook ini, personal workbook atau workbook lain (Personal
Workbook adalah workbook yang diciptakan oleh excel, di-hide serta secara otomatis
akan dijalankan setiap kali excel dijalankan)
6. Description bisa diisi dengan keterangan, misalnya makro untuk nulis nama dan tanggal
sekarang
7. Klik OK
1. Tulis nama anda
2. Tulis =now() ,Pilih kedua sel diatas lalu format bold dan size 20
3. Stop recording

Menjalankan Macro
Pilih cell yang akan diterapkan macro bersangkutan
Klik Developer Tab
Klik macros, maka akan muncul Macro dialog box
Shortcut (Alt+F8)

Macro Dialog Box


1. Memilih nama macro yg akan dijalankan
2. Klik untuk menjalankan macro
3. Klik untuk menjalankan macro sambil debug
4. Klik untuk mengedit macro di VB Editor
5. Klik untuk mengedit properties dari macro seperti shortcut dan description
6. Untuk memilih workbook yg berisi macro

Relative Reference

1. Untuk menentukan apakah lokasi cell bersifat mutlak atau relatif


2. Untuk memunculkan macro security dialog box

Perbedaan antara absolute dan relatif reference


Absolut akan memberikan hasil yang sama, dimanapun macro dijalankan sedangkan relatif akan
menyesuaikan dengan cell atau lokasi dijalankannya macro tersebut

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

Untuk mengubah VBA/ Macro security kita

1. Klik ke Office Button >Excel Option


2. Pilih Trust Center
3.
4. Trus Klik Trust Center Setting

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

Kita klik Option > Enable this Contents


Kalau Microsoft Visual basic Editor dalam posisi terbuka akan muncul peringatan sbb:
Kita pilih Enable macros

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

Assign macro to quick access toolbar, Shape


and Button
Untuk menjalankan macro kita Klik Ribbon Developer >Macros>pilih macro yang mau
dijalankan lalu klik Run atau kita pencet shortcutnya yang kita buat pada saat perekaman

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

1. Klik Customize Quick access button


2. Klik More Command
3. Pilih Macros
4. Pilih macros yang kita inginkan
5. Klik Add
6. Klik macro kita
7. Tombol untuk menggeser posisi toolbar
8. Klik Modify
9. Pilih gambar toolbar buat macro kita
10. Klik OK

Atau bisa kita tempelkan pada Shape/Commandbutton pada worksheet

Shape
Kita buat dulu shapenya

1. Klik Ribbon Insert > Shapes


2. Pilih bentuk shape yang diinginkan
3.
4. Buat shapes di worksheet
5. kalau sudah, Klik kanan pada shape tersebut lalu pilih Assign Macros
6. Pilih macro yang diinginkan
7.
8. Klik OK
9. untuk menjalankan klik saja shape tadi maka ini hasilnya

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

Personal Macro Workbook


Kita sudah bahas diatas, bahwa macro/vba baru bisa jalan jika posisi file dalam keadaan
terbuka. Agak merepotkan jika kita harus membuka file dulu untuk menjalankannya, walopun
kita bisa menggunakan QAT/shape/form untuk menjalankannya namun tetap menambah
kerepotan kita

Ada cara lain yang bisa kita pakai yaitu memastikan bahwa file itu selalu terbuka setiap kita
menjalankan Excel. ada 2 cara yaitu :

1. Taruh VBA/Macro di personal macro workbook (personal.xlsb)


2. Taruh VBA/Macro di file apa saja lalu simpan di Excel Startup Folder, dimana semua file
excel yang ada di folder tersebut akan selalu diopen setiap kali excel jalan.

Taruh VBA/Macro di personal macro workbook (personal.xlsb)

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

Excel Startup Folder

Folder ini bisa dilihat di Excel Option, kita bisa buat sendiri atau ikut defaultnya

Untuk Office 2007

C:\Program Files (x86)\Microsoft Office\Office12\XLSTART

Untuk Office 2010

C:\Program Files (x86)\Microsoft Office\Office14\XLSTART (versi 32 bit)


C:\Program Files\Microsoft Office\Office14\XLSTART (versi 64 bit)

Hanya saja karena windows melarang perubahan di program files, maka biasanya disimpan di

C:\Users\names\AppData\Roaming\Microsoft\Excel\XLSTART

dimana names adalah nama Login kita


Kita bisa juga membuat sendiri folder startup kita, kita pilih di Excel Option

Bab III. Bekerja dengan Visual Basic Editor


(VBE)
Pengenalan Visual Basic Editor
o Project Explorer
o Object Browser
o Immediate Window
Customizing VB Editor
Modifikasi VBA Project

Pengenalan Visual Basic 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)

Cara membuka VBE


1. Cara 1, Klik developer tab, klik tombol visual basic
2. Cara 2, Shortcut Alt+F11
3. Cara 3, Buka macro dialog box (Alt+F8), pilih macro yang mau diedit, lalu klik edit
4. Akan muncul jendela baru dengan nama Microsoft Visual basic

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

7. Locals, untuk debugging


8. Watcher, untuk 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

Shortcut untuk menampilkan Ctrl+R

Berikut adalah project explorer yang menampilkan e-Audit Utilities Project


Jika kita klik kanan item2 di project explorer maka akan muncul menu 2 sbb :
Object Browser
Object Browser berguna jika kita ingin mengetahui semua object yang ada du excel dan
mengetahui apa saja properties, methods dan events. sebagai tambahan kita juga dapat
mengetahui semua procedures dan constants yang tersedia di project kita.
Immediate Window
Immediate windows adalah suatu jendela yang memiliki banyak fungsi, antara lain :

Sebagai konsole/tempat menampilkan hasil. Dengan perintah : debug.print xxxxx, maka


xxxx akan ditampilkan dijendela immediate
Sebagai konsole untuk melakukan suatu perintah tertentu
sebagai konsole untuk menampilkan suatu variable tertentu, jika pada saat break mode,
maka variable akan bisa ditampilkan sesuai scopenya
Sebagai konsole buat melalukan fungsi/ perhitungan tertentu

Lihat gambar dibawah ini

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

Specifies the font used for all code.

Size

Specifies the size of the font used for code.

Margin Indicator Bar

Makes the margin indicator bar visible or invisible.


Sample

Displays sample text for the font, size, and color settings.

General

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

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

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

Kita klik kanan di headernya lalu klik Dockable (buang checkmark-nya)


disini posisi window2-nya terlihat lepas dan bisa dipindah2kan dengan mudah sesuai keinginan
kita

Modifikasi VBA Project


1. Pilih Project di Project Explorer Window
2. Klik kanan untuk memunculkan menu
3. Pilih dan klik VBAProject Properties
General setting

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

Membuat prosedure baru


Pilih module yang akan ditambahkan prosedure
Klik menu Insert->Procedure

Isi name dangan nama procedure yang diinginkan


Pilih sub di Type (default)
Pilih public di Scope (Default)

Akan menghasilkan sbb :


Prosedure ada Sub prosedure dan Function Procedure, sub biasanya 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 IV. Excel Obyek dan VBA Sub & Procedure


Introducing the Excel Object Model
Object, Properties, Methods, dan Events
Menelusuri lebih lanjut tentang Object di Excel
Sub Procedure dan Function Procedure
Gaya pemrograman yang baik

Introducing the Excel Object Model


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

Object, Properties, Methods, dan Events


Object
VBA merupakan pemrograman berbasis Object (OOP), artinya semua adalah Object, kita adalah
Object, Alam semesta adalah Obyek, Excel, workbook, worksheet, range, cell adalah object

Contoh : Obyek hirarki dari font object


Disini terlihat bahwa excel/application obyek memiliki sub objek workbook
Workbook memiliki member a.l: worksheet
Worksheet memiliki sub object range
Range memiliki object font, dst..dst.

Collection
Collection artinya sekumpulan obyek yang sama, misalnya :

workbooks artinya sekumpulan workbook (misalnya kita membuka lebih dari 1


workbook dalam suatu waktu)
Worksheets artinya sekumpulan worksheet dalam 1 workbook (jika dalam workbook
kita memiliki lebih dari satu sheet)
Cells sekumpulan cell
Untuk merujuk ke suatu obyek diantara collection/ kumpulan kita gunakan nama atau indexnya
sebagai petunjuk, 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 :

Mengetahui apakah suatu file/workbook sudah disave atau belum (saved)


Mengisi suatu cell dengan nilai tertentu (value property)
mengubah font dari suatu cells (font property)
dll

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

Method close memiliki syntaxt sbb:

expression.Close(SaveChanges, Filename, RouteWorkbook)


expression A variable that represents a Workbook object.

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:

Private Sub Workbook_Open()

MsgBox Date & vbCrLf & Time()

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.

Menelusuri lebih lanjut tentang Object di Excel


Untuk mengetahui Object apa saja diexcel serta apa saja property, methods serta events yang
dimiliki maka kita bisa lakukan dengan :

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

To navigate the Object Browser

1. Aktifkan suatu module.


2. Klik kanan lalu pilih Object Browser
3. atau Klik menu View >Object Browser
4. Atau shortcut F2
5. lihat informasi ttg suatu Object pada Details section dibawah
6. gunakan Help button untuk menampilkan penjelasan lebih rinci
Excel Help
Kita bisa memakai fungsi search untuk mencari tahu ttg object tertentu atau kita arahkan
kursor ke code window di text object tersebut ada lalu klik F1

berikut adalah Excel Object Map


Auto List member
Jika kita mengetik di Code window maka excel akan memberikan list yang berisi properties,
methods maupun event dari object tersebut. Misalnya kita ketik

Thisworkbook.s

maka akan muncul list sbb :


Sub Procedure dan Function Procedure
Perbedaan Sub Procedure dengan Function Procedure

Tata cara pemberian nama Sub procedure/ Function

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.

Syntax dari sub prosedure


[Private | Public | Friend] [Static] Sub name [(arglist)] [statements] [Exit Sub] [statements]

End Sub

The Sub statement syntax has these parts:

Public Sub ini bisa diakses oleh prosedure/function lain


di semua module
Private Sub ini hanya bisa diakses oleh sub/function di
module yang sama
Friend Hanya digunakan di class module
Static Variable yang ada didalam sub ini nilainya
disimpan sehingga tidak berubah
arglist Variable atau sekumpulan variabel yang
merupakan argumen dari sub, dipisahkan dengan
koma, syntax:[Optional] [ByVal | ByRef]
[ParamArray] varname[( )] [As type] [=
defaultvalue]

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)

Cara untuk menjalankan Sub Prosedure


Berikut ini adalah cara2 untuk menjalankan 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()

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
Syntax dari Function prosedure
[Public | Private | Friend] [Static] Function name [(arglist)] [As type] [statements] [name =
expression] [Exit Function] [statements] [name = expression]

End Function

The Function statement syntax has these parts:

Public Function ini bisa diakses oleh prosedure/function lain di semua


module
Private Function ini hanya bisa diakses oleh sub/function di module
yang sama
Friend Hanya digunakan di class module
Static Variable yang ada didalam Function ini nilainya disimpan
sehingga tidak berubah
arglist Variable atau sekumpulan variabel yang merupakan argumen
dari function, dipisahkan dengan koma
Jadi suatu sub diawali dengan kata Function dan diakhiri dengan kata 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)

How to run a Function procedure


Dari sub/ function prosedure yang lain
Diketik di worksheet sebagai fungsi

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 :

Biasakan membuat nama sub/function, nama variabel/konstant yang sesuai dengan


tujuannya, misalnya sub Perhitungan_pajak, strNomorPokokWajibPajak, jangan sub
test,sub DoIt, strText1, intNumber2
Biasakan memberikan comment yang lengkap atas setiap baris yang dianggap penting,
ini berguna untuk dokumentasi untuk kemudian hari
Berikan prefik/awalan untuk setiap variabel/konstant untuk pengingat apa jenis type
data serta scope dari variabel/konstant tersebut, misalnya untuk variabel text/string kita
kasih prefik str , sedang jika scopenya adalah module maka prefiksnya adalah m, sehinga
digabung menjadi misalnya mstrNamaPegawai
Biasakan memberi indent atas setiap blok/group untuk mempermudah dibaca
Biasakan memberi blank line/ baris pemisah untuk setiap block/grup

Berikut adalah contoh pemrograman yang bagus

'fungsi untuk mengecek apakah sudah mendaftar atau belum


Sub CheckUpdate()
Dim strDate As String
strDate = Format(Now(), "yyyy-mm-dd")

'check apakah hari ini merupakan tanggal expire


'jika ya maka suruh register ulang
'lalu tutup add-in ini
If strDate > Format(ExpireDate, "yyyy-mm-dd") Then
FrmUpdate.Show
ThisWorkbook.Close False
Exit Sub
End If

'jika belum namum mendekati maka kasih peringatan


If strDate > 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 strDate >= strReminder Then FrmUpdate.Show
End If
End Sub

Coba bandingkan dengan style berikut ini :

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

Bab V. Essential VBA Language Elements


Berikut ini ada contoh VBA Code, disini kita bisa pelajari elemen apa saja yang ada dalam
menulis suatu code

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

procedure diatas memakai beberapa elemen penting dari VBA yaitu :

Comment (baris yang diawali dengan tanda petik tunggal/apostrophe)


Variable declaration statement (baris yang diawali dengan Dim)
Dua variables (Total dan i)
Dua assignment statements (Total = 0 dan Total = Total + i)
Looping structure (For-Next)
VBA function (MsgBox)

Maka kita akan pelajari satu persatu elemen tersebut

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()

Dim cb, cbroot

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()

Dim cb, cbroot

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

1 cb = InputBox("masukkan bilangan yg mo dicari akar pangkat tiga-nya")

dan bisa diambil valuenya untuk diproses


Visual Basic

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 :

Dim varname[([subscripts])] [As type]

Misalnya
Visual Basic

Dim DasarPengenaanPajak as in

'jika tidak secara explicit ditentuk


Dim Pajak_Terutang

1 Dim DasarPengenaanPajak as integer


2
3 'jika tidak secara explicit ditentukan maka type data adalah variant
4 Dim Pajak_Terutang
5
6 'jika digabung maka harus secara explicit disebut type datanya
7 'dibawah ini DPP bertipe variant, PPN type integer
8 Dim DPP , PPN as Integer
9
10 'Kalo yang ini semuanya bertype integer
11 Dim DPP as integer, PPN as Integer
12
13 Dim Tarif_Pajak(1 to 3) as integer
14
15 Dim Tarif_Pajak(3) as integer

[([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

misalnya code sbb:

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()

Dim myVar As Integer


myVar = 10

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

Hasilnya adalah Overflow


Scope dari variable
Scope artinya jangkauan atau luas dari variable

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

Lihat code dibawah ini


Visual Basic

Sub test_variable_lokal()

'deklarasikan variabel intLokal


Dim intLokal As Integer

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

Dim intModule As Integer


Sub test_variable_module() 'd
Dim intLokal As Integer

1 Dim intModule As Integer


2 Sub test_variable_module() 'deklarasikan variabel intLokal
3 Dim intLokal As Integer
4
5 'tampilkan hasilnya
6 MsgBox "intLokal =" & intLokal & vbCrLf & "intModule = " & intModule
7
8 'isi variabel dengan suatu angka
9 intLokal = 100
10 intModule = 200
11
12 'tampilkan hasilnya
13 MsgBox "intLokal =" & intLokal & vbCrLf & "intModule = " & intModule
14
15 End Sub
16
17 Sub test_variabel()
18
19 'jalankan sub test_variable_module
20 Call test_variable_module
21
22 'lihat apakah variabel intModule dikenali
23 'karena variabel intModule ber-scope module maka dikenali oleh sub/
24 'fungsi lain dimodule yang sama
25 'sebaliknya var intLokal tidak dikenal dan berisi blank/null karena variant
26 MsgBox "intLokal =" & intLokal & vbCrLf & "intModule = " & intModule
27
28 End Sub

Jalankan sub test_variabel

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

Ada satu lagi deklarasi variabel yaitu Static

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

Deklarasi Object Variable


Variable bisa juga diisi dengan type data object, kenapa kita harus mendeklarasikan object
sebagai variabel? ini sebenarnya cuman masalah kemudahan belaka, misalnya kode dibawah ini

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

lebih gampang diingat jika range diatas kita jadikan variabel

dim rngList as range


Set rngList =Workbooks(myfile.xlsx).worksheets(sheet1).range(A1:V100)

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] Const constname [As type] = expression

Public/private hanya boleh dipakai di module level declaration, tidak boleh di dalam prosedur

'bersifat public, artinya bisa dikenali disepnajang workbook


'dan bertype string
Public Const strDJP as string = Direktorat Jenderal Pajak

'type data single (untuk pecahan pakai single/double)


Const sngTarif_Pajak as single = 0.15
'type data integer (bulat)
Const intPTKP as integer=25000000

'type variant
Const terserah="Emang Gue pikirin type datanya"

scope seperti variable yaitu lokal, module dan publik

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 :

Dim varname([subscripts]) [As type]

Contoh :

Visual Basic
'dimulai dari 1 s.d 100, misalnya
Dim strNama(1 to 100) as string

'karena tidak ada option base m

1 'dimulai dari 1 s.d 100, misalnya strNama(1)....strNama(100)


2 Dim strNama(1 to 100) as string
3
4 'karena tidak ada option base maka dimulai dari 0
5 'jadi array dibawah ini dimulai dari 0 s.d 100
6 Dim strNames(100) as string
7
8 'dinamis, akan berubah saat runtime
9 Dim intSales() as integer
10
11 'array multidimensi, misalnya lngData(1,1) ... lngData(12,100)
12 Dim lngData(1 to 12, 1 to 100) as long
13 'atau kalo diexcel
14 dim sel(baris,kolom) as long

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

Memindahkan isi array ke variabel array lainnya


Array bisa dipindahkan atau dicopykan ke variabel array lainnya, syaratnya adalah :

variabel yang mau diisi adalah array dinamis atau variant


jika dicopykan ke suatu array dinamis maka harus bertype sama

lihat contoh dibawah ini

Visual Basic
Sub copy_array()

'kedua arrau\y dibaw ah ini be


Dim astr1(0 To 9) As String

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

Bab VI. Working with Objects


Range Objects
o Cara merujuk/refer to range
o Cara lain merujuk ke range
o Property penting dari range Object
o Methods penting dari range Object

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

Cara merujuk/refer to range


Warning: array_merge() [function.array-merge]: Argument #2 is not an array in
/home/content/38/8910438/html/eoditor/wp-content/plugins/crayon-syntax-
highlighter/crayon_highlighter.class.php on line 313

Untuk merujuk ke range gunakan :

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")

'merujuk ke range B1:B5

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")

8. Kata range diikuti dengan Nama yang telah didefinisikan, misalnya


9. Visual Basic

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")

'sama seperti diatas

1 'merujuk ke cell A1:C5


2 range("a1","c5")
3
4 'sama seperti diatas
5 Range(Cells(1, 1), Cells(3, 5))

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

'akan menghasilkan $A$1


Range("A1").Address

'akan menghasilkan $B$2

1 'akan menghasilkan $A$1


2 Range("A1").Address
3
4 'akan menghasilkan $B$2
5 Range("B2:C5").Range("A1").address

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")

Cara lain merujuk ke range


Selain menggunakan kata range kita bisa pakai property Cells dan Offset

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)

'geser 1 baris keatas, dan 2 kolo

1 'geser 1 baris kebawah, dan 2 kolom ke kanan menghasilkan C2


2 Range("A1").Offset(1, 2)
3
4 'geser 1 baris keatas, dan 2 kolom ke kiri, menghasilkan A1
5 Range("C2").Offset(-1, -2)
6
7 'tidak bergeser, hasilnya ya tetep A1
8 Range("A1").Offset(0, 0)

Selection
Selection artinya range yang sekarang sedang dalam posisi terselect

lihat code berikut ini

Visual Basic
'akan menghasilkan range yang
selection.address

1 'akan menghasilkan range yang terselect di activesheet


2 selection.address

Memanipulasi seluruh cell dalam selection

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

Property penting dari range Object


Property adalah karakteristik dari suatu Object, yang dapat kita set/ubah nilainya atau kita lihat
hasilnya

Jika property bersifat read-only maka kita tidak bisa mengeset/mengubah property tersebut
hanya dapat mengetahui nilainya saja

Address & AddressLocal Property


Menghasilkan alamat dari suatu range, kalo addresslocal akan menghasilkan alamat sesuai
bahasa dari PC. misalnya R=row dalam bahasa english, kalo bahasa jerman menjadi Z

Syntax :

AddressLocal(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

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

Value property dan Text property


Kalau value adalah nilai yang tersimpan di cell sedangkan text adalah nilai yang terlihat di cell

Jadi jika cell terpilih (bisa kita rujuk dengan keyword Selection) kita isi dengan 12548596000
lalu kita format Comma maka :

code selection.value akan menghasilkan nilai 12548596000

Sedangkan code selection.text akan menghasilkan 12,548,596,000.00

Text adalah property read-only

Formula Property dan Formula R1C1 Property


Formula property akan memberikan nilai berupa formula yang terdapat pada suatu cell seperti
yang ditampilkan di formula bar (termasuk tanda =) , jika isinya konstant maka akan dihasilkan
nilai konstant tsb.

Sedang FormulaR1C1 akan menghasilkan formula namun dengan notasi R1C1 (Row dan Column
relatif terhadap sel yang berisi formula)

Property ini akan error jika range lebih dari 1 cell

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)

Font Property dan Interior Property


Font property akan menghasilkan Font Object yang juga memiliki Property dan methods, begitu
juga Interior Property

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 :

Column, menghasilkan kolom dari sel pertama dari range, misalnya


range(B2:C10).column akan menghasilkan 2 karena yang dilihat adalah sel B2
Row, sama seperti column hanya akan menghasilkan baris
Columns dan Rows akan menghasilkan range , misalnya worksheets(1).Rows(2) akan
menghasilkan baris yang kedua
Count, akan menghasilkan jumlah cells dalam range
CurrentRegion, akan menghasilkan current region range, yaitu area yang dibatasi oleh
blank row dan blank kolom (seperti menekan Ctrl+A)
UsedRange, akan menghasilkan semua cell dari A1 sampai cell terakhir yang digunakan
Numberformat, FormatConditions , HorizontalAlignment , IndentLevel , Orientation ,
Style adalah contoh property yang berhubungan dengan format cells
dll

Methods penting dari range Object


Methods merupakan action yang bisa dilakukan pada range object, jadi tidak bisa
diset/diubah atau diketahui isinya namun hanya bisa dieksekusi
Select Methods
Untuk memindahkan sel aktif ke sel lain maka kita menggunakan select, namun hanya
berlaku pada worksheet aktif jadi kalo kita ingin memindahkan ke cell di worksheet lain
maka kita harus aktifkan dulu worksheet bersangkutan dengan methods Activate
Visual Basic
'Error w hen Sheet1 is not active
Sheets("Sheet1").Range("A1:C1

'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

Copy and Paste methods


Untuk mengcopy suatu range kita gunakan Copy methods dari object range namun
untuk mem-paste kita harus gunakan Paste methods dari Object worksheet
atau kita gunakan cara lebih mudah yaitu dengan mengisi argumen destinationnya
Sintaxt :
expression.Copy(Destination)
Destination adalah optional, jika tidak kita isi maka akan dicopy ke clipboard/memory
Contoh:
Visual Basic
Sub CopyRange()
'cara lebih ribet
'pilih dulu rangenya
Range("A1:A12").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

Bab VII. Using VBA and Worksheet Functions


Apa itu fungsi
Cara memahami Built-in VBA Function Syntaxt
Menggunakan Worksheet Function di VBA

Apa itu fungsi


Fungsi adalah suatu perhitungan matematis yang akan menghasilkan suatu nilai tertentu, di
VBA ada 3 jenis fungsi yaitu :

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

Cara memahami Built-in VBA Function Syntaxt

Misalnya kita lihat fungsi

Replace Function

menghasilkan suatu string dimana sebagian karakternya telah digantikan dengan karakter lain

Syntax

Replace(expression, find, replace[, start[, count[, compare]]])

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

Constant Value Description


vbUseCompareOption 1 sesuai dengan Option Compare statement.
vbBinaryCompare 0 Default. binary comparison. case sensitive
vbTextCompare 1 textual comparison. tidak case sensitive
Microsoft Access only. Performs a comparison based on information in
vbDatabaseCompare 2
your database.

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 = &quot;Returns A String In Which A specified Substring Has Been Replaced With Another
5 Substring A Specified Number Of Times&quot;
6
7 &#039;print aslinya
8 Debug.Print strAsli
9
10 &#039;membuang semua spasi yang ada
11 Debug.Print Replace(strAsli, &quot; &quot;, &quot;&quot;)
12
13 &#039;karena start=10, maka pengambilan karakter dimulai dari
14 &#039;karakter ke 10
15 &#039;lalu semua spasi yang ada dibuang
16 Debug.Print Replace(strAsli, &quot; &quot;, &quot;&quot;, 10)
17
18 &#039;membuang hanya 3 spasi pertama
19 &#039;jika dikosongkan atau diabaikan maka start dianggap dari awal/1
20 Debug.Print Replace(strAsli, &quot; &quot;, &quot;&quot;, , 3)
21
22 &#039;ganti hanya huruf A kapital
23 Debug.Print Replace(strAsli, &quot;A&quot;, &quot;1&quot;)
24
25 &#039;ganti semua huruf A atau a
26 Debug.Print Replace(strAsli, &quot;A&quot;, &quot;1&quot;, , , vbTextCompare)
27
End Sub

Menggunakan Worksheet Function di VBA


Kita dapat memakai fungsi2 di Excel worksheet di VBA kita, misalnya daripada kita melakukan
perulangan/loop untuk menghitung jumlah suatu range kita bisa gunakan fungsi =SUM

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
&#039;ke 3 cara dibawah akan menghasilkan nilai yang sama
3
Total = Application.WorksheetFunction.Sum(Range(&quot;A1:A12&quot;))
4
Total = WorksheetFunction.Sum(Range(&quot;A1:A12&quot;))
5
Total = Application.Sum(Range(&quot;A1:A12&quot;))
6
&#039;namun cara dibawah ini akan error
7
&#039;karena keyword Application/WorksheetFunction harus ada
8
Total = Sum(Range(&quot;A1:A12&quot;))
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

Contoh Penggunaan goto dan versi yang lebih terstruktur

Visual Basic
Sub GoToDemo()
UserName = InputBox("Enter

If UserName <> "Bill Gates" T

1 Sub GoToDemo()
2 UserName = InputBox(&quot;Enter Your Name: &quot;)
3
4 If UserName &lt;&gt; &quot;Bill Gates&quot; Then
5 GoTo WrongName
6 End If
7
8 MsgBox (&quot;Welcome Bill...&quot;)
9
10 &#039; ...[More code here] ...
11
12 Exit Sub
13
14 WrongName:
15 MsgBox &quot;Sorry. Only Bill Gates can run this.&quot;&quot;&quot;
16 End Sub
17
18 &#039;Versi yang lebih bagus
19 Sub GoToDemo2()
20 UserName = InputBox(&quot;Enter Your Name: &quot;)
21
22 If UserName &lt;&gt; &quot;Bill Gates&quot; Then
23
24 MsgBox &quot;Sorry. Only Bill Gates can run this.&quot;
25 Exit Sub
26
27 End If
28
29 MsgBox (&quot;Welcome Bill...&quot;)
30
31 &#039; ...[More code here] ...
32
33
34
35 End Sub

IfThenElse Statement
Menjalankan suatu perintah atau group perintah berdasarkan suatu kondisi

Syntax

If condition Then [statements] [Else elsestatements]

jika statements/elsestatement lebih dari satu baris kita pisahkan dengan titik dua (:)

Atau gunakan yang lebih terstruktur

If condition Then

[statements] [ElseIf condition-n Then


[elseifstatements] [Else
[elsestatements]]

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

'sebaiknya dibuat blok/group su

1 'Contoh if satu baris


2 If A &gt; 10 Then A = A + 1 : B = B + A : C = C + B
3
4 'sebaiknya dibuat blok/group supaya lebih mudah dibaca/dipahami
5 If A &gt; 10 Then
6 A=A+1
7 B=B+A
8 C=C+B
9 End If
10
11 Dim Number, Digits, MyString
12 Number = 53 ' Initialize variable.
13
14 'check kondisi
15 If Number &lt; 10 Then
16 'jalankan jika terpenuhi/true
17 Digits = 1
18
19 'jika tidak kita kondisikan lagi
20 ElseIf Number &lt; 100 Then
21 ' Condition evaluates to True so the next statement is executed.
22 Digits = 2
23
24 'tidak ada kondisi yang terpenuhi
25 Else
26 Digits = 3
27
28 'akhir if..endif
29 End If

Select Case Statement


If..then..else berguna jika kita hanya memiliki sedikit kondisi namun jika kita dihadapkan pada
lebih dari 2 kondisi kita patut pertimbangkan select case

lihat kode dibawah ini


Visual Basic
Sub Show Discount2()
Dim Quantity As Integer
Dim Discount As Single
Quantity = InputBox("Enter Qu

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()

Dim Quantity As Integer


Dim Discount As Double

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

lebih mudah untuk dipahami bukan?

Syntax

Select Case testexpression


[Case expressionlist-n
[statements-n]] [Case Else
[elsestatements]]

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()

Number = 8 ' isi variabel

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 &#039; Set up 10 repetitions.
4 For Chars = 0 To 9 &#039; Set up 10 repetitions.
5 MyString = MyString &amp; Chars &#039; Append number to string.
6 Next Chars &#039; Increment counter
7 MyString = MyString &amp; &quot; &quot; &#039; Append a space.
8 Next Words
9 Debug.Print MyString
10 &#039;akan menghasilkan
11 &#039;0123456789 0123456789 0123456789 0123456789 0123456789
12 &#039;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 [{While | Until} condition] [statements] [Exit Do] [statements]


Loop

Or, you can use this syntax:

Do
[statements] [Exit Do] [statements]

Loop [{While | Until} condition]

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 &#039; Initialize variables.
4 Do &#039; Outer loop.
5 Do While Counter &lt; 20 &#039; Inner loop.
6 Counter = Counter + 1 &#039; Increment Counter.
7 If Counter = 10 Then &#039; If condition is True.
8 Check = False &#039; Set value of flag to False.
9 Exit Do &#039; Exit inner loop.
10 End If
11 Loop
12 Loop Until Check = False &#039; Exit outer loop immediately.
13
14 End Sub
15

For EachNext Statement


mengulang/loop untuk tiap element pada array atau collection.

Syntax

For Each element In group

[statements] [Exit For] [statements]

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

' Iterate through each elemen

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

Event/keadaan yang terjadi di Excel


Di Excel dimungkinkan untuk diotomatisasinya suatu action jika terjadi suatu peristiwa, apa
peristiwa tersebut, banyak sekali sesuai dengan Object yang diinginkan. Misalnya :

Suatu workbook dibuka atau di-close


Suatu window di-activated.
suatu worksheet diaktifkan atau deactivated.
Data dientry ke cell atau cell di-edit.
Workbook di-saved.
worksheet di-calculated.
object, seperti button di-click
keyboard ditekan
hari/waktu tertentu terjadi/tiba
untuk detailnya bisa dilihat ditiap events di setiap object

Membuat prosedur yang dijalankan setiap kali


workbook dibuka
Buka VBE
Pilih Workbook yang diinginkan di project explorer
Pilih folder ThisWorkbook dan klik2x / klik kanan->View 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


Ketik kode berikut ini
Visual Basic

Private Sub Workbook_Open()


Dim Msg As String
'fungsi w eekday mencari inde
If Weekday(Now ) = 6 Then

1 Private Sub Workbook_Open()


2 Dim Msg As String
3 'fungsi weekday mencari index hari, dimulai dari 1 (sunday)
4 If Weekday(Now) = 6 Then
5 Msg = "Today is Friday. Make sure that you "
6 Msg = Msg & "do your weekly backup!"
7 MsgBox Msg
8 Else
9 MsgBox "Friday is your Weekly backup", vbCritical, "Weekly Backup"
10
11 End If
12 End Sub

Jika workbook dibuka pada hari selasa misalnya maka akan muncul tampilan ini

Workbook Events lainnya


beberapa contoh lain dari workbook events
Visual Basic
'Program ini akan menanyakan a
Private Sub Workbook_BeforeC
Dim Msg As String
Dim Ans As Integer


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

Events2 lain yang berhubungan dengan


Worksheet dan range
Visual Basic
'Program ini akan mengeluarkan
'berisi angka (cancel=true artiny
Private Sub Worksheet_BeforeR

1 &#039;Program ini akan mengeluarkan dialog format angka jika sel yang diklik kanan
2 &#039;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 &#039;Program ini akan mencegah user mengisi cell &quot;A1&quot; dengan non numeric
13 Private Sub Worksheet_Change(ByVal Target As Range)
14 If Target.Address = &quot;$A$1&quot; Then
15 If Not IsNumeric(Target) Then
16 MsgBox &quot;Enter a number in cell A1.&quot;&quot;&quot;
17 Range(&quot;A1&quot;).ClearContents
18 Range(&quot;A1&quot;).Activate
19 End If
20 End If
21 End Sub
22

Events yang berhubungan dengan Object Excel


Excel merupakan Object juga maka dia juga punya event, yaitu antara lain

OnTime
Akan terjadi sesuai waktu yang telah diset

Ketik kode dibawah ini di module code

Visual Basic
'harus dipastikan komputer hidu
'akan terjadi
Sub SetAlarm()
'akan memanggil sub display

1 &#039;harus dipastikan komputer hidup sampai saat yang ditentukan jika tidak maka events
2 ini tidak
3 &#039;akan terjadi
4 Sub SetAlarm()
5 &#039;akan memanggil sub display alarm pada jam 3 pm
6 Application.OnTime 0.625, &quot;DisplayAlarm&quot;
7 Application.OnTime TimeValue(&quot;3:00:00 pm&quot;), &quot;DisplayAlarm&quot;
8
9 &#039;akan memanggil sub display alarm pada tanggal 12/31/2013 jam 5:00 pm
10 Application.OnTime TimeValue(&quot;12/31/2007 5:00 pm&quot;),
11 &quot;DisplayAlarm&quot;
12
13 &#039;akan memanggil sub display alarm 5 detik lagi
14 Application.OnTime Now + TimeValue(&quot;00:00:05&quot;),
15 &quot;DisplayAlarm&quot;
16 End Sub
17
18 Sub DisplayAlarm()
Beep
MsgBox &quot;Wake up. Its time for your afternoon break!&quot;&quot;&quot;
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()

&#039;taruh di module code


1
&#039;akan mengubah tombol pagedown menjadi turun hanya 1 baris
2
&#039;page up menjadi naik cuma 1 baris
3
Sub Setup_OnKey()
4
Application.OnKey &quot;{PgDn}&quot;, &quot;PgDn_Sub&quot;
5
Application.OnKey &quot;{PgUp}&quot;, &quot;PgUp_Sub&quot;
6
End Sub
7
Sub PgDn_Sub()
8
On Error Resume Next
9
If TypeName(ActiveSheet) = &quot;Worksheet&quot; Then ActiveCell.Offset(1, 0).Activate
10
End Sub
11
Sub PgUp_Sub()
12
On Error Resume Next
13
If TypeName(ActiveSheet) = &quot;Worksheet&quot; Then ActiveCell.Offset(-1,
14
0).Activate
15
End Sub
16
&#039;mereset tombolpagedown &amp; pageup
17
Sub Cancel_OnKey()
18
Application.OnKey &quot;{PgDn}&quot;
19
Application.OnKey &quot;{PgUp}&quot;
20
End Sub

Bab X. Simple Dialog Boxes


Bab XI. UserForm Basics
Userform
Listbox Control

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

Banyak lagi kegunaan form seperti

memilih range
Membuat daftar
menampilkan gambar
dll

Form merupakan container/ tempat menaruh semua control2 yang kita butuhkan dalam
program misalnya :

1. Untuk menampilkan text kita pakai control Label


2. Untuk menampilkan gambar kita pakai control Image
3. Untuk mengisi text kita pakai control Text
4. Untuk pilihan ganda kita pakai control Option Button
5. untuk eksekusi kita pakai control Commandbutton
6. dll

berikut adalah cara membuat userform

1. Buat workbook baru


2. masuk ke VBE (Alt+F11)
3. Pilih workbook kita di Project explorer
4. Klik Kanan
5. Pilih Insert >Userform
6. Selesai
7.
8.
9. ini adalah properties dari userform
10.
11.

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

Untuk menutup form kita gunakan code


Visual Basic

Unload userform1

1 Unload userform1

Events yang penting

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 menempelkan Control2 yang ada di toolbox kita :

Buat usertform active (tampilkan didepan)


Klik Menu View ->Toolbox jika toolbox belum muncul
Klik control yang diinginkan pada toolbox
lalu klik dan drag pada userform untuk membuat ukuran yang diinginkan

Menempelkan kode pada userform/Controls

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

untuk membuatnya kita gunakan toolbox pada userform

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

1 Private Sub AddItem1()


2 'Hapus dulu isi yang ada di listbox1
3 ListBox1.Clear
4
5 'isi satu persatu
6 ListBox1.AddItem "Senen"
7 ListBox1.AddItem "Selasa"
8 ListBox1.AddItem "Rabu"
9 ListBox1.AddItem "Kamis"
10 ListBox1.AddItem "Jumat"
11 ListBox1.AddItem "Sabtu"
12 ListBox1.AddItem "Minggu"
13 End Sub

Agar lebih terstruktur dan enak dibaca kita pakai struktur With .. End With
Visual Basic

Private Sub AddItem2()


'gunakan struktur With ..End w
'agar lebih mudah dibaca
With ListBox1

1 Private Sub AddItem2()


2 'gunakan struktur With ..End with
3 'agar lebih mudah dibaca
4 With ListBox1
5 .Clear
6
7 .AddItem "Senen"
8 .AddItem "Selasa"
9 .AddItem "Rabu"
10 .AddItem "Kamis"
11 .AddItem "Jumat"
12 .AddItem "Sabtu"
13 .AddItem "Minggu"
14
15 End With
16
17 End Sub

Kita juga bisa mengisinya dengan property List atau Column


List dipakai jika rangenya menurun atau berupa array

Visual Basic

'mengisi listbox dengan isi dari r


'kita gunakan list karena rangen
Private Sub cmdListRange_Click

1 'mengisi listbox dengan isi dari range daftar2


2 'kita gunakan list karena rangenya menurun
3 Private Sub cmdListRange_Click()
4
5 Dim rngDaftar As Range
6
7 Set rngDaftar = Range("daftar2")
8 ListBox1.List = rngDaftar.Value
9
10 End Sub
11
12 'mengisi list dengan fungsi array
13 Private Sub cmdList_Click()
14
15 daftar = Array("Senen", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu")
16 ListBox1.List = daftar
17
18 End Sub
Jika rangenya menyamping maka gunakan column
Visual Basic

'mengisi listbox dengan isi dari r


Private Sub cmdColumnRange_C
Dim rngDaftar As Range

1 'mengisi listbox dengan isi dari range daftar1


2 Private Sub cmdColumnRange_Click()
3 Dim rngDaftar As Range
4
5 Set rngDaftar = Range("daftar1")
6 ListBox1.Column = rngDaftar.Value
7 End Sub

Untuk mendeletenya isinya semua kita gunakan Methods Clear


Untuk mendelete salah satu item kita gunakan RemoveItem(Index)
Visual Basic

'menghapus semua isi listbox


ListBox1.Clear

'menghapus yang paling akhir

1 'menghapus semua isi listbox


2 ListBox1.Clear
3
4 'menghapus yang paling akhir aja
5 If ListBox1.ListCount > 0 Then
6 ListBox1.RemoveItem ListBox1.ListCount - 1
7 End If

Menampilkan isi listbox


Untuk memilih salah satu itemnya kita gunakan property ListIndex
Ingat bahwa listbox dimulai dari nol/0, jadi item pertama berindex 0
Visual Basic
Private Sub cmdSelectItem_Click
'check dulu ada isinya nggak
If ListBox1.ListCount = 0 Then
'tampilkan peringatan

Private Sub cmdSelectItem_Click()


1
'check dulu ada isinya nggak
2
If ListBox1.ListCount = 0 Then
3
'tampilkan peringatan
4
MsgBox "isi dulu listboxnya"
5
6
'keluar
7
Exit Sub
8
End If
9
10
'tanya mau nomor berapa, hasilnya berupa string
11
nomor = InputBox("mau milih item ke berapa? Min = 1 Max = " &
12
ListBox1.ListCount)
13
14
'fungsi Cint adalah mengubah string menjadi integer
15
'check apakah melebihi range ato nggak
16
If CInt(nomor) > ListBox1.ListCount - 1 Or CInt(nomor) < 0 Then
17
MsgBox "kegedean/kekecilan"
18
'jika OKE pilih item
19
Else
20
'kita kurangi satu karena listbox adalah base 0/ dimulai dari 0
21
ListBox1.ListIndex = CInt(nomor) - 1
22
End If
23
24
End Sub

Untuk menampilkan isinya kita pakai property value/text (karena value merupakan
property default maka bisa kita gunakan hanya listbox1 saja)
Visual Basic

Private Sub cmdValue_Click()


'bisa juga gunakan property v
'default maka nggak digunaka
'MsgBox "ListBox1 isi kolom p

1 Private Sub cmdValue_Click()


2 'bisa juga gunakan property value/text, karena merupakan
3 'default maka nggak digunakan juga gak papa
4 'MsgBox "ListBox1 isi kolom pertama " & ListBox1.Value
5 'MsgBox "ListBox1 isi kolom pertama " & ListBox1.Text
6 MsgBox "ListBox1 isi kolom pertama " & ListBox1
7
8 'atau juga bisa gunakan kombinasi list dan listindex
9 'MsgBox "ListBox1 isi kolom pertama " & ListBox1.List(ListBox1.ListIndex)
10
11 'jika listbox multicolum maka kita gunakan property list
12 'argumen pertama adalah baris, lalu argumen ke2 adalah kolom
13 'ingat listbox adalah base 0
14
15 'akan error jika kolom ke 2 tidak diisi
16 If ListBox1.ColumnCount > 1 Then
17 MsgBox "ListBox1 isi kolom kedua " & ListBox1.List(ListBox1.ListIndex, 1)
18 End If
19 End Sub

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

'multi kolom listbox diisi dengan p


Private Sub cmdMulti_Click()

'check keadaan property mult

1 'multi kolom listbox diisi dengan property List


2 Private Sub cmdMulti_Click()
3
4 'check keadaan property multiselect
5 If ListBox1.MultiSelect = fmMultiSelectMulti Then
6 'jika multiselect maka
7 'ubah caption tombol
8 cmdMulti.Caption = "Multi Select ON"
9 'ubah menjadi single select
10 ListBox1.MultiSelect = fmMultiSelectSingle
11 ElseIf ListBox1.MultiSelect = fmMultiSelectSingle Then
12 'ubah menjadi multiselect
13 ListBox1.MultiSelect = fmMultiSelectMulti
14
15 'ubah caption tombol
16 cmdMulti.Caption = "Multi Select OF"
17 End If
18 End Sub

edit di formnya/design mode

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

'tampilkan kolom pertama saja


Private Sub cmdSelectMulti_Clic
'buat penyimpanan sementara
Dim strList As String

1 'tampilkan kolom pertama saja


2 Private Sub cmdSelectMulti_Click()
3 'buat penyimpanan sementara
4 Dim strList As String
5
6 'looping dari item pertama sampai item terakhir
7 For k = 0 To ListBox1.ListCount - 1
8 'check apakah posisi terselect ato tidak
9 If ListBox1.Selected(k) Then
10 'simpan dengan hasil sebelumnya
11 strList = strList & ";" & ListBox1.List(k)
12 End If
13 Next
14
15 'buang karakter ; pertama
16 MsgBox Mid(strList, 2, 1000)
17 End Sub

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

'menampilkan urutan list dan jum


Private Sub ListBox1_Change()
Dim intCount As Integer
lblListIndex = "ListIndex : " & L

1 'menampilkan urutan list dan jumlah list yang terpilih


2 Private Sub ListBox1_Change()
3 Dim intCount As Integer
4 lblListIndex = "ListIndex : " & ListBox1.ListIndex
5
6 'check jumlah yang terpilih
7 For k = 0 To ListBox1.ListCount - 1
8 If ListBox1.Selected(k) Then
9 intCount = intCount + 1
10 End If
11 Next
12
13 LblCount = "Jumlah list terpilih : " & intCount & " dari " & ListBox1.ListCount
14 End Sub

Event Double_Click biasa digunakan untuk melakukan suatu tindakan atas item tertentu
di listbox
Visual Basic

'menampilkan isi list terpilih


'panggil prosedure tombol "Disp
Private Sub ListBox1_DblClick(B

1 'menampilkan isi list terpilih


2 'panggil prosedure tombol "Display selected Value"
3 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
4
5 Call cmdValue_Click
6
7 End Sub

ini adalah workbook yang mendemokan beberapa kegunaan listbox

Bab XII. User Defined Function


Bab XIII. Membuat Add-ins
Step By Step How to make program
Hello world
Close workbooks
o Close workbooks Part 1 : Menambahkan Userform dan Control
o Close workbooks Part 2 : Menambahkan Kode
Membuat Konfirmasi PPN secara Otomatis
o Membuat Template untuk Surat dan Lampirannya
o Link ke Daftar KKP
o Buat Data Lampiran
o Buat sheet Max Data
o Membuat Code VBA
Hello world
Program ini adalah program standard yang selalu dipakai dibahasa mana saja, bagi pemula
karena sangat sederhana namun karena sudah merupakan tradisi ya kita ikuti aja

Program ini kalau dijalankan akan tampil sbb:

Program ini akan menampilkan sebuah window yang ada tombolnya, yang jika tombol tersebut
kita klik maka akan muncul kotak dialog dengan tulisan Hello World

Disini kita akan :

1. Menciptakan sebuah userform


2. Menyisipkan/ membuat commandbutton (tombol perintah)
3. Membuat code dengan perintah msgbox

Langkah-2nya

1. Buat workbook baru


2. save sebagai helloworld.xlsm
3.
4. Ingat harus disave sebagai Excel macro enabled workbook (*.xlsm), jika disimpan
sebagai xlsx maka macro akan dihapus oleh excel
5. Tampilkan VBE (Visual basic Editor) dengan Ribbon Developer >Visual Basic
6. atau shortcut Alt+F11
7. Klik kanan pada window Project Explorer pada Item Helloworld.xlsm
8. Pilih Insert > Userform
9.
10. Akan tampil window seperti berikut
11.
12. Klik pada window Toolbox pada bagian commandbutton maka kursor akan
berbentuk menjadi ikon commandbutton dan tanda +
13. klik saja pada window Userform1 lalu seret/gambar kotak sesuai keinginan anda
lalu lepas klik anda
14. jika bentuk dan posisi commandbutton tidak sesuai kita klik dan drag
commandbutton tadi sesuai keinginan kita
15. Untuk meng-Customize commandbutton tadi kita klik lalu kita edit di window
Properties
16.
17.
18. Kita ubah nama dari commandbutton1 menjadi cmdHelloworld
19. Pengubahan nama berfungsi agar program lebih mudah dipahami (awalan cmd
berarti commandbutton)
20. Caption/ Text pada commandbutton kita ganti menjadi Hello World (ini juga
bisa kita langsung edit di window userform1)
21. Untuk mengubah jenis/size maupun effek lain pada commandbutton kita klik di
bagian font pada kotakkecil berisi 3 titik (baru muncul jika bagian font diklik)
22. Kalau sudah puas dengan visualnya maka baru kita isi dengan code
23.
24. Klik 2 kali commandbutton tadi atau
25. Klik kanan lalu pilih View Code
26.
27. Akan muncul window code sesuai dengan Obyek yang kita klik tadi yaitu
helloword.xlsm Userform1
28. VBA merupakan programming Modern yaitu terdiri dari Obyek, Methode,
Properties dan Event
29. di jendela kode kanan otomatis terisi dengan Obyek cmdHelloworld (Obyek
Commandbutton) serta Event Click
30. Event click terjadi jika suatu Obyek diklik kiri (default click)
31. Semua code yang berada diantara sub cmdhelloword_click dan End Sub akan
dieksekusi jika tombol diklik
32.
33. Kita tulis diantaranya dengan perintah msgbox (artinya message box yaitu suatu
kotak peringatan yang berisi teks yang kita isikan sebagai parameter)
34. Code Lengkapnya :
35. Visual Basic

Private Sub cmdHellow orld_Clic

MsgBox "Hello World"

1 Private Sub cmdHelloworld_Click()


2
3 MsgBox "Hello World"
4
5 End Sub
Untuk menjalankannya kita aktifkan jendela userform1 lalu klik toolbar Run

ini hasilnya
Cara lain yaitu kita buatkan macro/prosedur untuk menampilkan form tadi

1. Kita klik kanan pada project helloword.xlsm


2. Pilih Insert >Module
3.
4. akan muncul lagi jendela code window dengan nama helloworld Module1 (Code)
5. Kita ketik Sub Helloworld lalu enter maka otomatis end sub akan muncul
6. Kita ketik diantaranya code untuk menampilkan userform1
7. userform1.show
8. lengkapnya adalah
9. Visual Basic

Sub HelloWorld()

UserForm1.Show

1 Sub HelloWorld()
2
3 UserForm1.Show
4
5 End Sub

10. Kita bisa menggunakan Ribbon Developer >Macro


11. Pilih Ribbon Developer
12. Pilih Macros , akan keluar kotak dialog
13. Kita pilih Helloworld
14. Run

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

Cara bekerja program adalah sbb :

Masukin semua workbooks yang dalam posisi terbuka


Jika workbooks di Hide, tidak perlu ditampilkan kecuali kita masukkan sebagai pilihan
Ada 3 pilihan yaitu di Close saja, Disave saja atau diclose + disave

Step by step pembuatan :


1. Menambahkan Userform dan Control
2. Menambahkan Kode

Close workbooks Part 1 : Menambahkan


Userform dan Control
Kita mulai dengan membuat userform dan menambahkan controls :

1. Bikin New Workbook (Shortcut Ctrl + N)


2. Kita save sebagai SBS Close workbooks.xlsm atau nama lain terserah anda
3. Ingat harus disave sebagai .xlsm (Excel Macro enable Workbook)
4. Kita buka VBE (shortcutnya Alt + F11)
5. Cari file yang baru kita bikin tadi (SBS Close workbooks.xlsm) di project Explorer
6. Klik kanan, pilih insert -> Userform

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

Close workbooks Part 2 : Menambahkan Kode


Dibagian ini kita akan menampilkan code atau Inti dari program karena tanpa kode, form dan
control hanya tampilan yang bisa diklik tanpa menimbulkan akibat apa2

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 :

1. Klik kanan pada userform lalu pilih View Code


2. Atau bisa saja kli 2x pada userform tsb
3. Maka Code window akan terbuka
4. AKan menunjuk userform kita yang sudah kita beri nama frmCloseWorkbooks
5. Pada Events Click
6. Kita ubah event-nya menjadi Initialize (klik aja pada panah bawah pada kotak sebelah
kanan pada code window)

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

12. Berikutnya adalah :


13. Kita harus pastikan pada saat membuka form sudah terdapat minimal satu workbook
yang terbuka dan aktif (bukan hidden)
14. Maka pastikan bahwa ada workbook yang terbuka
15.
16. codenya adalah sbb :
17. Visual Basic

If TypeName(Selection) = "No
MsgBox "sorry,You must o
'tutup form dan keluar prog
Unload Me

1 If TypeName(Selection) = "Nothing" Then


2 MsgBox "sorry,You must open a workbook before this utilities can work"
3 'tutup form dan keluar program
4 Unload Me
5 End
6 End If

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

'lihat kegunaan deklarasi w b


'pada saat coding akan sanga
'tidak takut salah ketik

1 'lihat kegunaan deklarasi wb sebagai workbooks


2 'pada saat coding akan sangat mempermudah dan kita
3 'tidak takut salah ketik
4
5 'kita looping untuk setiap workbooks yang terbuka
6 For Each wb In Application.Workbooks
7
8 'pastikan dalam posisi terbuka
9 If Windows(wb.Name).Visible = True Then
10
11 'tambahkan nama workbook ke dalam list
12 lstWorkbooks.AddItem wb.Name
13
14 End If
15 Next

22.
23. Lengkapnya
24. Visual Basic

Private Sub UserForm_Initialize(

Dim w b As Workbook

1 Private Sub UserForm_Initialize()


2
3 Dim wb As Workbook
4
5 If TypeName(Selection) = "Nothing" Then
6 MsgBox "sorry,You must open a workbook before this utilities can work"
7 'tutup form dan keluar program
8 Unload Me
9 End
10 End If
11 'lihat kegunaan deklarasi wb sebagai workbooks
12 'pada saat coding akan sangat mempermudah dan kita
13 'tidak takut salah ketik
14
15 'kita looping untuk setiap workbooks yang terbuka
16 For Each wb In Application.Workbooks
17
18 'pastikan dalam posisi terbuka
19 If Windows(wb.Name).Visible = True Then
20
21 'tambahkan nama workbook ke dalam list
22 lstWorkbooks.AddItem wb.Name
23
24 End If
25 Next
26 End Sub

25. Coba kita jalankan


26. Caranya taruh kursor pada Code windows lalu klik Run /tombol panah (shortcut F5)
27. ini penampakannya
28.
29.
30. Close form (klik tanda X di kanan atas form)
31.
32. Sekarang kita code pada tombol perintah Close!!!
33. Klik kanan pada tombol perintah di userform lalu klik View Code
34. ini codenya
35. Visual Basic

Private Sub cmdCloseWorkbook

'looping pada semua item di lis


'ingat listbox adalah base 0

1 Private Sub cmdCloseWorkbooks_Click()


2
3 'looping pada semua item di listbox
4 'ingat listbox adalah base 0
5 For k = 0 To lstWorkbooks.ListCount - 1
6
7 'check apakah terpilih?
8 'hanya item terselect yang akan diclose
9 If lstWorkbooks.Selected(k) Then
10
11 'kalo kita ingin simpan sebelum diclose kita isi dengan true
12 Application.Workbooks(lstWorkbooks.List(k)).Close True
13
14 'jika kita hanya ingin close maka kita ganti menjadi false
15 'seperti ini
16 'Application.Workbooks(lstWorkbooks.List(k)).Close false
17
18 End If
19
20 'looping ke item berikutnya
21 Next
22
23 'Workbooks_list
24 Unload Me
25 End Sub

36. Coba jalankan dengan klik pada code window dan klik Run/F5
37. Selesai

Membuat Konfirmasi PPN secara Otomatis


Konfirmasi PPN merupakan momok bagi pemeriksa karena melakukan suatu pekerjaan klerikal
yang sangat menyita waktu tapi merupakan suatu keharusan dalam melakukan suatu
pemeriksaan

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

Berikut adalah Step-by-step pembuatannya

Membuat Template untuk Surat dan Lampirannya


Link ke Daftar KKP
Buat Data Lampiran
Buat sheet Max Data
Membuat Code VBA

Membuat Template untuk Surat dan


Lampirannya
Pertama2 kita buat dulu template untuk surat dan lampiran konfirmasi PPN, tentang format
surat kita sesuaikan dengan peraturan yang berlaku

1. Kita buat dulu new workbook


2. Kita buat surat konfirmasinya dan lampirannya, sesuai dengan peraturan yang berlaku,
pada sheet1 dan sheet2
3. Atau download file template yang sudah penulis buat (format surat dan lampiran
Konfirmasi PPN.xlsx)
4. Ada 2 buah worksheet yaitu surat dan lampiran, Block saja lalu copykan ke workbook
anda
5. atau pakai cara lebih mudah, kita save as saja file hasil donlot tadi
6. Jangan lupa harus disave as sebagai Macro Enabled Workbook, dng nama misalnya
Otomatisasi Konfirmasi PPN.xlsm

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

Link ke Daftar KKP


Agar kita bisa buat surat sesuai dengan kode KPP maka kita perlu membuat rumus agar lebih
mudah dalam mengedit jika terjadi perubahan alamat KPP

1. Kita donlot dulu file DaftarAlamatKPP.xlsx


2. Sheet export_alamat_kantor tersebut Kita copykan ke file Otomatisasi Konfirmasi
PPN.xlsm
3. Sehingga file kita memiliki 3 Sheet yaitu Template surat, Template Lampiran
dan export_alamat_kantor
4. lalu kita buat rumus di template surat di cell A15
5. =Yth. Kepala Kantor Pelayanan Pajak
&MID(VLOOKUP($H$9,export_alamat_kantor!B:I,3,FALSE),4,200)& ( &$H$9 &)
6. Penjelasannya :
7. Syntax dari vlookup
8. VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
9.
10. Lookup_value ada di cell H9, di template surat pada cell H9 sudah terdapat kode 093
(hanya contoh nanti akan digantikan oleh kode KPP yang sebenarnya)
11. Kita lihat di sheet export_alamat_kantor, kode KPP ada di kolom B, sedang data yang
kita perlukan ada sampai kolom I
12. Oleh karena itu table_array-nya adalah export_alamat_kantor!B:I
13. Untuk nama kantor ada di kolom D, atau kolom ke 3, sehingga col_index_num adalah 3
14. Karena kita akan mencari Exact Match (harus sama persis kodenya) maka range_lookup
adalah False
15.
16. Kita buat juga untuk cell A16 (alamat KPP)
17. =VLOOKUP($H$9,export_alamat_kantor!B:I,4,FALSE)
18.
19. Juga untuk kota dan kode pos
20. =VLOOKUP($H$9,export_alamat_kantor!B:I,5,FALSE) & &
VLOOKUP($H$9,export_alamat_kantor!B:I,6,FALSE)

Buat Data Lampiran


Kini saatnya kita buat data lampiran, biasanya data ini kita minta dari WP atau kita donlot dari
SIDJP. yang paling gampang tentu saja minta dari WP karena biasanya sudah dalam bentuk
excel, lain jika kita donlot dari SIDJP

Langkah2nya :

1. Buat sheet baru, kita beri nama data klarifikasi


2. Kita ketik untuk label seperti gambar dibawah ini

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

Buat sheet Max Data


Sheet Max Data berguna untuk menentukan berapa panjang daripada template lampiran yang
akan kita buat, sebenarnya ini juga nggak perlu karena program akan memotong/men-delete
baris yang tidak terpakai diakhir program

Sheet ini akan menjumlah berapa baris data untuk tiap2 KPP/ tiap lampiran

Langkah2nya :

1. Kita buat satu sheet baru


2. Kita beri nama Panjang Lampiran
3. atau kita donlot saja file Panjang Lampiran.xlsx
4. Copykan ke sheet Otomatisasi Konfirmasi PPN.xlsm
5. Kita ketik di cell B2
6.
7. =COUNTIF(data klarifikasi!F:F,A2)
8.
9. ini akan menghitung semua faktur sesuai dengan kode KPP-nya
10. Lalu kita copykan kebawah sampai kode KPP 999 (kode kpp penulis bikin 001 s.d 999,
untuk menjaga siapa tahu ada KPP baru)
11. Terus kita hitung jumlah maximalnya lalu kita + 12 baris (header)
12. kita buat rumus di E1
13.
14. =MAX(B:B)+12
15.
16. rumus diatas bisa kita persingkat dengan 1 rumus saja
17. Kita gunakan formula Array
18. kita ketik di cell F1
19.
20. =MAX(COUNTIF(data klarifikasi!F:F,A2:A1000))+12
21. lalu kita pencet Ctrl+Shift+Enter
22. ini hasilnya
23.
24.
25.
26. setelah kita tahu jumlah panjang lampiran maka kita edit template lampiran
27. Angka 586 adalah 2 baris diatas baris jumlah, jadi insert baris sehingga menjadi seperti
ini
28.

29.
30. Kita siap dengan Kode macronya

Membuat Code VBA


Ini adalah hal tersulit untuk membuat kode, biasanya kita pake logika saja untuk membuat flow
dari program
1. kita aktifkan data klarifikasi yang sudah diurutkan berdasarkan KPP, NPWP , tanggal
faktur lalu Nomor faktur
2. setiap ganti Kode KPP kita buat surat baru dan lampirannya
3. disurat kita masukkan kode KPP di sel H9
4. lalu di lampiran kita copykan data
5. lalu kelebihan baris kita potong
6. kita ulang sampai data habis

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()

1 &#039;macro untuk klarifikasi


2 &#039;Bikin surat &amp; Lampiran
3 Sub MakeLampiran()
4 &#039;deklarasi variabel
5 Dim wksSurat As Worksheet
6 Dim strKPP_Surat As String
7
8 Dim intBarisAwal As Integer, intKolomAwal As Integer
9 Dim intKolomKPP As Integer
10 Dim wksData As Worksheet, wksNew As Worksheet
11 Dim intTargetAwal As Integer
12 Dim MaxData As Long
13
14 &#039;set untuk surat/ diisi dengan kode kpp sesuai lampiran
15 Set wksSurat = Worksheets(&quot;Template Surat&quot;)
16
17 &#039;untuk mengeset kode kpp untuk rumus di surat (vlookup)
18 strKPP_Surat = &quot;H9&quot;
19
20 &#039;awal dari Surat untuk diinsert data KPP
21 intTargetAwal = 11
22
23 &#039;set sebagai worksheet template lampiran
24 Set wksLampiran = ThisWorkbook.Worksheets(&quot;Template Lampiran&quot;)
25
26 &#039;pindah ke sheet data
27
28 ThisWorkbook.Worksheets(&quot;data klarifikasi&quot;).Select
29
30 &#039;Sort Data
31 Call Sort_Data
32
33 &#039;Pilih cell data
34 Cells(1, 1).CurrentRegion.Select
35
36 &#039;set sheet ini sebagai sheet data
37 Set wksData = ThisWorkbook.ActiveSheet
38
39 &#039;awal dari baris selection
40 intBarisAwal = Selection.Cells(2, 1).Row
41 intKolomAwal = Selection.Cells(2, 1).Column
42
43 &#039;kolom yang berisi data kpp
44 intKolomKPP = 6
45
46 Dim strKPP As String
47 Dim intNumKPP As Integer
48
49 intJumlahBaris = Selection.Rows.Count - 1
50
51 &#039;ulangi untuk semua baris
52 For intRow = intBarisAwal To intBarisAwal + intJumlahBaris - 1
53
54 &#039;check apakah blank, hal ini biasanya sortir termasuk yang blank
55 If ActiveSheet.Cells(intRow, intKolomAwal + intKolomKPP - 1) &lt;&gt; &quot;&quot;
56 And ActiveSheet.Cells(intRow, intKolomAwal + intKolomKPP - 1) &lt;&gt;
57 &quot;Kosong&quot; Then
58
59
60 &#039;cek apakah KPP telah berubah dibandingkan KPP baris sebelumnya
61 &#039;jika ya maka
62 If ActiveSheet.Cells(intRow, intKolomAwal + intKolomKPP - 1) &lt;&gt; strKPP Then
63
64 &#039;nilai awal intNumKPP =0
65 intNumKPP = intNumKPP + 1
66
67 &#039;delete sisa baris kosong dari lampiran sebelumnya
68 &#039;hanya dijalankan jika sebelumya sudah membuat lampiran
69 &#039;bukan pertama kali,
70 &#039;jika pertama kali maka variable k pasti =0
71 If k &gt; 0 Then
72 wksNew.Range(wksNew.Cells(intTargetAwal + k + 1, 1), wksNew.Cells(586,
73 1)).EntireRow.Delete
74 End If
75
76 &#039;set KPP dengan nilai baru
77 strKPP = ActiveSheet.Cells(intRow, intKolomAwal + intKolomKPP - 1)
78
79 &#039;Bikin Sheet Surat Baru
80 wksSurat.Copy Before:=wksSurat
81 Set wksSuratNew = ActiveSheet
82 wksSuratNew.Name = &quot;Surat &quot; &amp; strKPP
83
84 &#039;isi kode kpp pada sheet Surat Baru
85 wksSuratNew.Range(strKPP_Surat).Value = &quot;&#039;&quot; &amp; strKPP
86
87
88 &#039;bikin sheet lampiran baru
89 wksLampiran.Copy Before:=wksSurat
90 Set wksNew = ActiveSheet
91 wksNew.Name = &quot;Lamp. &quot; &amp; strKPP
92 wksData.Select
93
94 &#039;tetapkan baris awal
95 k=1
96
97 &#039;isi baris dengan data
98 wksNew.Cells(intTargetAwal + k, 1).Value = k
99 wksNew.Cells(intTargetAwal + k, 2).Value = ActiveSheet.Cells(intRow, 1)
100 wksNew.Cells(intTargetAwal + k, 3).Value = ActiveSheet.Cells(intRow, 2)
101 wksNew.Cells(intTargetAwal + k, 4).Value = ActiveSheet.Cells(intRow, 3)
102 wksNew.Cells(intTargetAwal + k, 5).Value = ActiveSheet.Cells(intRow, 4)
103 wksNew.Cells(intTargetAwal + k, 6).Value = ActiveSheet.Cells(intRow, 5)
104
105 &#039;jika KPP sama dengan baris sebelumnya
106 Else
107
108 &#039;tambahkan urutan baris data + 1
109 k=k+1
110
111 &#039;isi dengan data
112 wksNew.Cells(intTargetAwal + k, 1).Value = k
113 wksNew.Cells(intTargetAwal + k, 2).Value = ActiveSheet.Cells(intRow, 1)
114 wksNew.Cells(intTargetAwal + k, 3).Value = ActiveSheet.Cells(intRow, 2)
115 wksNew.Cells(intTargetAwal + k, 4).Value = ActiveSheet.Cells(intRow, 3)
116 wksNew.Cells(intTargetAwal + k, 5).Value = ActiveSheet.Cells(intRow, 4)
117 wksNew.Cells(intTargetAwal + k, 6).Value = ActiveSheet.Cells(intRow, 5)
118
119 End If &#039;if nggak sama
120
121 End If &#039;if blank
122
123 Next
124
125 &#039;delete baris sisa untuk sheet terakhir
126
127 If k &gt; 0 Then
128 wksNew.Range(wksNew.Cells(intTargetAwal + k + 1, 1), wksNew.Cells(586,
129 1)).EntireRow.Delete
130 End If
131
132
133 End Sub
134 Sub Sort_Data()
135 &#039;
136 &#039; Macro2 Macro
137 &#039;
138
139 &#039;
140 Selection.CurrentRegion.Select
141 ActiveWorkbook.Worksheets(&quot;data klarifikasi&quot;).Sort.SortFields.Clear
142 ActiveWorkbook.Worksheets(&quot;data klarifikasi&quot;).Sort.SortFields.Add
143 Key:=Range( _
144 &quot;F:F&quot;), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
145 xlSortNormal
146 &#039;ActiveWorkbook.Worksheets(&quot;data klarifikasi&quot;).Sort.SortFields.Add
147 Key:=Range( _
148 &quot;G:G&quot;), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
149 xlSortNormal
150 ActiveWorkbook.Worksheets(&quot;data klarifikasi&quot;).Sort.SortFields.Add
151 Key:=Range( _
152 &quot;D:D&quot;), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
153 xlSortNormal
154 ActiveWorkbook.Worksheets(&quot;data klarifikasi&quot;).Sort.SortFields.Add
155 Key:=Range( _
156 &quot;A:A&quot;), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
157 xlSortNormal
158 With ActiveWorkbook.Worksheets(&quot;data klarifikasi&quot;).Sort
159 .SetRange Range(&quot;A:G&quot;)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Anda mungkin juga menyukai