Mengenal Konstanta dan Variabel Pada VBA Excel #05

Mengenal Konstanta dan Variabel Pada VBA Excel #05

Menjelaskan pengertian konstanta dan variabel pada VBA Excel dan cara mendeklarasikan variabel maupun konstanta pada sebuah prosedur atau modul VBA Excel. Serta bagaimana cara mengatur scope dan lifetime sebuah Variabel VBA
Tutorial Tentang Konstanta dan Variabel pada VBA Excel

Seperti yang sudah saya sampaikan pada tutorial sebelumnya, setelah membahas tentang Tipe data (Data Type) pada VBA kita akan melanjutkan seri tutorial VBA Dasar ini dengan membahas istilah Konstanta dan Variabel pada VBA serta bagaimana menggunakannya dalam sebuah kode VBA Excel.

Jika anda sudah terbiasa menggunakan rumus excel saya Yakin Anda akan cepat memahami maksud dari kedua istilah ini (Konstanta dan Variabel). Sebab, barangkali secara tidak sadar sebenarnya anda juga telah menggunakan Konstanta atau Variabel sebagai bagian dari sebuah elemen rumus excel tertentu.

Wah, jangan bilang anda masih belum faham tantang elemen penyusun rumus excel ya. Jika benar demikian, sebelum melanjutkan membaca penjelasan tentang Konstanta dan Variabel VBA ini saya sarankan terlebih dahulu untuk membaca halaman yang menjelaskan tentang fungsi dan formula excel berikut: Pengenalan Rumus dan Fungsi Pada Microsoft Excel.

Selein itu Anda akan kami ajak juga untuk lebih memahami tentang Istilah Scope atau runga lingkup VBA dan istilah lifetime VBA.

Baca-pelan-pelan dan jangan lupa siapkan dulu kopi dan cemilannya.



*FILE LATIHAN YANG DIGUNAKAN PADA PEMBAHASAN BISA ANDA DOWNLOAD PADA BAGIAN AKHIR.

KONSTANTA VBA


Bagaimanakah pengertian Konstanta pada VBA Excel?

Pada pembahasan sebelumnya sudah saya sampaikan bahwa pada dasarnya VBA Excel ada kalanya menyimpan data sebagai sebuah objek dan ada kalanya menyimpan data sebagai sebuah Variabel. Penyimpanan data dalam bentuk variabel yang tetap dan tidak berubah biasa disebut sebagai konstanta.

Jadi Konstanta pada VBA Excel adalah tempat penyimpanan bagi sebuah nilai tertentu yang mana nilai ini tetap dan tidak dapat berubah. Hal ini berarti bahwa saat digunakan Konstanta bersifat read only yang mana Nilai dalam konstanta ditetapkan saat melakukan deklarasi konstanta.

Jika Anda menulis sebuah rumus excel, misal:

=A1*2

Maka angka 2 pada rumus tersebut merupakan sebuah konstanta yang tetap, berbeda dengan nilai A1, yang mana dinilainya dpat kita ubah sesuai dengan nilai yang kita inputkan pada sel A1.

Loh bang, kan kita bisa ubah angka 2 dengan angka yang lainnya? Ya benar, namun maksud tidak dapat kita ubah disini bukan seperti itu. Jadi setelah kita menetapkan nilai 2 pada rumus tersebut maka nilai 2 itulah yang digunakan dalam rumus excel. Sedangkan tanpa merubah rumusnya kita dapat mengubah nilai A1. Saya yakin anda cukup cerdas untuk menangkap pesan yang ingin saya sampaikan.

Pada VBA Excel, untuk mendeklarasikan sebuah konstanta mengikuti sebuah sintaksis atau cara penulisan tertentu. Berikut penjelasan lebih lanjutnya.

Cara Mendeklarasikan Konstanta


Konstanta pada VBA Excel ini ada 2 jenis:
  1. Konstanta Intrinsik, merupakan konstanta yang telah disediakan oleh VBA (Visual Basic For Application). Cirinya diawali dengan kata vb atau xl dibagian awal konstanta, misal: vbYesNo dan xlDialogOpen. Mengenai konstanta default (Intrinsik) ini akan kita bahas pada halaman lain saat sudah diperlukan.
  2. Konstanta Simbolik adalah konstanta yang nilainya ditentukan oleh user (Anda) dengan menggunakan keyword atau kata kunci "Const". Jenis konstanta VBA inilah yang dimaksudkan dalam pembahasan dihalaman ini.

Konstanta dibentuk atau di deklarasikan dengan keyword Const dengan scope level minimal adalah pada scope level Module. Tentang scope ini akan kita bahas lebih detail nanti dibagian bawah.

Syntax deklarasi konstanta adalah sebagai berikut:

scope CONST Nama_Konstanta AS DataType = Nilai_Konstanta

Keterangan:
  • Elemen Scope bisa anda isi dengan Public atau Private sesuai scope yang anda butuhkan. Jika Elemen ini tidak anda sertakan maka VBA akan menganggap Konstanta dideklarasikan sebagai scope Public.
  • CONST merupakan keyword yang menunjukkan bahwa anda sedang mendeklarasikan konstanta pada module atau prosedure VBA yang sedang anda buat
  • Nama_Konstanta adalah nama yang ingin anda gunakan untuk konstanta dimaksud untuk membedakan konstanta satu dengan yang lainnya.
  • DataType merupakan jenis atau tipe data yang ingin anda gunakan dalam konstanta tersebut sebagaimana yang sudah dijelaskan pada tutorial sebelumnya.
  • Nilai_Konstanta adalah nilai yang ingin anda berikan untuk konstanta tersebut, tentunya harus sesuai dengan tipe data yang Anda tentukan.

Contoh Deklarasi Konstanta


Berikut contoh sederhana penulisan sebuah deklarasi konstanta:

Public Const Penulis As String = "Kang IM"
Private Const NamaBlog As String = "Kelas Excel"

Untuk saat ini saya kira tidak perlu memperpanjang pembahasan mengenai Konstanta pada VBA. Pada bagian selanjutnya Anda akan saya ajak untuk mengenal dan belajar lebih jauh mengenai Variabel VBA.

Pembahasan mengenai tipe Data VBA bisa anda temukan disini:Mengenal Tipe Data Pada VBA Excel

VARIABEL VBA


Variabel pada VBA Excel merupakan bagian yang saya anggap sangat penting untuk Anda kuasai. Sebab.... sebab apa ya? pokoknya penting lah. Hahahaha. Silahkan anda definisikan sendiri pentingnya mempelajari pengertian dan cara menggunakan Variabel VBA ini setelah anda selesai membaca dan mempraktekkan tutorial dasar VBA ini.

Apa sih Variabel VBA itu?

Variabel adalah nama lokasi memori yang digunakan untuk menyimpan atau mewakili nilai tertentu yang dapat diubah selama eksekusi kode VBA.

Pada dasarnya Variabel sama seperti konstanta yang memiliki nama dan tipe data tertentu, bedanya saat kode berjalan nilai konstanta tidak dapat diubah sedangkan variabel nilainya dapat diubah untuk memanipulasi data.

Jadi jika konstanta hanya mampu untuk dibaca atau diambil nilainya (Read), Variabel selain mampu untuk diambil nilainya juga bisa di tulis atau diubah nilai yang tersimpan didalamnya (Read and Write).

Dari pengertian di atas dapat kita sederhanakan bahwa variabel memiliki 3 karakteristik berikut:
  1. Memiliki nama tertentu.
  2. Marupakan lokasi penyimpanan nilai atau data di dalam memori komputer.
  3. Digunakan oleh sebuah program.

Dari ketiga karakteristik utama dari variabel di atas saya kira dapat anda jadikan acuan tentang apa yang perlu Anda pahami setelah selesai membaca panduan mengenai Variabel VBA pada bagian ini supaya Anda mampu mendeklarasikan variabel dengan tepat pada saat menuliskan kode-kode Macro VBA Excel, yakni:
  1. Bagaimana Anda menentukan cara penyimpanan nilai atau data. Pembahasan mengenai hal ini terkait erat tentang bagaimana Anda menentukan VBA datatype (Tipe data) yang anda gunakan serta bagaimana cara mendefinisikan atau mendeklarasikan sebuah variabel.
  2. Bagaimana Anda memberi nama variabel VBA.
  3. Bagaimana Anda menentukan dimana sebuah Variabel dapat digunakan atau diakses. Pembahasan hal ini terkait erat dengan Scope (Ruanglingkup) dan Lifetime of Variables (Umur Variabel).

Sebelum membahas tentang Konstanta dan Variabel Pada VBA Excel ini, saya terlebih dahulu memilih untuk membahas Tipe Data VBA pada artikel tutorial VBA Dasar sebelumnya. Sehingga kali ini saya tidak perlu mengulangnya lagi.

Manfaat Mendeklarasikan Variabel VBA


Sebenarnya Anda bisa saja menyusun kode program VBA tanpa melakukan deklarasi Variabel. Hanya saja seperti yang sudah kita ulas pada seri sebelumnya bahwa dengan Mendeklarasikan variabel secara explicit maka kode macro VBA yang kita buat akan berjalan lebih cepat serta lebih efisien dalam penggunaan memori.

Beberapa alasan atau manfaat lain kenapa Anda harus melakukan deklarasi variabel adalah sebagai berikut:
  1. Memungkinkan anda untuk menggunakan fitur AutoComplete untuk menghindari kesalahan penulisan nama variabel saat melakukan pemanggilan atau bermaksud menggunakan variabel tertentu.
  2. Membuat VBA melakukan pemeriksaan error atau kesalahan tambahan. Misal anda mendeklarasikan sebuah variabel sebagai integer karena bermaksud mengisi value atau nilai variabel tersebut dengan sebuah angka, namun Anda mengisinya dengan sebuah teks tanpa sengaja. Jika terjadi hal demikian maka VBA akan memberikan informasi kesalahan bahwa anda memasukkan nilai yang tidak sesuai pada variabel tersebut.
  3. Mendeklarasikan variabel akan meningkatkan Readability atau tingkat keterbacaan sebuah kode. Hal ini menjadikan proses Debug menjadi lebih mudah dan mengurangi resiko kesalahan atau error tertentu.

Inilah alasan kenapa Anda harus mengaktifkan opsi "Option Explicit" seperti yang sudah disampaikan pada seri pertama tutorial VBA ini. Statemen Option Explicit yang Anda gunakan pada setiap awal sebuah modul akan memaksa anda untuk selalu mendefinisikan atau melakukan deklarasi Variabel.

Hal lain yang saya kira cukup bermanfaat adalah bahwa dengan menggunakan statemen Option Explicit ini, Visual Basic Editor secara otomatis mengoreksi ejaan nama variabel VBA yang anda buat.

Cara Mendeklarasikan Variabel VBA


Sekarang, bagaimana cara melakukan deklarasi variabel? Syntax untuk mendeklarasikan Variabel VBA adalah sebagai berikut:

Keyword Nama_Variabel As Tipe_Data

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. Meskipun Elemen ini opsional atau boleh tidak digunakan, saya sarankan Anda untuk selalau menggunakannya, kecuali Anda benar-benar bingung Tipe Data apa yang harus anda gunakan pada variable yang anda deklarasikan.

Contoh deklarasi Variabel VBA adalah sebagai berikut:

Dim nomor_urut As Long
Dim nomor_kode As String

Kode di atas bermaksud mendeklarasikan 2 buah Variabel dengan nama nomor_urut dan nomor_kode. Variabel nomor_urut kita tentukan menggunakan tipe data Long, sedangkan nomor_kode kita tentukan sebagai String atau teks.

Agar baris penulisan kode lebih ringkas, Anda dapat juga menggunakan 1 keyword Dim untuk mendeklarasikan beberapa variabel sekaligus dengan memisahkan antar variabel mengunakan koma(,). Contohnya adlaah sebagai berikut:

Dim nomor_urut As Long, nomor_kode As String

Dulu (bahkan sampai sekarang juga sih) saya sering meringkas penulisan kode deklarasi variabel semisal berikut:

Dim nomor_A, nomor_B As Integer

Dengan maksud mendeklarasikan vaiabel nomor_A dan nomor_B sebagai nilai Integer.

Perlu Anda ketahui bahwa pada 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, penulisan kode deklarasi yang tepat seharusnya adalah sebagai berikut:

Dim nomor_A As Integer, nomor_B As Integer

Aturan Menamai Variabel VBA


Pada dasarnya anda bebas menamai sebuah variabel. Namun akan lebih baik jika nama tersebut sekaligus mencerminkan nilai atau isi dari variabel tersebut. Misalnya gunakan singkatan tipe data kemudian disambung dengan Nama yang menggambarkan nilai variabel tersebut.

Berikut beberapa singkatan yang umum dipakai sebagai prefix atau awalan nama Variabel:

Data TypePrefixAlternatif
Stringstr-
Booleanblnb
Doubledbld
Integerinti
Longlngl
Singlesngs
Date/Timedt-
Currencycurc
Objectobj-
Variantvarv
Type (User-Defined)typu

Contoh Nama Variabel:
  1. Untuk menamai variabel nomor urut dengan tipe Integer pakailah nama: intNoUrut, int_No_Urut atau int_NoUrut.
  2. Untuk Variabel yang menyimpan nama orang misalnya gunakan nama str_Nama atau s_Nama yang mana str atau sadalah singkatan dari tipe data String.

Selain itu ada beberapa aturan khusus yang harus Anda patuhi saat menentukan nama sebuah Variabel:
  1. Menggunakan huruf sebagai karakter pertama. Karakter selanjutnya bisa berupa huruf, angka, dan beberapa karakter tanda baca misalnya underscore (_).
  2. Nama variabel tidak boleh melebihi 255 karakter.
  3. Nama variabel VBA tidak boleh mengandung spasi (), periode/titik (.), Operator matematika (misalnya +, -, /, ^ atau *), operator perbandingan (seperti =, < atau >) atau karakter tanda baca tertentu (seperti jenis-deklarasi karakter @, #, $,%, & dan !).
  4. Nama variabel VBA tidak dapat sama dengan keyword atau istilah apa pun sudah ada atau digunakan secara default oleh sistem VBA Excel. Misalnya: Sub, Dim, With, End, Next, For dan lain sebagainya.
  5. Visual Basic for Applications tidak membedakan antara huruf besar dan huruf kecil. Misalnya, "A" sama dengan "a".
  6. Nama setiap variabel VBA yang digunakan harus unik dalam scope yang relevan. Artinya nama variabel tingkat prosedur harus unik dalam prosedur yang relevan, nama variabel level modul harus unik dalam modulnya, dan seterusnya.

Cara Memasukkan Nilai ke Dalam Variabel VBA


Setelah mendeklarasikan Variabel, bagaimana cara memasukkan nilai ke dalam variebel tersebut?

Jika Anda membaca tutorial ini secara urut dari seri pertama, saya yakin anda sudah faham bahwa pada dasarnya tipe variabel itu ada 2 macam. Yakni variabel ber-datatype object dan non object. Untuk masing-masing tipe ini cara memasukkan nilainya berbeda:

Variabel ber-datatype selain object caranya adalah dengan menuliskan nama variabel kemudian diikuti tanda sama dengan (=) dan nilai dari variabel tersebut.

Nama_Variabel = Ekspresi_Nilai_Variabel

Contoh:

Dim nomor_urut As Long, nomor_kode As String

nomor_urut = 123
nomor_kode = "A123"

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_Variabel

Contoh:

Dim range_Data As Range

Set range_Data = Sheets("Sheet1").Range("A1")

Nah, mudah bukan? untuk sementara cukup ini dulu tentang bagaimana cara memasukkan nilai ke dalam sebuah variabel. Contoh-contoh lainnya akan dijelaskan pada bagian-bagian penjelasan lain. Yang perlu Anda catat, Tambahkan keyword/statement SET jika data pada variabel tersebut adalah berupa object VBA.

Keyword Dim, Static, Public dan Private Pada Deklarasi Variabel VBA


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).

Lalu apa maksud dari masing-masing statement atau keyword di atas?

Bagian ini memang agak sulit dijelaskan, jadi jika Anda merasa kebingungan untuk memahaminya saya rasa wajar. Hal ini lebih disebabkan keterbatasan kemampuan saya dalam menjelaskan dan bukan karena tingkat kecerdasan Anda. Soo, silahkan ambil nafas panjang terlebih dahulu.

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.

Tentang scope ini sudah sedikit saya singgung pada seri tutorial VBA Dasar sebelumnya, silahkan dibaca terlebih dahulu jika Anda belum sempat membacanya:Gambaran Umum Scope.

Jika sudah anda baca, saya kira bagian ini akan lebih mudah dijelaskan dengan membuat sebuah file latihan. Jadi 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.

Bentar, saya tak nyeduh kopi dulu.

MENENTUKAN SCOOPE VARIABLE VBA


Pada bagian sebelumnya sudah dijelaskan bahwa Scope variabel VBA adalah mengacu pada istilah tentang modul dan prosedur mana yang dapat menggunakan sebuah variabel. Dengan kata lain, Scope menentukan di mana variabel itu dapat digunakan pada sebuah project VBA.

Pada seri yang lalu sudah dijelaskan sebuah workbook Excel dapat memiliki beberapa modul dan pada setiap modul dapat diisi dengan beberapa prosedur VBA.

Pada sebuah aplikasi VBA yang sederhana, Anda mungkin cukup menggunakan satu modul dengan beberapa prosedur. Namun, dengan bertambahnya waktu bisa jadi pekerjaan Anda dengan VBA mulai menjadi lebih kompleks dan membutuhkan banyak module serta prosedure VBA.

Pada kasus yang lebih kompleks, barangkali Anda tidak ingin semua variabel VBA dapat diakses oleh setiap modul dan prosedur. Jadi beberapa variabel tertentu hanya boleh digunakan oleh prosedure tertentu baik pada module yang sama atau prosedure pada modul yang lain.

Penentuan ruang lingkup atau scope variabel VBA secara tepat akan memungkinkan Anda untuk melakukan hal semacam ini.

Jika pada bahasan prosedure dan module saya menyinggung ada 4 level scope, untuk bahasan kali ini akan dicontohkan 3 saja yakni:
  1. Procedure-Level atau Local VBA Variable
  2. Module-Level atau Private VBA Variable
  3. Project-Level atau Public VBA Variable

*Semoga saya tidak salah menggunakan istilahnya. Jika memang kurang tepat Silahkan dikoreksi dengan membandingkannya dengan tutorial sejenis pada web atau buku tentang VBA.

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.

File "Kelas Excel-Latihan VBA 3.xlsm" tadi sudah dibuat kan? Okey, selanjutnya silahkan dinikmati kopi dan cemmilannya.

Berikutnya silahkan lakukan latihan berikut:
  1. Pada file yang telah kita buat tadi buatlah sebuah module dengan nama "Module1".
  2. Pada Module1 ini tuliskan kode VBA berikut ini:

    Option Explicit
    
    Sub Latihan_Lokal_Variabel1()
        Dim int_Angka1 As Integer
        Dim int_Angka2 As Integer
    
        int_Angka1 = 5
        int_Angka2 = int_Angka1 + 10
    
        MsgBox "Nilai Variabel int_Angka1 adalah: " & int_Angka1 & Chr(10) & _
               "Nilai Variabel int_Angka2 adalah: " & int_Angka2
    End Sub
    
    Sub Latihan_Lokal_Variabel2()
        Dim int_Angka1 As Integer
        Dim int_Angka2 As Integer
    
        int_Angka1 = 10
        int_Angka2 = int_Angka1 * 2
    
        MsgBox "Nilai Variabel int_Angka1 adalah: " & int_Angka1 & Chr(10) & _
               "Nilai Variabel int_Angka2 adalah: " & int_Angka2
    End Sub
  3. Jalankan masing-masing prosedur di atas.

* Pastikan seebelum dan setelah penulisan karakter & ada spasinya.

  • Kode "MsgBox" pada VBA digunakan untuk menampilkan kotak pesan dengan isi tertentu.
  • Kode "&" digunakan untuk menggabungkan nilai satu dengan nilai lainnya seperti pada rumus excel.
  • Kode "Chr(10)" digunakan untuk membuat Enter atau ganti baris pada message box, cara lain Anda bisa menggunakan "vbCrLf".

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:

Local Variable VBA Excel

Sedangkan prosedur kedua menampilkan kotak pesan yang berbeda sebagai berikut:

Variabel Lokal VBA Excel

Hal ini menunjukkan bahwa masing-masing variabel berjalan secara lokal pada prosedure terkait dan segera dihapus nilainya saat prosedur berakhir.

Selanjutnya silahkan tambahkan sebuah prosedure lain berikut ini pada Module1 dibawah kedua prosedur tadi:

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?

Statement Option Explicit - Deklarasi variabel

Gambar di atas menujukkan bahwa Latihan_Lokal_Variabel3 tidak mengenal Variabel int_Angka1 dan int_Angka2, sebab Variabel int_Angka1 dan int_Angka1 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 lain?

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 berikut:

Option Explicit

Dim str_Teks As String
Dim int_Angka As Integer

Sub Latihan_LevelModule_Variabel1()
    str_Teks = "Belajar VBA Excel Dasar"
    int_Angka = 1439

    MsgBox "Latihan_LevelModule_Variabel1" & Chr(10) & Chr(10) & _
           "Nilai Variabel str_Teks adalah: " & str_Teks & Chr(10) & _
           "Nilai Variabel int_Angka adalah: " & int_Angka
End Sub

Sub Latihan_LevelModule_Variabel2()
    str_Teks = "www.kelasexcel.web.id"
    int_Angka = 2018

    MsgBox "Latihan_LevelModule_Variabel2" & Chr(10) & Chr(10) & _
           "Nilai Variabel str_Teks adalah: " & str_Teks & Chr(10) & _
           "Nilai Variabel int_Angka adalah: " & int_Angka
End Sub

Sub Latihan_LevelModule_Variabel3()
    MsgBox "Latihan_LevelModule_Variabel3" & Chr(10) & Chr(10) & _
           "Nilai Variabel str_Teks adalah: " & str_Teks & Chr(10) & _
           "Nilai Variabel int_Angka adalah: " & int_Angka
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

    Private Variable VBA 1
  2. Latihan_LevelModule_Variabel1 kemudian Latihan_LevelModule_Variabel3

    Private Variable VBA 2
  3. Latihan_LevelModule_Variabel2 kemudian Latihan_LevelModule_Variabel3

    Private Variable VBA 3

Cara mereset VBA

Dari latihan ini anda bisa dapatkan bahwa dengan melakukan deklarasi Variabel pada awal baris deklarasi atau sebelum mendeklarasikan prosedur, tepatnya dibawah statement "Option Explicit", maka Variabel tersebut memliki scope level module.

Artinya Variabel VBA tersebut bisa dikenali oleh semua prosedur dalam module yang sama dan tidak terjadi error seperti pada contoh latihan sebelumnya pada bagian Scope Procedure-Level atau Local VBA.

Pada contoh deklarasi diatas, untuk mendapatkan scope level module selain mendeklarasikan dengan keyword Dim Anda juga dapat mendeklarasikan Variabel tersebut dengan statement Private. Sehingga kode:

Dim str_Teks As String
Dim int_Angka As Integer

Bisa juga anda tulis dengan

Private str_Teks As String
Private int_Angka As Integer

Menggunakan keyword Private pada kasus ini akan memberikan efek yang sama dengan statemnet Dim. Untuk alasan inilah, agar sebuah kode lebih mudah dibaca saya menyarankan Anda menggunakan Statement Private. Sebab secara umum kita akan mendeklarasikan sebuah variabel dengan Dim sehingga saat anda menggunakan Keyword Private maka akan menjadi pembeda, sehingga lain waktu anda membaca ulang kode tersebut pesan yang disampaikan oleh kode tersebut akan leih mudah untuk kita baca.

Oke, sudah bisa memahami variabel scope modul ya?

Sekarang buat 1 Modul lagi dengan nama "Module3". Kemudian tuliskan kode Macro VBA Excel berikut pad modul tersebut:

Option Explicit

Sub Latihan_LevelPublic_Variabel()
    MsgBox "Latihan_LevelModule_Variabel3" & Chr(10) & Chr(10) & _
           "Nilai Variabel str_Teks adalah: " & str_Teks & Chr(10) & _
           "Nilai Variabel int_Angka adalah: " & int_Angka
End Sub

Kemudian coba jalankan prosedur Latihan_LevelPublic_Variabel ini.

Error ya? Soo bagaimana cara agar kita bisa menggunakan sebuah Variabel lintas Modul? Kita lanjutkan pembahasan pada bagian selanjutnya.

Scope Project-Level atau Public VBA


Sampai tahap ini Anda sudah bisa menggunakan Variabel pada level prosedur dan Modul. Sekarang kita akan lanjutkan untuk membuat sebuah Variabel Level Project dimana scope levelnya lebih luas jika dibandingkan 2 scope sebelumnya.

Untuk mendeklarasikan variabel VBA pada scope Public, deklarasinya harus memenuhi persyaratan berikut:
  1. Deklarasikan variabel tersebut seperti deklarasi tingkat modul yang dituliskan pada awal modul diluar semua prosedur.
  2. Gunakan Statement Public sebagai pengganti Statament Dim.
  3. Deklarasi variabel harus dibuat dalam modul VBA standar.

Variabel VBA yang deklarasinya memenuhi ketentuan di atas tersedia untuk prosedur apa pun, bahkan dalam modul berbeda dalam Workbook Excel yang sama.

Oke sekarang kita praktekkan ya?

Silahkan buka Module2 kemudian ubah keyword Dim atau Private jika sudah Anda ubah pada deklarasi variabel str_Teks dan int_Angka dengan statemen Public. sehingga pada module2 tersebut deklarasi kedua variabel tersebut menjadi:

Public str_Teks As String
Public int_Angka As Integer

Nah sekarang, coba buka Module3 kemudian jalankan prosedur Latihan_LevelPublic_Variabel.

Sekarang tidak error lagi bukan? Hanya saja nilai masing-masing variabel masih kosong, sebab kita memang belum memasukkan nilai pada masing-masing variabel tersebut.

Selanjutnya coba jalankan prosedur Latihan_LevelModule_Variabel1 atau Latihan_LevelModule_Variabel2 pada Module2 untuk memberikan nilai pada kedua variabel kemudian jalankan lagi prosedur Latihan_LevelPublic_Variabel pada module3.

Sampai disini anda sudah memahami tentang bagaimana mengatur scope atau ruang lingkup sebuah variabel.

Yang perlu Anda catat sebaiknya gunakan scope yang sesempit mungkin, jika hanya butuh untuk level Prosedure maka atur variabel untuk level prosedure saja. Jika sebuah variabel juga dibutuhkan pada level Module saja, maka jangan di atur untuk lebih luas sampai pada scope Public/Project.

Barangkali anda bertanya, loch kog setelah prosedure berakhir nilai variabel tadi masih tersimpan dan tidak hilang dari memori?

Pertanyaan ini ada kaitannya dengan istilah Lifetime pada VBA. Jika sudah, mari kita lanjutkan pembahasan.

MEMAHAMI LIFETIME VARIABLE VBA


Istilah "lifetime" atau terkadang disebut "life" saja mengacu pada berapa lama sebuah variabel disimpan dalam memori komputer.

Pada dasarnya Scope sebuah variabel, selain berpengaruh terhadap dimana variabel tersebut dapat di akses atau digunakan, namun juga mempengaruhi keadaan di mana variabel dihapus atau tidak dari memori.

Secara umum ada 2 aturan dasar mengenai hal ini:
  • Variabel VBA tingkat prosedur yang dinyatakan dengan pernyataan Dim dihapus atau direset dari memori ketika prosedur tersebut selesai (End Sub).
  • Tingkat prosedur Variabel static, variabel tingkat modul, dan variabel public mempertahankan nilainya antara panggilan prosedur (Tidak dihapus/direset).

Agar lebih jelas Lakukan kegiatan berikut:
  1. Buat sebuah modul baru dengan nama "Module4" pada file yang telah kita buat sebelumnya tadi.
  2. Buat sebuah prosedur public dengan nama "TestVarabelStatic".
  3. Didalam prosedure tadi deklarasikan 2 buah variabel, masing-masing dengan nama int_Var1 dan int_Var2. Gunakan keyword Dim untuk int_Var1 dan keyword static untuk int_Var2.
  4. Setelah mendeklarasikan kedua variabel tadi, isi nilai masing-masing nilai dengan menjumlahkan variabel tersebut dengan angka 5.
  5. Selanjutnya kita tes nilai masing-masing variabel dengan memanggilnya pada sebuah message box dengan kode berikut:

    MsgBox "Nilai Variabel int_Var1 adalah: " & int_Var1 & Chr(10) & _
    "Nilai Variabel int_Var2 adalah: " & int_Var2
  6. Akhiri prosedure tersebut dengan statement penutup "End Sub"

Apabila langkah-langkah yang anda lakukan benar maka kode yang Anda buat pada Module1 akan terlihat seperti ini:

Option Explicit

Public Sub TestVariabelStatic()
    Dim int_Var1 As Integer
    Static 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

Setelah selesai silahkan coba jalankan prosedur tersebut.

Pada saat dijalankan pertama kali terlihat bahwa nilai dari Variabel int_Var1 dan int_Var2 adalah 5. Seperti terlihat pada kotak pesan berikut:

Static Variabel VBA Excel

Selanjutnya, silahkan jalankan lagi prosedure tersebut dan lihat hasilnya.

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?

Static Variabel VBA Excel

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 TestVarabelStatic 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.

Dari contoh kasus sederhana di atas, saya yakin anda sudah mendapatkan gambaran tentang maksud dari lifetime yang saya singgung di atas.

Istilah "lifetime" pada VBA mengacu pada berapa lama suatu variabel disimpan dalam memori komputer."

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:

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?

Baiklah, pembahasan mengenai Konstanta dan Variabel VBA pada seri tutorial VBA ini saya kira sudah cukup panjang dan melelahkan. Untuk itu saya sudahi dulu.

Untuk melengkapi pembahasan kali ini silahkan download File latihan di bawah ini :

Dropbox
GDrive

*Jika link mati / tidak dapat diakses silahkan lapor via kontak yang tersedia
LINK DOWNLOAD TERKUNCI.
Silahkan SHARE untuk membuka kunci!


Semoga bermanfaat dan menambah semangat belajar VBA Anda. Jangan lupa di Share jika ada manfaatnya, sehingga kawan-kawan lain juga ikut merasakan manfaatnya. Sampai jumpa pada seri berikutnya. Salam Kelas Excel.

Silahkan bagikan tulisan ini di akun sosial media agar teman-teman Anda juga mendapatkan manfaat yang sama. Apabila ada pertanyaan, saran atau kritik, silahkan disampaikan melalui kolom komentar.

Mengenal Konstanta dan Variabel Pada VBA Excel #05Menjelaskan pengertian konstanta dan variabel pada VBA Excel dan cara mendeklarasikan variabel maupun konstanta pada sebuah prosedur atau modul VBA Excel. Serta bagaimana cara mengatur scope dan lifetime sebuah Variabel VBA