VBA дахь хувьсагч ба тогтмолууд

Бусад програмчлалын хэлний нэгэн адил VBA-д аливаа утгыг хадгалахын тулд хувьсагч болон тогтмолуудыг ашигладаг. Нэрнээс нь харахад хувьсагчид өөрчлөгдөж болох ба тогтмолууд нь тогтмол утгыг хадгалдаг.

Жишээлбэл, тогтмол Pi 3,14159265 утгыг хадгалдаг ... Програмыг гүйцэтгэх явцад "Pi" тоо өөрчлөгдөхгүй, гэхдээ ийм утгыг тогтмол гэж хадгалах нь илүү тохиромжтой хэвээр байна.

Үүний зэрэгцээ бид хувьсагчийг ашиглаж болно sVAT_Rate худалдан авсан барааны НӨАТ-ын хувь хэмжээг хадгалах. Хувьсах утга sVAT_Rate худалдан авсан бүтээгдэхүүнээс хамаарч өөр өөр байж болно.

Мэдээллийн төрөл

Бүх хувьсагч ба тогтмолууд нь тодорхой өгөгдлийн төрлийнх байна. Доорх хүснэгтэд VBA-д ашигласан өгөгдлийн төрлүүдийг тайлбар болон боломжит утгын хүрээний хамт жагсаав.

Мэдээллийн төрөл ХэмжээТодорхойлолтҮнэлэмжийн хүрээ
байт1 байт байнаЭерэг бүхэл тоо; ихэвчлэн хоёртын өгөгдөлд ашиглагддаг0 нь 255 нь
Boolean2 байт байнаҮнэн эсвэл худал байж болноҮнэн эсвэл худал
Бүхэл тоо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 нь үүнийг төрлийн хувьсагч гэж үзэх болно. Хувилбар. Гэсэн хэдий ч үүнийг хийхгүй байх хэд хэдэн шалтгаан бий:

  1. Санах ойн хэрэглээ ба тооцоолох хурд. Хэрэв та өгөгдлийн төрлийг харуулсан хувьсагчийг зарлаагүй бол анхдагчаар энэ нь төрөлд тохируулагдах болно. Хувилбар. Энэ төрлийн өгөгдлийн төрөл бусад өгөгдлийн төрлөөс илүү их санах ой ашигладаг. Хувьсагч бүрт хэдэн байт илүү сонсогдох нь тийм ч их сонсогдохгүй байж болох ч практик дээр программууд хэдэн мянган хувьсагчтай байж болно (ялангуяа массивтай ажиллах үед). Иймээс нэмэлт санах ойг хувьсагчид ашигладаг Хувилбар, төрлийн хувьсагчтай харьцуулахад Бүхэл тоо or нэг, их хэмжээгээр нэмж болно. Үүнээс гадна төрлийн хувьсагчтай үйлдлүүд Хувилбар бусад төрлийн хувьсагчдаас хамаагүй удаан ажиллана, нэмэлт мянган төрлийн хувьсагч Хувилбар тооцооллыг мэдэгдэхүйц удаашруулж болно.
  2. Хувьсагчийн нэрсийн үсгийн алдаанаас урьдчилан сэргийлэх. Хэрэв бүх хувьсагчийг зарласан бол VBA мэдэгдлийг − ашиглаж болно Сонголт нь тодорхой байна (бид дараа нь энэ тухай ярих болно) бүх зарлагдаагүй хувьсагчдыг тодорхойлохын тулд. Энэ нь хувьсагчийн нэрийг буруу бичсэний үр дүнд программ дахь алдааны харагдах байдлыг арилгадаг. Жишээлбэл, нэртэй хувьсагчийг ашиглах sVAT_Rate, та үсгийн алдаа гаргаж, энэ хувьсагчид утга оноож, "VATRate = 0,175" гэж бичнэ үү. Энэ нь одооноос эхлэн хувьсагч байх төлөвтэй байна sVAT_Rate 0,175 гэсэн утгыг агуулж байх ёстой, гэхдээ мэдээж байхгүй. Хэрэв ашигласан бүх хувьсагчдыг заавал зарлах горим идэвхжсэн бол VBA хөрвүүлэгч хувьсагчийг олохгүй тул алдааг шууд зааж өгнө. VATRrate зарласан хүмүүсийн дунд.
  3. Хувьсагчийн зарласан төрөлтэй тохирохгүй утгуудыг тодруулж байна. Хэрэв та тодорхой төрлийн хувьсагчийг зарлаж, түүнд өөр төрлийн өгөгдөл оноохыг оролдвол алдаа гарах бөгөөд үүнийг засаагүй орхивол програм эвдэрч болзошгүй. Эхлээд харахад энэ нь хувьсагчдыг зарлахгүй байх сайн шалтгаан мэт санагдаж болох ч үнэн хэрэгтээ хувьсагчийн аль нэг нь хүлээн авах ёстой байсан буруу өгөгдлийг хүлээн авсан нь илүү дээр юм! Үгүй бол, хэрэв програм үргэлжлүүлэн ажиллавал үр дүн нь буруу, гэнэтийн байж магадгүй бөгөөд алдааны шалтгааныг олоход илүү хэцүү байх болно. Мөн макро "амжилттай" гүйцэтгэх боломжтой. Үүний үр дүнд алдаа анзаарагдахгүй байх бөгөөд буруу өгөгдөлтэй ажил үргэлжлэх болно!

Үүнтэй холбоотойгоор буруу өгөгдлийн төрлийг илрүүлж, код дээрх ийм алдааг аль болох эрт засах нь зүйтэй юм. Эдгээр шалтгааны улмаас 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 одоогийн модулийн бүх процедурт ашиглах боломжтой боловч бусад модулийн процедурт боломжгүй болно.

хариу үлдээх