Excel макрос дахь хувьсагч ба тогтмолуудын тухай ойлголт

Энэ нийтлэлээс та макрод тогтмол болон хувьсагч гэж юу болох, тэдгээрийг хаана ашиглаж болох, янз бүрийн өгөгдлийн төрлүүдийн гол ялгаа нь юу болохыг олж мэдэх болно. Хэрэв та зүгээр л нэг хувьсагч бичээд түүнийгээ хэзээ ч өөрчлөхгүй бол тогтмол яагаад хэрэгтэй болох нь бас илчлэгдэх болно.

Бусад програмчлалын хэлнүүдийн нэгэн адил өгөгдлийг хувьсагч эсвэл тогтмол (хоёуланг нь мэдээллийн сав гэж нэрлэдэг) хэлбэрээр хадгалах боломжтой. Энэ бол эдгээр ойлголтуудын гол ялгаа юм. Эхнийх нь хөтөлбөрт юу болж байгаагаас хамаарч өөрчлөгдөж болно. Хариуд нь тогтмолуудыг нэг удаа тогтоодог бөгөөд утгыг нь өөрчилдөггүй.

Хэрэв та ижил том утгыг олон удаа ашиглах шаардлагатай бол тогтмолууд ашигтай байж болно. Тоог хуулахын оронд тогтмолын нэрийг бичиж болно. Жишээлбэл, та тогтмол "Pi"-г ашиглан Pi-г хадгалах боломжтой бөгөөд энэ нь тогтмол утга юм. Энэ нь маш том бөгөөд үүнийг бичих, хайж олох, хуулах бүрт нэлээд хэцүү байдаг. Тиймээс хоёр тэмдэгт бичихэд хангалттай бөгөөд орчин нь хүссэн тоог автоматаар ашигладаг.

Excel-ийн хэрэглэгч хувьсагчдаа хадгалсан утгыг үе үе өөрчлөх шаардлагатай бол тэдгээрийг зарлах шаардлагатай. Жишээлбэл, та sVAT_Rate хэмээх хувьсагчийг тохируулж болох бөгөөд энэ нь тухайн бүтээгдэхүүний НӨАТ-ын хэмжээг хадгалах болно. Хэрэв энэ нь өөрчлөгдвөл та хурдан засах боломжтой. Энэ нь ялангуяа АНУ-д бизнес эрхэлдэг хүмүүст ашигтай бөгөөд зарим бараа нь НӨАТ-д огт хамрагддаггүй (мөн энэ татвар нь муж бүр өөр өөр байдаг).

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

Өгөгдлийн контейнер бүр хэд хэдэн төрлийн нэг байж болно. Боловсруулсан мэдээллийн стандарт төрлийг тодорхойлсон хүснэгт энд байна. Тэдгээрийн олон нь байдаг бөгөөд эхэндээ тэд бие биенээ давтдаг мэт санагдаж магадгүй юм. Гэхдээ энэ бол хуурмаг мэдрэмж юм. Зөв өгөгдлийн төрлийг зааж өгөх нь яагаад маш чухал болохыг олж мэдэхийн тулд уншина уу.

Цөөн тооны хувьд санах ойд илүү зай эзэлдэг өгөгдлийн төрлийг ашиглахыг зөвлөдөггүй. Жишээлбэл, 1-ийн тооны хувьд байт төрлийг ашиглахад хангалттай. Энэ нь гүйцэтгэх модулийн гүйцэтгэлд, ялангуяа сул компьютерт эерэг нөлөө үзүүлэх болно. Гэхдээ энд хэт хол явахгүй байх нь чухал. Хэрэв та хэт авсаархан өгөгдлийн төрлийг ашигладаг бол хэт том утга түүнд тохирохгүй байж болно.

Тогтмол ба хувьсагчийг зарлах

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

Хувьсагчийг зарлахдаа Dim хэллэгийг ашиглана. Жишээлбэл, иймэрхүү:

Хувьсагчийн_нэрийг бүхэл тоогоор бүдгэрүүлнэ

Variable_Name нь хувьсагчийн нэр юм. Дараа нь өгөгдлийн төрлийг харуулсан As операторыг бичнэ. “Хувьсагчийн_Нэр” ба “Бүтэн тоо” мөрүүдийн оронд та өөрийн нэр, өгөгдлийн төрлийг оруулж болно.

Тогтмолыг мөн зарлаж болно, гэхдээ та эхлээд утгыг нь зааж өгөх ёстой. Сонголтуудын нэг нь:

Const iMaxCount = 5000

Үнэнийг хэлэхэд, зарим тохиолдолд та хувьсагчийг зарлахгүйгээр хийж болно, гэхдээ энэ тохиолдолд тэдгээрийг автоматаар Variant төрлөөр хуваарилах болно. Гэсэн хэдий ч дараахь шалтгааны улмаас үүнийг хийхийг зөвлөдөггүй.

  1. Хувилбарыг илүү удаан боловсруулдаг бөгөөд хэрэв ийм олон хувьсагч байгаа бол мэдээллийн боловсруулалтыг сул компьютер дээр мэдэгдэхүйц удаашруулж болно. Тэр секундууд шийдэх юм шиг байна? Гэхдээ хэрэв та олон тооны мөр код бичиж, дараа нь үүнийг сул компьютер дээр ажиллуулах шаардлагатай бол (орчин үеийн оффисын иж бүрдэлүүд маш их хэмжээний RAM шаарддаг тул зарагдсан хэвээр байгаа) та ажлыг бүрэн зогсоож чадна. Макро буруу бичсэн нь бага хэмжээний RAM-тай, нарийн төвөгтэй ажлуудыг гүйцэтгэхэд зориулагдаагүй ухаалаг номнуудыг царцаахад хүргэсэн тохиолдол байдаг. 
  2. Нэрийн алдаа гаргахыг зөвшөөрдөг бөгөөд хэрэв олдвол зарлаагүй хувьсагчийг олох боломжийг олгодог Option Explicit мэдэгдлийг ашиглан урьдчилан сэргийлэх боломжтой. Өчүүхэн үсгийн алдаа орчуулагч хувьсагчийг таних боломжгүй болгодог тул энэ нь алдааг илрүүлэх хялбар арга юм. Хэрэв та хувьсагчийг зарлах горимыг асаавал модулийн эхэнд мэдэгдээгүй өгөгдлийн контейнер олдвол орчуулагч танд макро ажиллуулахыг зөвшөөрөхгүй.
  3. Өгөгдлийн төрөлд тохирохгүй хувьсагчийн утгаас үүдэлтэй алдаанаас зайлсхий. Ер нь бүхэл тоон хувьсагчдад текстийн утга оноох нь алдаа гаргадаг. Тиймээ, нэг талаас ерөнхий төрлийг мэдэгдэлгүйгээр хуваарилдаг боловч хэрэв тэдгээрийг урьдчилан зарласан бол санамсаргүй алдаанаас зайлсхийх боломжтой.

Тиймээс, бүх зүйлийг үл харгалзан Excel-ийн макронд бүх хувьсагчдыг зарлахыг зөвлөж байна.

Хувьсагчийг зарлахдаа бас нэг зүйлийг анхаарах хэрэгтэй. Хувьсагчийг зарлахдаа түүнд ямар ч утга өгөхгүй байх боломжтой боловч энэ тохиолдолд анхдагч утгыг олж авдаг. Жишээлбэл:

  1. Мөрүүдийг хоосон болгосон.
  2. Тоонууд 0 утгыг авна.
  3. Boolean төрлийн хувьсагчдыг эхлээд худал гэж үздэг.
  4. Анхдагч огноо нь 30 оны 1899-р сарын XNUMX.

Жишээлбэл, хэрэв та өмнө нь ямар ч утга заагаагүй бол бүхэл тоон хувьсагчид 0 утгыг оноох шаардлагагүй. Тэр энэ дугаарыг аль хэдийн агуулж байна.

Сонголт тодорхой мэдэгдэл

Энэ мэдэгдэл нь VBA кодонд ашиглагдаж буй бүх хувьсагчдыг зарлах, кодыг ажиллуулахаас өмнө зарлаагүй контейнер байгаа эсэхийг тодорхойлох боломжийг танд олгоно. Энэ функцийг ашиглахын тулд макро кодын хамгийн дээд хэсэгт Option Explicit кодын мөр бичихэд л хангалттай.

Хэрэв та энэ мэдэгдлийг коддоо байнга оруулах шаардлагатай бол VBA засварлагчийн тусгай тохиргоог ашиглан хийж болно. Энэ сонголтыг идэвхжүүлэхийн тулд та:

  1. Зам дагуух хөгжүүлэлтийн орчин руу очно уу – Tools > Options.
  2. Үүний дараа нээгдэх цонхонд Editor табыг нээнэ үү.
  3. Эцэст нь "Хувьсагчийн мэдэгдэл шаардах" зүйлийн хажууд байгаа нүдийг шалгана уу.

Эдгээр алхмуудыг хийж дууссаны дараа "OK" товчийг дарна уу. 

Ингээд л шинэ макро бичихдээ энэ мөр автоматаар кодын дээд талд орох болно.

Тогтмол ба хувьсагчийн хамрах хүрээ

Хувьсагч эсвэл тогтмол нь зөвхөн хязгаарлагдмал хүрээтэй байдаг. Энэ нь хаана зарлахаас хамаарна.

Бидэнд функц байна гэж бодъё Нийт зардал(), мөн хувьсагчийг ашигладаг sVAT_Rate. Модуль дахь байрлалаас хамааран өөр өөр хамрах хүрээтэй байна:

Сонголт нь тодорхой байна

sVAT_Rate-г дангаар нь бууруулна

Total_Cost() функцийг давхар

.

.

.

Төгсгөлийн функц

Хэрэв хувьсагчийг модулийн дээд талд зарласан бол энэ нь тухайн модулийн туршид тархдаг. Энэ нь бүх процедурыг уншиж болно гэсэн үг юм.

Түүнчлэн, хэрэв процедурын аль нэг нь хувьсагчийн утгыг өөрчилсөн бол дараагийнх нь энэ зассан утгыг унших болно. Гэхдээ бусад модулиудад энэ хувьсагчийг уншихгүй хэвээр байх болно.

Сонголт нь тодорхой байна

Total_Cost() функцийг давхар

sVAT_Rate-г дангаар нь бууруулна

   .

   .

   .

Төгсгөлийн функц

Энэ тохиолдолд хувьсагчийг процедур дотор зарлах бөгөөд хэрэв өөр процедурт ашиглавал орчуулагч алдаа гаргадаг.

Хэрэв та хувьсагчийг бусад модулиудаар уншихыг хүсвэл Dim түлхүүр үгийн оронд Public түлхүүр үгийг ашиглах ёстой. Үүний нэгэн адил та Dim гэдэг үгийн оронд бичсэн Public мэдэгдлийг ашиглан хувьсагчийн хамрах хүрээг зөвхөн одоогийн модульд хязгаарлаж болно.

Тогтмолуудын хамрах хүрээг үүнтэй адил тохируулж болох боловч энд түлхүүр үгийг Const оператортой хамт бичнэ.

Тогтмол болон хувьсагчтай хэрхэн ажилладаг талаар сайн жишээ бүхий хүснэгтийг энд үзүүлэв.

Сонголт нь тодорхой байна

Нийтийн sVAT_Rate ганцаарчилсан

Нийтийн Const iMax_Count = 5000

Энэ жишээн дээр та хувьсагчийг зарлахад Public түлхүүр үг хэрхэн ашиглагддаг, мөн нийтийн тогтмолыг зарлахад Visual Basic засварлагч дээр юу бичих хэрэгтэйг харж болно. Эдгээр утгын савны хамрах хүрээ нь бүх модулиудад хамаарна.
Сонголт нь тодорхой байна

Хувийн sVAT_Rate Single

Хувийн Const iMax_Count = 5000

Энд хувьсагч болон тогтмолуудыг Private түлхүүр үг ашиглан зарлана. Энэ нь тэдгээрийг зөвхөн одоогийн модуль дотор харах боломжтой бөгөөд бусад модулиудын процедурууд тэдгээрийг ашиглах боломжгүй гэсэн үг юм.

Тогтмол болон хувьсагч яагаад хэрэгтэй вэ?

Тогтмол болон хувьсагчийг ашиглах нь кодын ойлгомжтой байдлыг нэмэгдүүлэх боломжийг олгодог. Хэрэв эхлэгчдэд хувьсагч яагаад хэрэгтэй вэ гэсэн асуулт байхгүй бол тогтмол тоонуудын хэрэгцээтэй холбоотой олон эргэлзээтэй зүйл байдаг. Энэ асуулт нь эхлээд харахад нэлээд логик юм шиг санагдаж байна. Эцсийн эцэст та хувьсагчийг нэг удаа зарлаж, дахин хэзээ ч өөрчлөхгүй.

Хариулт нь санах ойд том зай эзэлдэг өгөгдлийн төрлүүдийг ашиглахтай ижил хавтгайд хаа нэгтээ байх болно. Хэрэв бид асар олон тооны хувьсагчтай харьцаж байгаа бол одоо байгаа савыг санамсаргүйгээр өөрчилж болно. Хэрэв хэрэглэгч тодорхой утга хэзээ ч өөрчлөгдөхгүй гэж заасан бол орчин үүнийг автоматаар хянах болно.

Макрог хэд хэдэн программист бичсэн тохиолдолд энэ нь ялангуяа чухал юм. Зарим хувьсагч өөрчлөгдөх ёсгүй гэдгийг хэн нэгэн мэдэж болно. Нөгөөх нь тийм биш. Хэрэв та Const операторыг зааж өгвөл өөр хөгжүүлэгч энэ утга өөрчлөгдөхгүй гэдгийг мэдэх болно.

Эсвэл нэг нэртэй тогтмол байдаг бөгөөд хувьсагч нь өөр боловч ижил нэртэй байвал. Хөгжүүлэгч нь тэднийг зүгээр л төөрөлдүүлж чадна. Жишээ нь өөрчлөх шаардлагагүй нэг хувьсагчийг Variable11, засварлаж болох өөр нэг хувьсагчийг Variable1 гэж нэрлэдэг. Хүн автоматаар код бичихдээ нэмэлт нэгжийг санамсаргүйгээр алгасаж, анзаарахгүй байх боломжтой. Үүний үр дүнд утгын сав өөрчлөгдөх бөгөөд үүнд хүрч болохгүй.

Эсвэл хөгжүүлэгч өөрөө аль хувьсагчдад хүрч, аль нь хүрч чадахгүйгээ мартаж магадгүй юм. Энэ нь кодыг хэдэн долоо хоногийн турш бичиж, хэмжээ нь том болоход ихэвчлэн тохиолддог. Энэ хугацаанд энэ эсвэл тэр хувьсагч ямар утгатай болохыг мартах нь маш амархан байдаг.

Тийм ээ, та энэ нөхцөлд тайлбар хийж болно, гэхдээ Const гэдэг үгийг зааж өгөх нь илүү хялбар биш гэж үү?

Дүгнэлт

Хувьсагчид нь тооцоолол хийхээс эхлээд тодорхой үйл явдлын талаар хэрэглэгчдэд мэдээлэх эсвэл хүснэгтийн нүдэнд тодорхой утгыг зааж өгөх хүртэл нарийн төвөгтэй үйлдлүүдийг хийх боломжийг олгодог макро програмчлалын чухал бүрэлдэхүүн хэсэг юм.

Хөгжүүлэгч эдгээр савны агуулга ирээдүйд өөрчлөгдөхгүй гэдгийг баттай мэдэж байгаа бол тогтмолуудыг ашиглах хэрэгтэй. Санамсаргүй алдаа гаргах магадлалтай тул оронд нь хувьсагч хэрэглэхгүй байхыг зөвлөж байна.

хариу үлдээх