Rabu, 25 September 2013

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

Tidak ada komentar:

Posting Komentar