Kamis, 26 September 2013

Methods penting dari range Object

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

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:

Property penting dari range Object


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

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
Sub Button_ValueTextFormula_Click()
Dim strResult
strResult = strResult & "Selection.Value : " & Selection.Value & vbCrLf _
& "Selection.Text : " & Selection.Text & vbCrLf _
& "Selection.Formula : " & Selection.Formula & vbCrLf _
& "Selection.FormulaR1C1 : " & Selection.FormulaR1C1
MsgBox strResult
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 :
Sub Change_Bold_Blue()
'mengubah menjadi Bold
Range("A1:A3").Font.Bold = True

'mengubah background menjadi biru
'fungsi RGB untuk mencari warna biru
Range("A1:A3").Interior.Color = RGB(0, 0, 255)
End Sub

Cara lain merujuk ke range


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)
Contoh:


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 :
1
2
3
4
5
6
7
8
'geser 1 baris kebawah, dan 2 kolom ke kanan menghasilkan C2
Range("A1").Offset(1, 2)
 
'geser 1 baris keatas, dan 2 kolom ke kiri, menghasilkan A1
Range("C2").Offset(-1, -2)
 
'tidak bergeser, hasilnya ya tetep A1
Range("A1").Offset(0, 0)

Cara merujuk/refer to range

Cara merujuk/refer to range

Range di excel merupakan bagian yang paling penting karena berhubungan dengan lembar kerja kita, range bisa merujuk ke satu cell (contohnya A1) ataupun satu worksheet itu sendiri (sel A1:XFD1048576, atau 17 juta cells)
Untuk merujuk ke range gunakan :
  1. Kata range diikuti dengan alamat, misalnya
  2. Kata range diikuti dengan Nama yang telah didefinisikan, misalnya
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
Untuk merujuk ke worksheet lain kita harus berikan nama worksheet bersangkutan
Begitu juga kalau merujuk ke workbook lain, seperti contoh dibawah ini
1
2
Worksheets("Sheet1").Range("A1:C5")
Workbooks("Budget.xlsx").Worksheets("Sheet1").Range("A1:C5")

Rabu, 25 September 2013

Array

Array

  • Array adalah sekumpulan variabel dengan nama sama serta type data sama
  • Untuk merujuk ke data tertentu maka digunakan index, di vb array adalah berbasis nol jadi jika ditulis data(5) berarti ada 6 nilai yaitu data(0), data(1),..,data(5) kecuali dideklarasikan dengan data(1 to 5) artinya ada 5 data
  • 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 :

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

'karena tidak ada option base maka dimulai dari 0
'jadi array dibawah ini dimulai dari 0 s.d 99
Dim strNames(100) as string
'dinamis, akan berubah saat runtime
Dim intSales() as integer
'array multidimensi, misalnya lngData(1,1) ... lngData(12,100)
Dim lngData(1 to 12, 1 to 100) as long

  • Kalo array () artinya bisa diisi dengan berapapun jumlah datanya,  array dinamis
  • Array juga bisa multi dimensi, kalo contoh diatas maka datanya ada 12×100=1200 data, dari lngData(1,1) sampat lngData(12,100)
  • Untuk mengisi bisa satu persatu, pakai For .. Next atau gunakan fungsi Array

Option Base 1
Sub isi_array()
'dimulai dari 1 s.d 100 karena ada option base 1
Dim strNama(100) As String
For k = 1 To 100
strNama(k) = "nama ke " & k
Next
MsgBox strNama(67)
End Sub
Sub Isi_with_array_function()
Dim MyWeek, MyDay
MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
' Return values assume lower bound set to 1 (using Option Base
' statement).
MyDay2 = MyWeek(2) ' MyDay contains "Tue".
MyDay4 = MyWeek(4) ' MyDay contains "Thu".
MsgBox "MyDay2 = " & MyDay2 & vbCrLf & "MyDay4 = " & MyDay4
End Sub

Constant

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

Variable

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 =)
cb = InputBox(“masukkan bilangan yg mo dicari akar pangkat tiga-nya”)
Disini variabel cb akan diisi dengan karakter yang diisikan oleh user, misalnya 27
  • dan bisa diambil valuenya untuk diproses
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
Dim DasarPengenaanPajak as integer
'jika tidak secara explicit ditentukan maka type data adalah variant
Dim Pajak_Terutang
'jika digabung maka harus secara explicit disebut type datanya
'dibawah ini DPP bertipe variant, PPN type integer
Dim DPP , PPN as Integer
'Kalo yang ini semuanya bertype integer
Dim DPP as integer, PPN as Integer
Dim Tarif_Pajak(1 to 3) as integer
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:
Sub Mix_Variable()
Dim answer As Integer
Dim num1 As Single
Dim num2 As Integer
num1 = 5.3
num2 = 6
answer = num1 * num2
MsgBox answer
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 :
Sub Type_Data_Error()
Dim myVar As Integer
myVar = 10
myVar = "Testing"
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 :
Sub out_range()
Dim myNum As Integer
myNum = 50000
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

  • Sub test_variable_lokal() 'deklarasikan variabel intLokal
    Dim intLokal As Integer
    'tampilkan hasilnya
    MsgBox "intLokal =" & intLokal
    'isi variabel dengan suatu angka
    intLokal = 100
    'tampilkan hasilnya
    MsgBox "intLokal =" & intLokal
    End Sub
  • Jika sub diatas dijalankan maka akan muncul displaymenyatakan 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
  • Dim intModule As Integer Sub test_variable_module()
    'deklarasikan variabel intLokal
    Dim intLokal As Integer
    'tampilkan hasilnya
    MsgBox "intLokal =" & intLokal & vbCrLf & "intModule = " & intModule
    'isi variabel dengan suatu angka
    intLokal = 100
    intModule = 200
    'tampilkan hasilnya
    MsgBox "intLokal =" & intLokal & vbCrLf & "intModule = " & intModule
    End Sub
    Sub test_variabel()
    'jalankan sub test_variable_module
    Call test_variable_module
    'lihat apakah variabel intModule dikenali
    'karena variabel intModule ber-scope module maka dikenali oleh sub/
    'fungsi lain dimodule yang sama
    'sebaliknya var intLokal tidak dikenal dan berisi blank/null karena variant
    MsgBox "intLokal =" & intLokal & vbCrLf & "intModule = " & intModule
    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

Comments

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:
prosedur untuk menghasilkan akar pangkat tiga dari angka yang diberikan oleh user
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
  • 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

Gaya pemrograman yang baik

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

Sub Procedure dan Function Procedure


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

Menelusuri lebih lanjut tentang Object di Excel


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 :

Object, Properties, Methods, dan Events


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
Name Required/Optional Data Type Description
SaveChanges Optional Variant 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 doesn’t appear in any other open windows, this 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.
RouteWorkbook Optional Variant If the workbook doesn’t 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 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. Private Sub Workbook_Open

  8. ketik code 

  9. MsgBox Date & vbCrLf & Time()

  10. msgbox akan menampilkan suatu jendela message box 
  11. vbCrLf akan membuat baris baru, sehingga text diatas akan terbagi menjadi 2 baris
  12. Date() dan Time() akan menampilkan tanggal dan waktu sekarang
  13. code diatas akan tereksekusi jika file ini dibuka

Introducing the Excel Object Model


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

Modifikasi VBA Project


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

Customizing VB Editor

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

Pengenalan Visual Basic Editor

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
Shortcut untuk menampilkan Ctrl+R
Berikut adalah project explorer yang menampilkan e-Audit Utilities Project
vbe01
  1. Properties
berisi setting untuk project, userform beserta control2nya, dan workbook & Worksheet
  1. 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
  1. Userform window
Untuk membuat form atau kotak dialog dalam menjalankan VBA, versi visualnya
  1. Object Browser
Untuk mengetahui properties, method, event yang dimiliki oleh suatu object
  1. Immediate
untuk menampilkan tekan Ctrl+G atau  View➪Immediate Window command. Window ini biasa digunakan untuk eksekusi perintah langsung atau untuk fungsi debugging
  1. Locals, untuk debugging
  2. Watcher, untuk debugging

Personal Macro Workbook

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
Personal01

jika kita exit dari excel dan kita melakukan perubahan pada personal.xlsb maka akan keluar peringatan sbb :
Personal02
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
Personal03
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
Personal04