Rabu, 25 September 2013

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