Pemrograman
Materi – 5
Mengenal Tipe Data
pada VBA Excel
g String-
Variabel yang menggunakan tipe
Variable-length String dapat berisi
apapun dari 0 sampai sekitar 2 miliar
variabl karakter.
Keterangan:
Keyword" adalah salah satu dari statemen berikut: Dim, Public, Private atau Static.
"Nama_Variabel" adalah nama yang ingin Anda gunakan sebagai pengenal
variabel.
"Tipe_Data" adalah referensi ke tipe data dari variabel.
Contoh deklarasi Variabel VBA
Kode VBA
Dim nomor_urut As Long
Dim nomor_kode As String
Jika penulisan statement deklarasi variable semacam ini, VBA hanya menentukan
Variabel nomor_B sebagai Integer, sedangkan untuk variabel nomor_A karena tipe
data tidak disebutkan maka akan dianggap sebagai Variant sebagai tipe data devault
pada VBA
Jadi jika kita bermaksud mendeklarasikan vaiabel nomor_A dan nomor_B sebagai
nilai Integer penulisannya harus seperti berikut:
Contoh:
Dim nomor_urut As Long, nomor_kode As String
nomor_urut = 123
nomor_kode = "A123"
Variabel ber-datatype nonobject
Untuk Variabel ber-datatype selain object caranya adalah dengan menggunakan keyword
"Set“ diikuti nama variabel, lalu diikuti tanda sama dengan (=) dan nilai dari variabel tersebut
Set Nama_Variabel = Ekspresi_Nilai_
Contoh:
Dim range_Data As Range
Set range_Data = Sheets("Sheet1").Range("A1")
CATATAN, Tambahkan keyword/statement SET jika data pada variabel tersebut adalah
berupa object VBA.
Keyword Dim, Static, Public dan Private
Seperti yang sudah dijelaskan di atas, Statemen atau keyword yang bisa digunakan untuk
mendeklarasikan sebuah variabel adalah sebagai berikut, tentunya masing-masing memiliki
tujuan tertentu:
1. Dim
2. Static
3. Public
4. Private
Dari keempat keyword tersebut, Statement DIM adalah yang paling umum digunakan.
Sedangkan 3 keyword berikutnya digunakan untuk mendeklarasikan variabel dengan
karakteristik khusus yang menyangkut ruang lingkup (scope) atau masa pakainya (lifetime).
Perbedaan utama antara variabel VBA yang dideklarasikan menggunakan
Statement Dim dan Static adalah kapan variabel tersebut direset atau dibuang dari
memori. Hal ini menyangkut tentang lifetime seperti yang sudah saya singgung di
bagian atas.
Sebagai aturan umum ketika sebuah variabel dideklarasikan dengan keyword Dim,
semua variabel tingkat-prosedur direset ulang ketika prosedur yang relevan
berakhir. Sedangkan Variabel static tidak demikain (tidak direset/dibuang).
Adapun Statement Public dan Private lebih berpengaruh terhadap scoope atau
ruang lingkup dari sebuah variabel. Scoope disini maksudnya adalah bagian mana
dari sebuah project VBA dapat menggunakan atau mengakses variabel tersebut.
Apakah hanya pada prosedur tertentu, semua prosedur dalam sebuah module atau
juga dapat digunakan oleh prosedur lain meskipun berbeda module.
Scope Procedure-Level atau Local VBA
Seperti yang ditunjukkan oleh namanya, variabel tingkat prosedur atau variabel lokal
hanya dapat digunakan dalam prosedur di mana sebuah variable dideklarasikan. Hal ini
berlaku untuk prosedur jenis Sub atau Function.
Cara melakukan deklarasi variabel untuk scope level prosedur ini umumnya adalah
tepat dibawah deklarasi atau statement prosedur. Dengan cara semacam ini anda dapat
menggunakan nama yang sama untuk beberapa variabel pada prosedur yang berbeda.
Sebelum melanjutkan silahkan buat sebuah file baru kemudian simpan dengan nama file
"Kelas Excel-Latihan VBA 3.xlsm" pada folder yang sudah kita siapkan sebelumnya.
Jangan lupa pilih ekstensi .xlsm yang mendukung format macro VBA Excel.
Kode VBA
Option Explicit
Sub Latihan_Lokal_Variabel1()
Berikutnya silahkan lakukan latihan
berikut: Dim int_Angka1 As Integer
Dim int_Angka2 As Integer
1. Pada file yang telah kita buat tadi int_Angka1 = 5
buatlah sebuah module dengan nama int_Angka2 = int_Angka1 + 10
"Module1". MsgBox "Nilai Variabel int_Angka1 adalah: " &
int_Angka1 & Chr(10) & _
2. Pada Module1 ini tuliskan kode VBA di "Nilai Variabel int_Angka2 adalah: " &
samping int_Angka2
End Sub
3. Jalankan masing-masing prosedur di atas
Sub Latihan_Lokal_Variabel2()
Kode "MsgBox" pada VBA digunakan untuk Dim int_Angka1 As Integer
Dim int_Angka2 As Integer
menampilkan kotak pesan dengan isi tertentu.
Kode "&" digunakan untuk menggabungkan nilai int_Angka1 = 10
int_Angka2 = int_Angka1 * 2
satu dengan nilai lainnya seperti pada rumus excel.
Kode "Chr(10)" digunakan untuk membuat Enter MsgBox "Nilai Variabel int_Angka1 adalah: " &
int_Angka1 & Chr(10) & _
atau ganti baris pada message box, cara lain Anda "Nilai Variabel int_Angka2 adalah: " &
bisa menggunakan "vbCrLf". int_Angka2
End Sub
Pada Module1 tersebut kita membuat 2 buah Prosedur dengan nama
Latihan_Lokal_Variabel1 dan Latihan_Lokal_Variabel2.
Pada masing-masing prosedur ini kita mendeklarasikan 2 buah Variabel dengan
nama int_Angka1 dan int_Angka2.
Saat dijalankan prosedur pertama menghasilkan kotak pesan sebagai berikut:
Hal ini menunjukkan bahwa masing-masing variabel berjalan secara lokal pada procedure terkait
dan segera dihapus nilainya saat prosedur berakhir.
Selanjutnya silahkan tambahkan sebuah prosedure lain berikut ini pada Module1
dibawah kedua prosedur tadi:
Kode VBA
Sub Latihan_Lokal_Variabel3()
MsgBox "Nilai Variabel int_Angka1 adalah: " & int_Angka1 & Chr(10) & _
"Nilai Variabel int_Angka2 adalah: " & int_Angka2
End Sub
Selanjutnya, silahkan jalankan prosedur Latihan_Lokal_Variabel3. Apa yang
terjadi?
Latihan_Lokal_Variabel3 tidak mengenal Variabel int_Angka1 dan int_Angka2, sebab
Variabel int_Angka1 dan int_Angka 2 yang sudah anda deklarasikan sebelumnya hanya
tersedia untuk prosedure terkait dimana Variabel tersebut dideklarasikan.
Selanjutnya silahkan hapus statement "Option Explicit" Pada bagian atas Module1, kemudian
jalankan masing-masing prosedure pada module tersebut secara bergantian.
Meskipun kode tidak error pada dasarnya, VBA mendeklarasikan int_Angka1 dan
int_Angka2 secara Implicit. Yang berarti bahwa tipe data yang digunakan untuk kedua
variabel pada prosedur Latihan_Lokal_Variabel3 adalah Variant. Selain itu nilai kedua Variabel
pada prosedur ini masih kosong, sebab kita memng belum memasukkan nilai apapun pada
kedua Variabel VBA ini.
Dari sini Anda sudah dapat mengambil pemahaman tentang Variabel dalam Scope Level
Procedur atau Local VBA kan? Intinya Sebuah Variabel yang hanya bisa digunakan pada
Prosedur terkait dan tidak bisa dipanggil untuk Prosedur lainnya.
Lalu bagaimana jika Anda menghendaki VBA dapat mengakses sebuah Variabel dari prosedure
Scope Module-Level atau Private VBA
Jika pada Scope level Prosedure sebuah Variabel hanya bisa digunakan oleh
prosedur terkait, pada variabel scope level-modul, sebuah Variabel tersedia juga
untuk digunakan dalam prosedur lain asal masih dalam modul yang sama di mana
variabel VBA tersebut dideklarasikan.
Untuk lebih memahaminya silahkan buat sebuah module baru dengan nama
"Module2“ pada file yang sama. Pada module tersebut tuliskan kode VBA seperti
pada halaman setelah ini
Kode VBA
Option Explicit Sub Latihan_LevelModule_Variabel2()
str_Teks = "www.kelasexcel.id"
int_Angka = 2018
Dim str_Teks As String
Dim int_Angka As Integer MsgBox "Latihan_LevelModule_Variabel2" & Chr(10) &
Chr(10) & _
"Nilai Variabel str_Teks adalah: " & str_Teks &
Sub Latihan_LevelModule_Variabel1() Chr(10) & _
str_Teks = "Belajar VBA Excel Dasar" "Nilai Variabel int_Angka adalah: " & int_Angka
int_Angka = 1439 End Sub
Sub Latihan_LevelModule_Variabel3()
MsgBox "Latihan_LevelModule_Variabel1" & Chr(10) & MsgBox "Latihan_LevelModule_Variabel3" & Chr(10) &
Chr(10) & _ Chr(10) & _
"Nilai Variabel str_Teks adalah: " & str_Teks & "Nilai Variabel str_Teks adalah: " & str_Teks &
Chr(10) & _ Chr(10) & _
"Nilai Variabel int_Angka adalah: " & int_Angka "Nilai Variabel int_Angka adalah: " & int_Angka
End Sub End Sub
Jika sudah, selanjutnya silahkan jalankan masing-masing prosedure di atas secara
bergantian dengan urutan sebagai berikut. Sebelumnya tekan tombol reset pada
menu VBE untuk memastikan semua Variabel telah di reset ulang:
1. Latihan_LevelModule_Variabel3
MsgBox "Nilai Variabel int_Var1 adalah: " & int_Var1 & Chr(10) & _
"Nilai Variabel int_Var2 adalah: " & int_Var2
End Sub
Pada saat dijalankan kedua kali ternyata nilai Variabel int_Var1 tetap 5 sedangkan nilai int_Var2
menjadi 10 dan terus berubah bertambah 5 saat dijalankan ulang. Kenapa demikian?
Hal ini disebabkan Variabel int_Var2 kita deklarasikan sebagai Static, sehingga pada akhir
prosedure nilai 5 dari Variabel int_Var2 tetap tersimpan di dalam memori. Saat Anda
menjalankan prosedure tersebut untuk kedua kalinya maka nilai tersebut ditambahkan dengan
angka 5 sesuai nilai yang diberikan pada int_Var2 tersebut (int_Var2 = int_Var2 + 5).
Silahkan coba menjalankan prosedur TestVariabelStatic beberapa kali dan perhatikan nilai
yang dihasilkan.
Lalu bagaimana untuk mereset nilai Static tadi? Untuk contoh kasus ini gunakan tombol
menu reset pada VBE seperti yang sudah dijelaskan sebelumnya.
Selain digunakan pada Variabel. Keyword atau statement Static bisa juga digunakan pada
level prosedur, hal ini akan menjadikan semua Variabel didalam prosedure tersebut memiliki
lifetime yang lebih lama atau tidak segera di hapus saat akhir prosedur
Pada module4 di bawah akhir prosedure tadi tambahkan script atau kode VBA
berikut:
Kode VBA
Public Static Sub TestProsedureStatic()
Dim int_Var1 As Integer
Dim int_Var2 As Integer
int_Var1 = int_Var1 + 5
int_Var2 = int_Var2 + 5
MsgBox "Nilai Variabel int_Var1 adalah: " & int_Var1 & Chr(10) & _
"Nilai Variabel int_Var2 adalah: " & int_Var2
End Sub
Kemudian silahkan coba jalankan prosedure "TestProsedureStatic" ini beberapa
kali. Apa yang terjadi? Ternyata meskipun tidak kita deklarasikan sebagai Static,
Variabel int_Var1 dan int_Var2 pada prosedur ini diperlakukan layaknya sebuah
variabel static bukan?