Агуулга
Бусад програмчлалын хэлний нэгэн адил VBA-д аливаа утгыг хадгалахын тулд хувьсагч болон тогтмолуудыг ашигладаг. Нэрнээс нь харахад хувьсагчид өөрчлөгдөж болох ба тогтмолууд нь тогтмол утгыг хадгалдаг.
Жишээлбэл, тогтмол Pi 3,14159265 утгыг хадгалдаг ... Програмыг гүйцэтгэх явцад "Pi" тоо өөрчлөгдөхгүй, гэхдээ ийм утгыг тогтмол гэж хадгалах нь илүү тохиромжтой хэвээр байна.
Үүний зэрэгцээ бид хувьсагчийг ашиглаж болно sVAT_Rate худалдан авсан барааны НӨАТ-ын хувь хэмжээг хадгалах. Хувьсах утга sVAT_Rate худалдан авсан бүтээгдэхүүнээс хамаарч өөр өөр байж болно.
Мэдээллийн төрөл
Бүх хувьсагч ба тогтмолууд нь тодорхой өгөгдлийн төрлийнх байна. Доорх хүснэгтэд VBA-д ашигласан өгөгдлийн төрлүүдийг тайлбар болон боломжит утгын хүрээний хамт жагсаав.
Мэдээллийн төрөл | Хэмжээ | Тодорхойлолт | Үнэлэмжийн хүрээ |
---|---|---|---|
байт | 1 байт байна | Эерэг бүхэл тоо; ихэвчлэн хоёртын өгөгдөлд ашиглагддаг | 0 нь 255 нь |
Boolean | 2 байт байна | Үнэн эсвэл худал байж болно | Үнэн эсвэл худал |
Бүхэл тоо | 2 байт байна | Бүхэл тоо (бутархай хэсэг байхгүй) | -32 -аас +768 хүртэл |
Урт | 4 байт байна | Том бүхэл тоо (бутархай хэсэг байхгүй) | от -2 147 483 648 до +2 147 483 647 |
нэг | 4 байт байна | Нэг нарийвчлалтай хөвөх цэгийн дугаар | -3.4e38-аас +3.4e38 хүртэл |
Давхар | 8 байт байна | Давхар нарийвчлалтай хөвөх цэгийн дугаар | -1.8e308-аас +1.8e308 хүртэл |
Валютын | 8 байт байна | Тогтмол тооны аравтын оронтой хөвөгч цэгийн тоо | от -922 337 203 685 477.5808 до +922 337 203 685 477.5807 |
огноо | 8 байт байна | Огноо ба цаг – Огноо төрлийн өгөгдлийг хөвөгч цэгийн тоогоор илэрхийлнэ. Энэ тооны бүхэл хэсэг нь огноог, бутархай хэсэг нь цагийг илэрхийлнэ. | 1 оны 100-р сарын 31-аас 9999-р сарын XNUMX хүртэл |
Обьект | 4 байт байна | Объектийн лавлагаа | Аливаа объектын лавлагаа |
String | өөрчлөгдөж байна | Тэмдэгтийн багц. String төрөл нь тогтмол эсвэл хувьсах урттай байж болно. Хувьсах урттай илүү өргөн хэрэглэгддэг | Тогтмол урт - ойролцоогоор 65 тэмдэгт хүртэл. Хувьсах урт - ойролцоогоор 500 тэрбум тэмдэгт хүртэл |
Хувилбар | өөрчлөгдөж байна | Огноо, хөвөх тэмдэг эсвэл тэмдэгтийн мөр агуулж болно. Энэ төрлийг ямар төрлийн өгөгдөл оруулах нь тодорхойгүй тохиолдолд ашигладаг. | Тоо – Давхар, мөр – Мөр |
Дээрх хүснэгтийг ашиглан зөв өгөгдлийн төрлийг сонгосноор та санах ойг илүү хэмнэлттэй ашиглах боломжтой (жишээлбэл, өгөгдлийн төрлийг сонгох) Бүхэл тоо оронд нь Урт or нэг оронд нь Давхар). Гэсэн хэдий ч илүү авсаархан өгөгдлийн төрлүүдийг ашиглахдаа таны код тэдгээрт пропорциональ бус том утгыг оруулахгүй байхыг анхаарах хэрэгтэй.
Хувьсагч ба тогтмолуудыг зарлах
Орчуулагчийн тэмдэглэл: VBA дахь хувьсагчдын талаар ярихдаа бас нэг чухал зүйлийг дурдах нь зүйтэй. Хэрэв бид хувьсагчийг зарласан боловч түүнд ямар ч утга өгөхгүй бол түүнийг анхдагч утгаар эхлүүлнэ:
• Текстийн мөрүүдийг хоосон мөрүүдээр эхлүүлдэг;
• тоонууд — утга 0;
• төрөл хувьсагч Boolean - худал;
• огноо - 30 оны 1899-р сарын XNUMX.
Хувьсагч эсвэл тогтмолыг ашиглахын өмнө үүнийг зарлах ёстой. Үүнийг хийхийн тулд дараах энгийн кодын мөрийг макрот нэмнэ үү.
Dim Имя_Переменной As Тип_Данных
Дээрх кодын мөрөнд Хувьсах_ нэр кодонд ашиглагдах хувьсагчийн нэр бөгөөд Өгөгдлийн_төрөл Энэ нийтлэлд бага зэрэг өгөгдсөн хүснэгтийн өгөгдлийн төрлүүдийн нэг юм. Жишээлбэл:
Dim sVAT_Rate Single Dim i As Integer
Тогтмолуудыг үүнтэй адил зарладаг боловч тогтмолыг зарлахдаа тэдгээрийн утгыг нэн даруй зааж өгөх ёстой. Жишээлбэл, иймэрхүү:
Const iMaxCount = 5000 Const iMaxScore = 100
Excel-д хувьсагчийг зарлах шаардлагагүй. Анхдагч байдлаар, Excel-д оруулсан боловч зарлаагүй бүх хувьсагч нь төрөлтэй байна Хувилбар мөн тоон болон текстийн утгыг хоёуланг нь хүлээн авах боломжтой болно.
Тиймээс програмист шинэ хувьсагчийг хүссэн үедээ (зарлагдаагүй байсан ч) ашиглах боломжтой бөгөөд Excel нь үүнийг төрлийн хувьсагч гэж үзэх болно. Хувилбар. Гэсэн хэдий ч үүнийг хийхгүй байх хэд хэдэн шалтгаан бий:
- Санах ойн хэрэглээ ба тооцоолох хурд. Хэрэв та өгөгдлийн төрлийг харуулсан хувьсагчийг зарлаагүй бол анхдагчаар энэ нь төрөлд тохируулагдах болно. Хувилбар. Энэ төрлийн өгөгдлийн төрөл бусад өгөгдлийн төрлөөс илүү их санах ой ашигладаг. Хувьсагч бүрт хэдэн байт илүү сонсогдох нь тийм ч их сонсогдохгүй байж болох ч практик дээр программууд хэдэн мянган хувьсагчтай байж болно (ялангуяа массивтай ажиллах үед). Иймээс нэмэлт санах ойг хувьсагчид ашигладаг Хувилбар, төрлийн хувьсагчтай харьцуулахад Бүхэл тоо or нэг, их хэмжээгээр нэмж болно. Үүнээс гадна төрлийн хувьсагчтай үйлдлүүд Хувилбар бусад төрлийн хувьсагчдаас хамаагүй удаан ажиллана, нэмэлт мянган төрлийн хувьсагч Хувилбар тооцооллыг мэдэгдэхүйц удаашруулж болно.
- Хувьсагчийн нэрсийн үсгийн алдаанаас урьдчилан сэргийлэх. Хэрэв бүх хувьсагчийг зарласан бол VBA мэдэгдлийг − ашиглаж болно Сонголт нь тодорхой байна (бид дараа нь энэ тухай ярих болно) бүх зарлагдаагүй хувьсагчдыг тодорхойлохын тулд. Энэ нь хувьсагчийн нэрийг буруу бичсэний үр дүнд программ дахь алдааны харагдах байдлыг арилгадаг. Жишээлбэл, нэртэй хувьсагчийг ашиглах sVAT_Rate, та үсгийн алдаа гаргаж, энэ хувьсагчид утга оноож, "VATRate = 0,175" гэж бичнэ үү. Энэ нь одооноос эхлэн хувьсагч байх төлөвтэй байна sVAT_Rate 0,175 гэсэн утгыг агуулж байх ёстой, гэхдээ мэдээж байхгүй. Хэрэв ашигласан бүх хувьсагчдыг заавал зарлах горим идэвхжсэн бол VBA хөрвүүлэгч хувьсагчийг олохгүй тул алдааг шууд зааж өгнө. VATRrate зарласан хүмүүсийн дунд.
- Хувьсагчийн зарласан төрөлтэй тохирохгүй утгуудыг тодруулж байна. Хэрэв та тодорхой төрлийн хувьсагчийг зарлаж, түүнд өөр төрлийн өгөгдөл оноохыг оролдвол алдаа гарах бөгөөд үүнийг засаагүй орхивол програм эвдэрч болзошгүй. Эхлээд харахад энэ нь хувьсагчдыг зарлахгүй байх сайн шалтгаан мэт санагдаж болох ч үнэн хэрэгтээ хувьсагчийн аль нэг нь хүлээн авах ёстой байсан буруу өгөгдлийг хүлээн авсан нь илүү дээр юм! Үгүй бол, хэрэв програм үргэлжлүүлэн ажиллавал үр дүн нь буруу, гэнэтийн байж магадгүй бөгөөд алдааны шалтгааныг олоход илүү хэцүү байх болно. Мөн макро "амжилттай" гүйцэтгэх боломжтой. Үүний үр дүнд алдаа анзаарагдахгүй байх бөгөөд буруу өгөгдөлтэй ажил үргэлжлэх болно!
Үүнтэй холбоотойгоор буруу өгөгдлийн төрлийг илрүүлж, код дээрх ийм алдааг аль болох эрт засах нь зүйтэй юм. Эдгээр шалтгааны улмаас VBA макро бичихдээ бүх хувьсагчдыг зарлахыг зөвлөж байна.
Сонголт нь тодорхой байна
Оператор Сонголт нь тодорхой байна нь VBA кодонд хэрэглэгдэх бүх хувьсагчдыг зарлахад хүргэдэг ба эмхэтгэлийн явцад (кодын гүйцэтгэл эхлэхээс өмнө) зарлагдаагүй бүх хувьсагчдыг алдаа гэж тэмдэглэдэг. Энэ операторыг ашиглах нь тийм ч хэцүү биш - VBA файлын хамгийн дээд хэсэгт энэ мөрийг бичнэ үү.
Option Explicit
Хэрэв та үргэлж оруулахыг хүсвэл Сонголт нь тодорхой байна Үүсгэсэн шинэ VBA модул бүрийн дээд хэсэгт үүнийг автоматаар хийх боломжтой. Үүнийг хийхийн тулд та сонголтыг идэвхжүүлэх хэрэгтэй Хувьсагчийн мэдэгдэл шаардах VBA засварлагчийн тохиргоонд.
Үүнийг ингэж хийдэг:
- Visual Basic Editor цэснээс товшино уу арга хэрэгсэл > сонголтууд
- Гарч ирэх харилцах цонхонд табыг нээнэ үү Editor
- Хайрцгийг шалгана уу Хувьсагчийн мэдэгдэл шаардах болон дар OK
Идэвхжүүлсэн үед мөр Сонголт нь тодорхой байна үүсгэсэн шинэ модуль бүрийн эхэнд автоматаар оруулах болно.
Хувьсагч ба тогтмолуудын хамрах хүрээ
Зарлагдсан хувьсагч эсвэл тогтмол нь өөрийн гэсэн хязгаарлагдмал хүрээтэй, өөрөөр хэлбэл энэ хувьсагч байгаа програмын хязгаарлагдмал хэсэгтэй байдаг. Хамрах хүрээ нь хувьсагч эсвэл тогтмолыг хаана зарласнаас хамаарна. Жишээлбэл, хувьсагчийг ав sVAT_Rateфункцэд хэрэглэгддэг Нийт зардал. Дараах хүснэгтэд хувьсагчийн хамрах хүрээний хоёр сонголтыг авч үзнэ sVAT_Rateмодульд хоёр өөр байрлалд зарласан:
Сонголт Тодорхой бүдэг sVAT_Rate нэг функцээр Нийт_зардал() давхар ... Төгсгөлийн функц | Хэрэв хувьсагч sVAT_Rate модулийн хамгийн эхэнд зарласан бол энэ хувьсагчийн хамрах хүрээ нь бүхэл модуль байх болно (өөрөөр хэлбэл хувьсагч sVAT_Rate Энэ модулийн бүх процедурыг хүлээн зөвшөөрөх болно). Тиймээс хэрэв функцэд байгаа бол Нийт зардал хувьсагч sVAT_Rate -д тодорхой утга өгөгдвөл тухайн модуль доторх дараагийн функц нь хувьсагчийг ашиглана sVAT_Rate ижил утгатай. Гэсэн хэдий ч хэрэв өөр модульд байрлах зарим функц дуудагдсан бол түүний хувьд хувьсагч болно sVAT_Rate мэдэгдэхгүй болно. |
Сонголт тодорхой функц Total_Cost() Давхар бүдэг sVAT_Rate Single ... Төгсгөлийн функц | Хэрэв хувьсагч sVAT_Rate функцийн эхэнд зарласан Нийт зардал, дараа нь түүний хамрах хүрээ нь зөвхөн энэ функцээр хязгаарлагдах болно (өөрөөр хэлбэл функц дотор Нийт зардал, та хувьсагчийг ашиглаж болно sVAT_Rate, гэхдээ гадна биш). Ашиглах гэж оролдох үед sVAT_Rate өөр процедурт энэ хувьсагчийг функцээс гадуур зарлаагүй тул VBA хөрвүүлэгч алдааг мэдээлэх болно. Нийт зардал (операторыг ашигласан тохиолдолд). Сонголт нь тодорхой байна). |
Дээрх жишээнд хувьсагчийг модулийн түвшинд түлхүүр үгээр зарласан Хэмжээ. Гэсэн хэдий ч зарласан хувьсагчдыг бусад модулиудад ашиглах шаардлагатай байж магадгүй юм. Ийм тохиолдолд түлхүүр үгийн оронд хувьсагчийг зарлах Хэмжээ түлхүүр үг ашиглах ёстой Олон нийтийн.
Дашрамд хэлэхэд, түлхүүр үгийн оронд хувьсагчийг модулийн түвшинд зарлахын тулд Хэмжээ түлхүүр үг ашиглаж болно Хувийн, энэ нь энэ хувьсагч нь зөвхөн одоогийн модульд ашиглах зориулалттай болохыг харуулж байна.
Та мөн түлхүүр үгсийг ашиглан тогтмол тоонуудыг зарлаж болно. Олон нийтийн и Хувийн, гэхдээ түлхүүр үгийн оронд биш Өтгөн, түүнтэй хамт.
Дараах жишээнүүд нь түлхүүр үгсийн хэрэглээг харуулж байна Олон нийтийн и Хувийн хувьсагч ба тогтмолуудад хэрэглэнэ.
Сонголт Тодорхой нийтийн sVAT_Rate зэрэг нь дан нийтийн Const iMax_Count = 5000 ... | Энэ жишээнд түлхүүр үг Олон нийтийн хувьсагчийг зарлахад ашигладаг sVAT_Rate болон тогтмолууд iMax_Count. Ийм байдлаар зарласан элементүүдийн хамрах хүрээ нь одоогийн төсөл бүхэлдээ байх болно. Энэ нь sVAT_Rate и iMax_Count аль ч төслийн модульд ашиглах боломжтой. |
Сонголт Тодорхой Хувийн sVAT_Rate Ганц хувийн Const iMax_Count = 5000 ... | Энэ жишээнд хувьсагчийг зарлах sVAT_Rate болон тогтмолууд iMax_Count ашигласан түлхүүр үг Хувийн. Эдгээр элементүүдийн хамрах хүрээ нь одоогийн модуль юм. Энэ нь sVAT_Rate и iMax_Count одоогийн модулийн бүх процедурт ашиглах боломжтой боловч бусад модулийн процедурт боломжгүй болно. |