Dalam VBA, seperti dalam bahasa pemrograman lainnya, variabel dan konstanta digunakan untuk menyimpan nilai apa pun. Sesuai dengan namanya, variabel dapat berubah, sedangkan konstanta menyimpan nilai tetap.
Misalnya, konstanta Pi menyimpan nilai 3,14159265… Angka “Pi” tidak akan berubah selama eksekusi program, tetapi masih lebih mudah untuk menyimpan nilai seperti itu sebagai konstanta.
Pada saat yang sama, kita dapat menggunakan variabel sPPN_Rate untuk menyimpan tarif PPN atas barang yang dibeli. Nilai variabel sPPN_Rate dapat bervariasi tergantung pada produk yang dibeli.
Jenis Data
Semua variabel dan konstanta adalah tipe data tertentu. Tabel di bawah ini mencantumkan tipe data yang digunakan dalam VBA dengan deskripsi dan rentang nilai yang mungkin:
Tipe data | Ukuran | Deskripsi Produk | Jarak nilai |
---|---|---|---|
Byte | 1 byte | bilangan bulat positif; sering digunakan untuk data biner | dari 0 ke 255 |
Boolean | 2 byte | Bisa Benar atau Salah | Benar atau salah |
Bilangan bulat | 2 byte | Bilangan bulat (tidak ada bagian pecahan) | dari -32 hingga +768 |
Panjang | 4 byte | Bilangan bulat besar (tidak ada bagian pecahan) | от -2 147 483 648 до +2 147 483 647 |
tunggal | 4 byte | Nomor floating point presisi tunggal | dari -3.4e38 hingga +3.4e38 |
Dua kali lipat | 8 byte | Nomor floating point presisi ganda | dari -1.8e308 hingga +1.8e308 |
Currency | 8 byte | Nomor titik mengambang, dengan jumlah tempat desimal yang tetap | от -922 337 203 685 477.5808 до +922 337 203 685 477.5807 |
Tanggal | 8 byte | Tanggal dan waktu – Data tipe Tanggal diwakili oleh angka floating point. Bagian bilangan bulat dari angka ini menyatakan tanggal, dan bagian pecahan menyatakan waktu. | dari 1 Januari 100 hingga 31 Desember 9999 |
obyek | 4 byte | Referensi objek | Referensi objek apa saja |
Tali | sedang berubah | Set karakter. Tipe String dapat berupa panjang tetap atau variabel. Lebih umum digunakan dengan panjang variabel | Panjang tetap – hingga sekitar 65 karakter. Panjang variabel – hingga sekitar 500 miliar karakter |
Varian | sedang berubah | Dapat berisi tanggal, float, atau string karakter. Tipe ini digunakan jika tidak diketahui terlebih dahulu tipe data apa yang akan dimasukkan. | Nomor – Ganda, string – String |
Jelas, dengan menggunakan tabel di atas dan memilih tipe data yang tepat, Anda dapat menggunakan memori dengan lebih hemat (misalnya, memilih tipe data Bilangan bulat sebagai gantinya Panjang or tunggal sebagai gantinya Dua kali lipat). Namun, saat menggunakan tipe data yang lebih ringkas, Anda harus berhati-hati agar kode Anda tidak mencoba memasukkan nilai besar yang tidak proporsional ke dalamnya.
Mendeklarasikan Variabel dan Konstanta
Catatan Penerjemah: Berbicara tentang variabel dalam VBA, perlu disebutkan satu hal lagi yang sangat penting. Jika kita mendeklarasikan sebuah variabel tetapi tidak memberikan nilai apapun padanya, maka variabel tersebut diinisialisasi dengan nilai default:
• string teks diinisialisasi dengan string kosong;
• angka — nilai 0;
• jenis variabel Boolean - PALSU;
• tanggal – 30 Desember 1899.
Sebelum variabel atau konstanta dapat digunakan, itu harus dideklarasikan. Untuk melakukannya, tambahkan baris kode sederhana berikut ke makro:
Dim Имя_Переменной As Тип_Данных
Pada baris kode di atas Nama_variabel adalah nama variabel yang akan digunakan dalam kode, dan Tipe data adalah salah satu tipe data dari tabel yang diberikan sedikit sebelumnya dalam artikel ini. Sebagai contoh:
Redupkan sVAT_Rate Sebagai Tunggal Redupkan i As Integer
Konstanta dideklarasikan dengan cara yang sama, tetapi ketika mendeklarasikan konstanta, nilainya harus segera ditunjukkan. Misalnya seperti ini:
Konst iMaxCount = 5000 Konst iMaxScore = 100
Tidak perlu mendeklarasikan variabel di Excel. Secara default, semua variabel yang dimasukkan tetapi tidak dideklarasikan di Excel akan memiliki tipe Varian dan akan dapat menerima nilai numerik dan teks.
Dengan demikian, programmer dapat menggunakan variabel baru setiap saat (bahkan jika belum dideklarasikan), dan Excel akan memperlakukannya sebagai variabel tipe Varian. Namun, ada beberapa alasan mengapa ini tidak boleh dilakukan:
- Penggunaan memori dan kecepatan komputasi. Jika Anda tidak mendeklarasikan variabel dengan indikasi tipe data, maka secara default akan diatur ke tipe Varian. Tipe data ini menggunakan lebih banyak memori daripada tipe data lainnya. Beberapa byte tambahan per variabel mungkin tidak terdengar banyak, tetapi dalam praktiknya, program dapat memiliki ribuan variabel (terutama saat bekerja dengan array). Oleh karena itu, memori ekstra yang digunakan oleh variabel seperti Varian, dibandingkan dengan variabel tipe Bilangan bulat or tunggal, dapat menambahkan hingga jumlah yang signifikan. Selain itu, operasi dengan variabel tipe Varian dieksekusi jauh lebih lambat daripada dengan variabel tipe lain, masing-masing, seribu variabel tipe ekstra Varian secara signifikan dapat memperlambat perhitungan.
- Pencegahan kesalahan ketik dalam nama variabel. Jika semua variabel dideklarasikan, maka pernyataan VBA dapat digunakan Opsi Eksplisit (kita akan membicarakannya nanti) untuk mengidentifikasi semua variabel yang tidak dideklarasikan. Ini menghilangkan munculnya kesalahan dalam program sebagai akibat dari nama variabel yang salah ditulis. Misalnya, menggunakan variabel bernama sPPN_Rate, Anda dapat membuat kesalahan ketik dan, dengan menetapkan nilai ke variabel ini, tulis: “VATRate = 0,175”. Diharapkan mulai sekarang, variabel sPPN_Rate harus berisi nilai 0,175 – tetapi tentu saja tidak. Jika mode deklarasi wajib semua variabel yang digunakan diaktifkan, maka kompiler VBA akan segera menunjukkan kesalahan, karena tidak akan menemukan variabel Tarif PPN di antara yang diumumkan.
- Menyoroti nilai yang tidak cocok dengan tipe variabel yang dideklarasikan. Jika Anda mendeklarasikan variabel dari tipe tertentu dan mencoba menetapkan data dari tipe yang berbeda ke dalamnya, Anda akan mendapatkan kesalahan, yang jika dibiarkan tidak diperbaiki, dapat menyebabkan program macet. Sepintas, ini mungkin tampak seperti alasan yang baik untuk tidak mendeklarasikan variabel, tetapi pada kenyataannya, daripada sebelumnya ternyata salah satu variabel menerima data yang salah yang seharusnya diterima – jauh lebih baik! Jika tidak, jika program terus berjalan, hasilnya mungkin salah dan tidak terduga, dan akan jauh lebih sulit untuk menemukan penyebab kesalahan. Ada juga kemungkinan bahwa makro akan "berhasil" dieksekusi. Akibatnya, kesalahan tidak akan diketahui dan pekerjaan akan dilanjutkan dengan data yang salah!
Dalam hal ini, diinginkan untuk mendeteksi tipe data yang salah dan memperbaiki kesalahan tersebut dalam kode sedini mungkin. Untuk alasan ini, Anda disarankan untuk mendeklarasikan semua variabel saat menulis makro VBA.
Opsi Eksplisit
Operator Opsi Eksplisit menyebabkan semua variabel yang akan digunakan dalam kode VBA dideklarasikan, dan menandai semua variabel yang tidak dideklarasikan sebagai kesalahan selama kompilasi (sebelum eksekusi kode dimulai). Menerapkan operator ini tidak sulit – cukup tulis baris ini di bagian paling atas file VBA:
Option Explicit
Jika Anda ingin selalu memasukkan Opsi Eksplisit ke atas setiap modul VBA baru yang dibuat, ini dapat dilakukan secara otomatis. Untuk melakukan ini, Anda perlu mengaktifkan opsi Membutuhkan Deklarasi Variabel dalam pengaturan editor VBA.
Ini dilakukan seperti ini:
- Dari menu Editor Visual Basic, klik alat > Opsi
- Pada dialog yang muncul, buka tab editor
- Centang kotak Membutuhkan Deklarasi Variabel dan tekan OK
Saat diaktifkan, string Opsi Eksplisit akan secara otomatis dimasukkan di awal setiap modul baru yang dibuat.
Lingkup Variabel dan Konstanta
Setiap variabel atau konstanta yang dideklarasikan memiliki ruang lingkup terbatasnya sendiri, yaitu bagian terbatas dari program di mana variabel ini ada. Lingkupnya tergantung di mana deklarasi variabel atau konstanta dibuat. Ambil, misalnya, variabel sPPN_Rate, yang digunakan dalam fungsi Total biaya. Tabel berikut membahas dua opsi untuk pelingkupan variabel sPPN_Ratedideklarasikan dalam dua posisi berbeda dalam modul:
Opsi Explicit Dim sVAT_Rate Sebagai Fungsi Tunggal Total_Cost() Sebagai Ganda ... Fungsi Akhir | Jika variabel sPPN_Rate dideklarasikan di awal modul, maka cakupan variabel ini akan menjadi keseluruhan modul (yaitu variabel sPPN_Rate akan dikenali oleh semua prosedur dalam modul ini). Oleh karena itu, jika dalam fungsi Total biaya variabel sPPN_Rate akan diberikan beberapa nilai, maka fungsi berikutnya yang dijalankan dalam modul yang sama akan menggunakan variabel sPPN_Rate dengan arti yang sama. Namun, jika beberapa fungsi yang terletak di modul lain dipanggil, maka untuk itu variabelnya sPPN_Rate tidak akan diketahui. |
Opsi Fungsi Eksplisit Total_Cost() Sebagai Double Dim sVAT_Rate Sebagai Single ... Fungsi Akhir | Jika variabel sPPN_Rate dideklarasikan di awal fungsi Total biaya, maka cakupannya akan dibatasi hanya untuk fungsi ini (yaitu di dalam fungsi Total biaya, Anda dapat menggunakan variabel sPPN_Rate, tapi tidak di luar). Saat mencoba menggunakan sPPN_Rate dalam prosedur lain, kompiler VBA akan melaporkan kesalahan karena variabel ini tidak dideklarasikan di luar fungsi Total biaya (asalkan operator yang digunakan Opsi Eksplisit). |
Pada contoh di atas, variabel dideklarasikan pada level modul dengan kata kunci Dim. Namun, mungkin perlu bahwa variabel yang dideklarasikan dapat digunakan dalam modul lain. Dalam kasus seperti itu, untuk mendeklarasikan variabel alih-alih kata kunci Dim kata kunci harus digunakan Publik.
Omong-omong, untuk mendeklarasikan variabel di level modul, alih-alih kata kunci Dim kata kunci dapat digunakan Swasta, yang menunjukkan bahwa variabel ini dimaksudkan untuk digunakan hanya dalam modul saat ini.
Anda juga dapat menggunakan kata kunci untuk mendeklarasikan konstanta. Publik и Swasta, tapi bukan kata kunci const, bersamaan dengan itu.
Contoh berikut menunjukkan penggunaan kata kunci Publik и Swasta diterapkan pada variabel dan konstanta.
Opsi Eksplisit Publik sVAT_Rate Sebagai Konstituen Publik Tunggal iMax_Count = 5000 ... | Dalam contoh ini, kata kunci Publik digunakan untuk mendeklarasikan variabel sPPN_Rate dan konstanta iMax_Count. Cakupan elemen yang dideklarasikan dengan cara ini akan menjadi keseluruhan proyek saat ini. Ini berarti bahwa sPPN_Rate и iMax_Count akan tersedia di modul proyek apa pun. |
Opsi Eksplisit Privat sVAT_Rate Sebagai Const Privat Tunggal iMax_Count = 5000 ... | Dalam contoh ini, untuk mendeklarasikan variabel sPPN_Rate dan konstanta iMax_Count kata kunci yang digunakan Swasta. Ruang lingkup elemen ini adalah modul saat ini. Ini berarti bahwa sPPN_Rate и iMax_Count akan tersedia di semua prosedur modul saat ini, tetapi tidak akan tersedia untuk prosedur di modul lain. |