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 =)
Disini variabel cb akan diisi dengan karakter yang diisikan oleh user, misalnya 27
- dan bisa diambil valuenya untuk diproses
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
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 terdugamisalnya 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 variableProcedure 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 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
- 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
- ini seperti scope module hanya lebih luas, karena dikenali di module lain sepanjang berada di satu workbook
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 iniWorkbooks("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