Pembolehubah dan pemalar dalam VBA

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 SaizPenerangan ProdukJulat nilai
ByteBait 1Integer positif; sering digunakan untuk data binaridari 0 255 untuk
BooleanBait 2Boleh sama ada Betul atau SalahBetul atau salah
IntegerBait 2Nombor bulat (tiada bahagian pecahan)dari -32 hingga +768
PanjangBait 4Integer besar (tiada bahagian pecahan)от -2 147 483 648 до +2 147 483 647
tunggalBait 4Nombor titik terapung ketepatan tunggaldari -3.4e38 hingga +3.4e38
Dua kali gandaBait 8Nombor titik terapung berketepatan gandadari -1.8e308 hingga +1.8e308
mata wangBait 8Nombor titik terapung, dengan nombor tetap tempat perpuluhanот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
TarikhBait 8Tarikh 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
ObjekBait 4Rujukan objekSebarang rujukan objek
Rentetansedang berubahSet watak. Jenis String boleh mempunyai panjang tetap atau berubah-ubah. Lebih biasa digunakan dengan panjang berubah-ubahPanjang tetap – sehingga lebih kurang 65 aksara. Panjang boleh ubah – sehingga lebih kurang 500 bilion aksara
Pelbagaisedang berubahMungkin 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:

  1. 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.
  2. 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.
  3. 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.

Sila tinggalkan balasan anda