Skip to main content

Menggunakan Array Sebagai Nilai Sebuah Konstanta (Const) di VBA Access

Konstanta dalam VBA di Access digunakan untuk mendeklarasikan sebuah nilai yang dianggap tidak berubah. Umumnya, konstanta bersifat global dan dideklarasikan di bagian atas sebuah module, walaupun ada juga yang ditempatkan di dalam sebuah fungsi atau sub routine/procedure.

Berikut ini adalah contoh beberapa macam konstanta:
Public Const jamSehari=24 ' untuk mendeklarasikan jumlah jam dalam sehari (24 jam)
Private Const menitSejam=60 ' untuk mendeklarasikan jumlah menit dalam sejam (60 menit)
Const tipeTeks=dbText
Const strNull=vbNullString

'dan sebagainya.
Kalau diperhatikan, semua konstanta hanya mempunyai satu nilai saja. Lalu bisakah kita membuat sebuah konstanta yang nilainya berupa array? Jawabannya, bila digunakan secara langsung, maksudnya, bila dipanggil langsung tidak bisa. Sebagai contoh:
Const A=array(24,60, dbtext,vbnullstring)
tidak akan bisa dieksekusi dan akan muncul pesan kesalahan Compile Error: "Const expression required".

Untuk bisa berfungsi sebagai konstanta, maka kita harus memanipulasi array di atas dalam bentuk tipe data string/text. Nah, dari sinilah, kita kemudian memecahnya menjadi array yang bisa diambil nilainya - sesuai dengan yang kita inginkan. Berikut ini adalah beberapa contoh konstanta yang dibuat dengan menggunakan manipulasi array.

Function ejaMataUang(strKodeMataUang As String) As String
  Const mataUang = "IDR=rupiah," & _
                    "USD=dolar Amerika," & _
                    "JPY=yen Jepang"

  Dim arr1 As Variant
  Dim arr2 As Variant
  Dim i, n As Integer
  
  arr1 = Split(mataUang, ",")
  For i = 0 To UBound(arr1)
  arr2 = Split(arr1(i), "=")
    For n = 0 To UBound(arr2)
      If arr2(0) = strKodeMataUang Then
      ejaMataUang = arr2(1)
      Exit Function
      End If
    Next n
  Next i

  ejaMataUang = "Mata uang '" & strKodeMataUang & "' tidak ada dalam daftar"

End Function

Fungsi ejaMataUang di atas berisi manipulasi array dari konstanta yang digunakan untuk mengeja kode mata uang. Misalkan mata uang IDR dieja rupiah, USD diaja dollar amerika, dan sebagainya. Cara kerjanya adalah sebagai berikut:

Pertama, kita mendeklarasikan sebuah konstanta dengan nama mataUang melalui Const mataUang yang nilainya berupa string:
Const mataUang = "IDR=rupiah," & _
                    "USD=dolar Amerika," & _
                    "JPY=yen Jepang"
Konstanta di atas akan dibaca sebagai array yang terdiri dari dua macam array melalui pola tertentu dari konstanta itu. Pola nilai konstanta itu harus ditetapkan lebih dahulu. Untuk memasukkan kode mata uang beserta nilainya, kita menggunakan tanda koma (","), sedangkan untuk memberi nama mata uang terhadap sebuah kode mata uang, kita menggunakan tanda sama dengan ("="). Setelah itu dengan menggunakan statement for ... next bertinggkat, kita membuat dua buah loop untuk memisahkan array. Loop pertama untuk memisahkan konstanta yang berisi kode mata uang beserta nilainya (dipisahkan oleh tanda koma), sedangkan loop yang kedua untuk memisahkan nama mata uang terhadap sebuah kode mata uang (dipisahkan oleh tanda sama dengan).
Bila kita mengetikkan ?ejaMataUang("IDR") di Immediate Windows, maka hasilnya adalah rupiah, seperti tampak pada gambar di bawah ini.

Dengan cara di atas, kita hanya perlu memanggil fungsi ejaMataUang untuk menampilkan kode mata uang tertentu. Bila daftar kode mata uang dalam array di atas dirasa belum mencukupi, maka kita bisa menyisipkan kode beserta nama mata uang seperti pola di atas. Misalkan, EUR=dollar Eropa maka konstantanya berubah menjadi:
Const mataUang = "IDR=rupiah," & _
                    "USD=dolar Amerika," & _
                    "EUR=dolar Eropa," & _
                    "JPY=yen Jepang"
Bila contoh di atas kita menampilkan konstanta yang berupa string (teks), maka contoh kode berikut ini akan menampilkan konstanta berupa angka integer.
Function konstantaAngka(strKodeMataUang As String) As Variant
  Const mataUang = "jamSehari=24," & _
                    "menitSejam=60," & _
                    "detikSemenit=60," & _
                    "hariSeminggu=7"
  Dim arr1 As Variant
  Dim arr2 As Variant
  Dim i, n As Integer
  
  arr1 = Split(mataUang, ",")
  For i = 0 To UBound(arr1)
  arr2 = Split(arr1(i), "=")
    For n = 0 To UBound(arr2)
      If arr2(0) = strKodeMataUang Then
      konstantaAngka = CInt(arr2(1))
      Exit Function
      End If
    Next n
  Next i
  konstantaAngka = "kode '" & strKodeMataUang & "' tidak ada dalam daftar"
End Function
Fungsi konstantaAngka di atas mirip dengan fungsi ejaMataUang. Awalnya, kedua fungsi itu menggunakan array string sebagai konstanta. Pada fungsi ejaMataUang, kita tidak melakukan konversi string ke angka. Sebaliknya, pada Fungsi konstantaAngka, kita melakukan konversi dari string (text) ke angka integer, yaitu melalui fungsi CInt. CInt adalah fungsi untuk mengkonversi dari string ke integer pada Access VBA. Dengan demikian, hasil dari fungsi konstantaAngka akan berupa angka. Bila dieksekusi di Immediate Window, hasilnya seperti di gambar bawah.



Terakhir, bagaimana kita bisa membuat fungsi untuk menampilkan konstanta yang mempunyai berbagai macam tipe data, misalkan integer, string, array, dan sebagainya? Fungsi berikut ini akan menjelaskannya.

Function konstanta(strKonstanta As String) As Variant
  Const arrKonstanta = "intJamSehari;int;24," & _
                    "boolJawaban;bool;true," & _
                    "arrayBulan;array;Jan:Feb:Mar:Apr:May:Jun:Jul:Aug," & _
                    "strFormatTanggal;str;dd mmm yyyy," & _
                    "dtTanggalAwalTahun;date;1/1/2016"
  Dim arr1 As Variant
  Dim arr2 As Variant
  Dim i, n As Integer
  
  arr1 = Split(arrKonstanta, ",")
  For i = 0 To UBound(arr1)
    arr2 = Split(arr1(i), ";")
    For n = 0 To UBound(arr2)
      If arr2(0) = strKonstanta Then
        If arr2(1) = "bool" Then
          konstanta = CBool(arr2(2))
          Exit Function
        ElseIf arr2(1) = "int" Then
          konstanta = CInt(arr2(2))
          Exit Function
        ElseIf arr2(1) = "str" Then
          konstanta = arr2(2)
          Exit Function
        ElseIf arr2(1) = "array" Then
          Dim varItem As Variant
          varItem = Split(arr2(2), ":")
          konstanta = varItem
          Exit Function
        ElseIf arr2(1) = "date" Then
          konstanta = CDate(arr2(2))
          Exit Function
        End If
      End If
    Next n
  Next i
        konstanta = "kode '" & strKonstanta & "' tidak ada dalam daftar"
End Function
Fungsi konstanta di atas digunakan untuk menampilkan berbagai macam nilai yang mempunyai tipe data yang berbeda. Hasil dari fungsi itu adalah variant yang dapat berupa numerik, string, boolean, dan sebagainya. Penjelasan kodenya sbb:

Deklarasi Const arrKonstanta berisi string yang teridiri dari paling tidak 2 macam array. Array pertama, dipisahkan oleh tanda koma digunakan untuk mendeklarasikan sebuah "konstanta", misalkan, intJamSehari;int;24. Array kedua, dipisahkan oleh tanda titik koma, digunakan untuk mendefinisikan "konstanta", pada contoh sebelumnya, intJamSehari adalah konstanta bertipe integer dengan nilai 24. Contoh lainnya, strFormatTanggal adalah konstanta bertipe string yang digunakan sebagai format tanggal, nilainya adalah dd mmm yyyy. Untuk arrayBulan, tipe datanya adalah array di mana nilainya dipisahkan oleh tanda titik dua. Untuk konstanta yang lain, seperti boolJawaban dan dtTanggalAwalTahun, logika berpikirnya sama dengan yang lain.

Pada kode  "If arr2(0) = strKonstanta Then," kita mulai mengisikan nilai "konstanta" yang dimaksud. Kalau tipe data berupa integer, maka hasil dari fungsi konstanta di atas akan berupa integer. Kalau tipe data berupa string, maka hasil dari fungsi konstanta di atas akan berupa string. Kalau tipe data berupa array, maka hasil dari fungsi konstanta di atas akan berupa array, dan untuk memanggil nilai  item tertentu, kita harus mencantumkan index dari array itu. Contoh cara mengeksekusi fungsi konstanta seperti di bawah ini.

'Mengambil nilai dari dtTanggalAwalTahun pada const angka
?konstanta("dtTanggalAwalTahun")
1/1/2016 

'Mengambil nilai dari dtTanggalAwalTahun pada const angka dan menampilkannya dalam format sesuai dengan konstanta("strFormatTanggal")
?format(konstanta("dtTanggalAwalTahun"),konstanta("strFormatTanggal"))
01 Jan 2016

'Mengambil nilai dari booleJawaban pada const angka
?konstanta("boolJawaban")
True

'Mengambil nilai index ke-1 dari arrayBulan pada const angka. Indez ke-0 adalah Jan dan index ke-1 adalah Feb
?konstanta("arrayBulan")(1)
Feb

'Mengambil nilai index maksimum dari arrayBulan pada const angka.
?ubound(konstanta("arrayBulan"))
 7 

'Mengambil nilai dari intJamSehari pada const angka dan dikalikan dua.
?konstanta("intJamSehari")*2
 48 

Fungsi konstanta seperti di atas umumnya digunakan untuk proses inisialisasi program, yaitu dengan memuat nilai default yang berupa konstanta. Contoh di atas adalah contoh yang disederhanakan, karena pada dasarnya, memuat nilai default melalui penggunaan konstanta seperti ini cukup kompleks.

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access