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