Contents [show]
Dalam VBA, seperti dalam mana-mana bahasa pengaturcaraan lain, pembolehubah dan pemalar digunakan untuk menyimpan sebarang nilai. Seperti namanya, pembolehubah boleh berubah, manakala pemalar menyimpan nilai tetap.
Sebagai contoh, pemalar Pi menyimpan nilai 3,14159265… Nombor "Pi" tidak akan berubah semasa pelaksanaan program, tetapi masih lebih mudah untuk menyimpan nilai sedemikian sebagai pemalar.
Pada masa yang sama, kita boleh menggunakan pembolehubah sVAT_Rate untuk menyimpan kadar VAT ke atas barangan yang dibeli. Nilai boleh ubah sVAT_Rate mungkin berbeza bergantung pada produk yang dibeli.
Jenis Data
Semua pembolehubah dan pemalar adalah daripada jenis data tertentu. Jadual di bawah menyenaraikan jenis data yang digunakan dalam VBA dengan penerangan dan julat nilai yang mungkin:
Jenis data | Saiz | Penerangan Produk | Julat nilai |
---|---|---|---|
Byte | Bait 1 | Integer positif; sering digunakan untuk data binari | dari 0 255 untuk |
Boolean | Bait 2 | Boleh sama ada Betul atau Salah | Betul atau salah |
Integer | Bait 2 | Nombor bulat (tiada bahagian pecahan) | dari -32 hingga +768 |
Panjang | Bait 4 | Integer besar (tiada bahagian pecahan) | от -2 147 483 648 до +2 147 483 647 |
tunggal | Bait 4 | Nombor titik terapung ketepatan tunggal | dari -3.4e38 hingga +3.4e38 |
Dua kali ganda | Bait 8 | Nombor titik terapung berketepatan ganda | dari -1.8e308 hingga +1.8e308 |
mata wang | Bait 8 | Nombor titik terapung, dengan nombor tetap tempat perpuluhan | от -922 337 203 685 477.5808 до +922 337 203 685 477.5807 |
Tarikh | Bait 8 | Tarikh dan masa – Data jenis Tarikh diwakili oleh nombor titik terapung. Bahagian integer nombor ini menyatakan tarikh, dan bahagian pecahan menyatakan masa. | dari 1 Januari 100 hingga 31 Disember 9999 |
Objek | Bait 4 | Rujukan objek | Sebarang rujukan objek |
Rentetan | sedang berubah | Set watak. Jenis String boleh mempunyai panjang tetap atau berubah-ubah. Lebih biasa digunakan dengan panjang berubah-ubah | Panjang tetap – sehingga lebih kurang 65 aksara. Panjang boleh ubah – sehingga lebih kurang 500 bilion aksara |
Pelbagai | sedang berubah | Mungkin mengandungi tarikh, terapung atau rentetan aksara. Jenis ini digunakan dalam kes di mana tidak diketahui terlebih dahulu jenis data yang akan dimasukkan. | Nombor – Ganda, rentetan – Rentetan |
Jelas sekali, menggunakan jadual di atas dan memilih jenis data yang betul, anda boleh menggunakan memori dengan lebih menjimatkan (contohnya, pilih jenis data Integer sebaliknya Panjang or tunggal sebaliknya Dua kali ganda). Walau bagaimanapun, apabila menggunakan jenis data yang lebih padat, anda perlu berhati-hati supaya kod anda tidak cuba memasukkan nilai yang tidak seimbang ke dalamnya.
Mengisytiharkan Pembolehubah dan Pemalar
Nota Penterjemah: Bercakap tentang pembolehubah dalam VBA, adalah bernilai menyebut satu lagi perkara yang sangat penting. Jika kami mengisytiharkan pembolehubah tetapi tidak memberikan sebarang nilai kepadanya, maka ia dimulakan dengan nilai lalai:
• rentetan teks dimulakan dengan rentetan kosong;
• nombor — nilai 0;
• jenis pembolehubah Boolean - Salah;
• tarikh – 30 Disember 1899.
Sebelum pembolehubah atau pemalar boleh digunakan, ia mesti diisytiharkan. Untuk melakukan ini, tambahkan baris kod ringkas berikut pada makro:
Dim Имя_Переменной As Тип_Данных
Dalam baris kod di atas Nama_pembolehubah ialah nama pembolehubah yang akan digunakan dalam kod, dan Jenis data ialah salah satu jenis data daripada jadual yang diberikan sedikit lebih awal dalam artikel ini. Sebagai contoh:
Malapkan sVAT_Kadar Sebagai Tunggal Malap i Sebagai Integer
Pemalar diisytiharkan sama, tetapi apabila mengisytiharkan pemalar, nilainya mesti ditunjukkan dengan segera. Sebagai contoh, seperti ini:
Const iMaxCount = 5000 Const iMaxScore = 100
Ia tidak perlu untuk mengisytiharkan pembolehubah dalam Excel. Secara lalai, semua pembolehubah yang dimasukkan tetapi tidak diisytiharkan dalam Excel akan mempunyai jenis Pelbagai dan akan dapat menerima kedua-dua nilai angka dan teks.
Oleh itu, pengaturcara boleh menggunakan pembolehubah baharu pada bila-bila masa (walaupun ia belum diisytiharkan), dan Excel akan menganggapnya sebagai pembolehubah jenis Pelbagai. Walau bagaimanapun, terdapat beberapa sebab mengapa ini tidak boleh dilakukan:
- Penggunaan memori dan kelajuan pengiraan. Jika anda tidak mengisytiharkan pembolehubah dengan petunjuk jenis data, maka secara lalai ia akan ditetapkan kepada jenis Pelbagai. Jenis data ini menggunakan lebih banyak memori daripada jenis data lain. Beberapa bait tambahan setiap pembolehubah mungkin tidak begitu banyak, tetapi dalam amalan, program boleh mempunyai beribu-ribu pembolehubah (terutamanya apabila bekerja dengan tatasusunan). Oleh itu, memori tambahan yang digunakan oleh pembolehubah seperti Pelbagai, berbanding dengan pembolehubah jenis Integer or tunggal, boleh menambah sehingga jumlah yang ketara. Di samping itu, operasi dengan pembolehubah jenis Pelbagai dilaksanakan dengan lebih perlahan berbanding dengan pembolehubah jenis lain, masing-masing, seribu pembolehubah tambahan jenis Pelbagai boleh melambatkan pengiraan dengan ketara.
- Pencegahan kesilapan kesilapan dalam nama berubah. Jika semua pembolehubah diisytiharkan, maka pernyataan VBA boleh digunakan − Pilihan Eksplisit (kita akan membincangkannya kemudian) untuk mengenal pasti semua pembolehubah yang tidak diisytiharkan. Ini menghapuskan kemunculan ralat dalam program akibat daripada nama pembolehubah yang ditulis dengan salah. Sebagai contoh, menggunakan pembolehubah bernama sVAT_Rate, anda boleh membuat kesilapan menaip dan, memberikan nilai kepada pembolehubah ini, tulis: “VATRate = 0,175”. Dijangka mulai sekarang, pembolehubah sVAT_Rate sepatutnya mengandungi nilai 0,175 – tetapi sudah tentu ia tidak. Jika mod pengisytiharan mandatori semua pembolehubah yang digunakan didayakan, maka pengkompil VBA akan segera menunjukkan ralat, kerana ia tidak akan menemui pembolehubah Kadar PPN antara yang diumumkan.
- Menyerlahkan nilai yang tidak sepadan dengan jenis pembolehubah yang diisytiharkan. Jika anda mengisytiharkan pembolehubah jenis tertentu dan cuba menetapkan data jenis berbeza kepadanya, anda akan mendapat ralat, yang, jika tidak diperbetulkan, boleh menyebabkan program ranap. Pada pandangan pertama, ini mungkin kelihatan seperti alasan yang baik untuk tidak mengisytiharkan pembolehubah, tetapi sebenarnya, daripada sebelum ini ternyata salah satu pembolehubah menerima data yang salah yang sepatutnya diterima - jauh lebih baik! Jika tidak, jika program terus berjalan, hasilnya mungkin tidak betul dan tidak dijangka, dan akan menjadi lebih sukar untuk mencari punca ralat. Ia juga mungkin bahawa makro akan "berjaya" dilaksanakan. Akibatnya, ralat tidak akan disedari dan kerja akan diteruskan dengan data yang salah!
Dalam hal ini, adalah wajar untuk mengesan jenis data yang salah dan membetulkan ralat tersebut dalam kod seawal mungkin. Atas sebab ini, anda disyorkan supaya mengisytiharkan semua pembolehubah semasa menulis makro VBA.
Pilihan Eksplisit
operator Pilihan Eksplisit menyebabkan semua pembolehubah yang akan digunakan dalam kod VBA diisytiharkan, dan menandakan semua pembolehubah yang tidak diisytiharkan sebagai ralat semasa penyusunan (sebelum pelaksanaan kod bermula). Menggunakan operator ini tidak sukar – cuma tulis baris ini di bahagian paling atas fail VBA:
Option Explicit
Kalau nak selalu selit Pilihan Eksplisit ke bahagian atas setiap modul VBA baharu yang dibuat, ini boleh dilakukan secara automatik. Untuk melakukan ini, anda perlu mendayakan pilihan Memerlukan Pengisytiharan Pembolehubah dalam tetapan editor VBA.
Ini dilakukan seperti ini:
- Daripada menu Visual Basic Editor, klik alat > Pilihan
- Dalam dialog yang muncul, buka tab Editor
- Semak kotak Memerlukan Pengisytiharan Pembolehubah dan tekan OK
Apabila didayakan, rentetan Pilihan Eksplisit akan dimasukkan secara automatik pada permulaan setiap modul baharu yang dibuat.
Skop Pembolehubah dan Pemalar
Setiap pembolehubah atau pemalar yang diisytiharkan mempunyai skop terhadnya sendiri, iaitu bahagian terhad program di mana pembolehubah ini wujud. Skop bergantung pada tempat pengisytiharan pembolehubah atau pemalar dibuat. Ambil, sebagai contoh, pembolehubah sVAT_Rate, yang digunakan dalam fungsi Jumlah kos. Jadual berikut membincangkan dua pilihan untuk skop pembolehubah sVAT_Ratediisytiharkan dalam dua jawatan berbeza dalam modul:
Pilihan Malap Eksplisit sVAT_Kadar Sebagai Fungsi Tunggal Jumlah_Kos() Sebagai Ganda ... Fungsi Tamat | Jika pembolehubah sVAT_Rate diisytiharkan pada awal modul, maka skop pembolehubah ini akan menjadi keseluruhan modul (iaitu pembolehubah sVAT_Rate akan diiktiraf oleh semua prosedur dalam modul ini). Oleh itu, jika dalam fungsi Jumlah kos berubah-ubah sVAT_Rate akan diberikan beberapa nilai, maka fungsi seterusnya yang dilaksanakan dalam modul yang sama akan menggunakan pembolehubah sVAT_Rate dengan maksud yang sama. Walau bagaimanapun, jika beberapa fungsi yang terletak dalam modul lain dipanggil, maka untuk itu pembolehubah sVAT_Rate tidak akan diketahui. |
Pilihan Fungsi Eksplisit Jumlah_Kos() Sebagai Dua Malap sVAT_Kadar Sebagai Tunggal ... Fungsi Tamat | Jika pembolehubah sVAT_Rate diisytiharkan pada permulaan fungsi Jumlah kos, maka skopnya akan terhad hanya kepada fungsi ini (iaitu dalam fungsi Jumlah kos, anda boleh menggunakan pembolehubah sVAT_Rate, tetapi bukan di luar). Bila nak guna sVAT_Rate dalam prosedur lain, pengkompil VBA akan melaporkan ralat kerana pembolehubah ini tidak diisytiharkan di luar fungsi Jumlah kos (dengan syarat operator digunakan Pilihan Eksplisit). |
Dalam contoh yang ditunjukkan di atas, pembolehubah diisytiharkan pada peringkat modul dengan kata kunci Dim. Walau bagaimanapun, pembolehubah yang diisytiharkan mungkin perlu digunakan dalam modul lain. Dalam kes sedemikian, untuk mengisytiharkan pembolehubah dan bukannya kata kunci Dim kata kunci mesti digunakan Awam.
Dengan cara ini, untuk mengisytiharkan pembolehubah pada peringkat modul, bukannya kata kunci Dim kata kunci boleh digunakan Swasta, yang menunjukkan bahawa pembolehubah ini bertujuan untuk digunakan hanya dalam modul semasa.
Anda juga boleh menggunakan kata kunci untuk mengisytiharkan pemalar. Awam и Swasta, tetapi bukan kata kunci Konst, bersama-sama dengannya.
Contoh berikut menunjukkan penggunaan kata kunci Awam и Swasta digunakan untuk pembolehubah dan pemalar.
Pilihan sVAT_Rate Awam Eksplisit Sebagai Const Awam Tunggal iMax_Count = 5000 ... | Dalam contoh ini, kata kunci Awam digunakan untuk mengisytiharkan pembolehubah sVAT_Rate dan pemalar iMax_Count. Skop elemen yang diisytiharkan dengan cara ini akan menjadi keseluruhan projek semasa. Ini bermakna bahawa sVAT_Rate и iMax_Count akan tersedia dalam mana-mana modul projek. |
Pilihan sVAT_Rate Persendirian Eksplisit Sebagai Const Peribadi Tunggal iMax_Count = 5000 ... | Dalam contoh ini, untuk mengisytiharkan pembolehubah sVAT_Rate dan pemalar iMax_Count kata kunci yang digunakan Swasta. Skop elemen ini ialah modul semasa. Ini bermakna bahawa sVAT_Rate и iMax_Count akan tersedia dalam semua prosedur modul semasa, tetapi tidak akan tersedia untuk prosedur dalam modul lain. |