Dalam pemrograman VBA (Visual Basic for Applications), sering kali kita membuat procedure atau function yang dapat menerima berbagai macam input. Namun, tidak semua parameter selalu harus diisi oleh pengguna. Untuk mengatasi kebutuhan tersebut, VBA menyediakan fitur Optional Parameter.
Optional Parameter memungkinkan sebuah prosedur atau fungsi dipanggil tanpa harus mengisi semua parameter yang tersedia. Fitur ini membuat kode menjadi lebih fleksibel, mudah digunakan, dan lebih mudah dipelihara.
Optional Parameter adalah parameter yang tidak wajib diberikan nilainya saat sebuah prosedur (Sub) atau fungsi (Function) dipanggil.
Parameter opsional dideklarasikan menggunakan kata kunci Optional.
Sub NamaProsedur(Optional NamaParameter As TipeData = NilaiDefault)End Sub
atau
Function NamaFungsi(Optional NamaParameter As TipeData = NilaiDefault) As TipeDataEnd Function
Misalkan kita ingin menampilkan pesan dengan nama pengguna yang bersifat opsional.
Sub TampilkanPesan(Optional Nama As String = "Pengguna") MsgBox "Selamat datang, " & NamaEnd Sub
TampilkanPesan
Hasil:
Selamat datang, Pengguna
Jika parameter diberikan:
TampilkanPesan "Andi"
Hasil:
Selamat datang, Andi
Function HitungDiskon(Harga As Double, Optional PersenDiskon As Double = 10) As Double HitungDiskon = Harga - (Harga * PersenDiskon / 100) End Function
Debug.Print HitungDiskon(100000)
Output:
90000
Karena diskon default adalah 10%.
Jika ingin menggunakan diskon berbeda:
Debug.Print HitungDiskon(100000, 20)
Output:
80000
Parameter opsional harus berada setelah parameter wajib.
Salah
Sub Test(Optional Nama As String = "", Umur As Integer)End Sub
Kode di atas akan menghasilkan error.
Benar
Sub Test(Umur As Integer, Optional Nama As String = "")End Sub
Nilai default harus berupa konstanta yang diketahui saat kompilasi.
Benar
Optional Jumlah As Integer = 10
Salah
Optional Tanggal As Date = Now()
Karena Now() bukan nilai konstan.
Untuk objek, biasanya digunakan tipe Variant.
Contoh:
Sub Cetak(Optional Data As Variant)
If IsMissing(Data) Then
MsgBox "Tidak ada data"
Else
MsgBox Data
End If
End Sub
Fungsi IsMissing() digunakan untuk memeriksa apakah parameter opsional bertipe Variant diberikan atau tidak.
Sub Tampilkan(Optional Nama As Variant)
If IsMissing(Nama) Then
MsgBox "Nama tidak diisi"
Else
MsgBox "Nama: " & Nama
End If
End Sub
Pemanggilan:
Tampilkan
Output:
Nama tidak diisi
Pemanggilan:
Tampilkan "Budi"
Output:
Nama: Budi
IsMissing() hanya dapat digunakan pada parameter bertipe Variant.
Sub BuatLaporan( _
NamaFile As String, _
Optional FormatFile As String = "PDF", _
Optional CetakOtomatis As Boolean = False)
MsgBox "File: " & NamaFile & vbCrLf & _
"Format: " & FormatFile & vbCrLf & _
"Cetak: " & CetakOtomatis
End Sub
Pemanggilan:
BuatLaporan "LaporanPenjualan"
Hasil:
File: LaporanPenjualanFormat: PDFCetak: False
Pemanggilan:
BuatLaporan "LaporanPenjualan", "Excel", True
Hasil:
File: LaporanPenjualanFormat: ExcelCetak: True
Pengguna dapat memberikan parameter sesuai kebutuhan.
Tanpa parameter opsional, sering kali kita harus membuat beberapa prosedur yang mirip.
Contoh tanpa Optional:
Sub Cetak() End Sub Sub CetakDenganJudul(Judul As String) End Sub
Dengan Optional:
Sub Cetak(Optional Judul As String = "") End Sub
Perubahan logika cukup dilakukan pada satu prosedur.
Misalkan kita membuat fungsi untuk menghitung pajak.
Function HitungPajak( _
Nilai As Double, _
Optional Tarif As Double = 11) As Double
HitungPajak = Nilai * Tarif / 100
End Function
Penggunaan:
Debug.Print HitungPajak(1000000)
Output:
110000
Dengan tarif khusus:
Debug.Print HitungPajak(1000000, 12)
Output:
120000