VBA дахь "Функц" ба "Дэд" процедурууд

Суурилуулсан VBA функцууд

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

Эдгээр функцуудын жагсаалтыг VBA засварлагчаас харж болно:

  • Excel ажлын номыг нээж, VBA засварлагчийг ажиллуулна уу (үүнийг хийхийн тулд товшино уу Alt + F11), дараа нь дарна уу F2.
  • Дэлгэцийн зүүн дээд талд байрлах унадаг жагсаалтаас номын санг сонгоно уу VBA.
  • Суурилуулсан VBA анги, функцуудын жагсаалт гарч ирнэ. Цонхны доод хэсэгт функцийн нэр дээр дарж товч тайлбарыг харуулна. дарах F1 Энэ функцийн онлайн тусламжийн хуудсыг нээх болно.

Нэмж дурдахад, жишээнүүдийн хамт суурилуулсан VBA функцуудын бүрэн жагсаалтыг Visual Basic Хөгжүүлэгчийн Төвөөс олж болно.

VBA дахь "Функц" ба "Дэд" захиалгат горимууд

Excel Visual Basic программд тодорхой даалгаврыг гүйцэтгэдэг командуудын багцыг процедурт байрлуулдаг. Чиг үүрэг (Функц) эсвэл дэд (Дэд програм). Процедурын гол ялгаа Чиг үүрэг и дэд ийм л журам юм Чиг үүрэг үр дүн, процедурыг буцаана дэд - үгүй.

Тиймээс, хэрэв та ямар нэгэн үйлдэл хийж, үр дүнд хүрэх шаардлагатай бол (жишээлбэл, хэд хэдэн тоог нэгтгэх) процедурыг ихэвчлэн ашигладаг. Чиг үүрэг, мөн зарим үйлдлийг гүйцэтгэхийн тулд (жишээлбэл, бүлгийн нүдний форматыг өөрчлөх) процедурыг сонгох хэрэгтэй. дэд.

Аргументууд

Аргументуудыг ашиглан янз бүрийн өгөгдлийг VBA процедурт дамжуулж болно. Процедурыг зарлахдаа аргументуудын жагсаалтыг зааж өгдөг. Жишээлбэл, журам дэд VBA-д сонгосон муж дахь нүд бүрт өгөгдсөн бүхэл тоог (бүхэл тоо) нэмнэ. Та энэ дугаарыг аргумент ашиглан процедурт дамжуулж болно, жишээ нь:

Sub AddToCells(i As Integer) ... Төгсгөлийн дэд

Процедурын талаар маргаантай байдаг гэдгийг санаарай Чиг үүрэг и дэд VBA-д сонголт хийх боломжтой. Зарим процедур нь аргумент шаарддаггүй.

Нэмэлт аргументууд

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

Өмнөх жишээ рүү буцвал функцэд бүхэл тооны аргументыг нэмэлт болгохын тулд үүнийг дараах байдлаар зарлана.

Дэд AddToCells(Заавал биш i Бүхэл тоо = 0)

Энэ тохиолдолд бүхэл аргумент i анхдагч нь 0 байх болно.

Процедурт хэд хэдэн нэмэлт аргумент байж болох бөгөөд бүгдийг аргументуудын жагсаалтын төгсгөлд жагсаасан болно.

Аргументуудыг үнэ цэнэ болон лавлагаагаар дамжуулах

VBA дахь аргументуудыг процедурт хоёр аргаар дамжуулж болно:

  • ByVal – аргументыг үнэ цэнээр дамжуулах. Энэ нь процедурт зөвхөн утгыг (өөрөөр хэлбэл аргументийн хуулбар) дамжуулдаг тул процедурын доторх аргументад хийсэн өөрчлөлтүүд процедураас гарах үед алга болно гэсэн үг юм.
  • Ref – аргументыг ишлэлээр дамжуулах. Өөрөөр хэлбэл санах ой дахь аргументын байршлын бодит хаягийг процедурт дамжуулдаг. Процедурын доторх аргументад хийсэн өөрчлөлтүүд процедураас гарах үед хадгалагдах болно.

Түлхүүр үг ашиглах ByVal or Ref процедурын мэдэгдэлд аргументыг процедурт хэрхэн дамжуулахыг зааж өгч болно. Үүнийг доорх жишээнүүдэд харуулав.

Sub AddToCells(ByVal i As Integer) ... Төгсгөлийн дэд
Энэ тохиолдолд бүхэл аргумент i үнэ цэнээр дамжсан. Процедурыг орхисны дараа дэд бүгдийг нь хийсэн i өөрчлөлтүүд алга болно.
Sub AddToCells(ByRef i As Integer) ... Төгсгөлийн дэд
Энэ тохиолдолд бүхэл аргумент i лавлагаагаар дамжуулсан. Процедурыг орхисны дараа дэд бүгдийг нь хийсэн i өөрчлөлтүүд процедурт дамжуулагдсан хувьсагчид хадгалагдах болно дэд.

VBA дахь аргументууд нь анхдагчаар лавлагаагаар дамждаг гэдгийг санаарай. Өөрөөр хэлбэл, түлхүүр үг ашиглаагүй бол ByVal or Ref, дараа нь аргументыг лавлагаагаар дамжуулна.

Процедурыг үргэлжлүүлэхийн өмнө Чиг үүрэг и дэд Илүү дэлгэрэнгүй, эдгээр хоёр төрлийн процедурын онцлог, ялгааг дахин авч үзэх нь ашигтай байх болно. Дараах нь VBA процедурын талаар товч яриа юм Чиг үүрэг и дэд мөн энгийн жишээг үзүүлэв.

VBA процедур "Функц"

VBA засварлагч процедурыг таньдаг Чиг үүрэгДараах нээх, хаах мэдэгдлүүдийн хооронд хавсаргасан бүлэг тушаалуудтай тулгарах үед:

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

Өмнө дурьдсанчлан, журам Чиг үүрэг VBA дээр (эсрэгээр нь дэд) утгыг буцаана. Утга буцаахад дараах дүрмийг баримтална.

  • Буцаах утгын өгөгдлийн төрлийг процедурын толгой хэсэгт зарласан байх ёстой Чиг үүрэг.
  • Буцах утгыг агуулсан хувьсагч нь процедуртай ижил нэртэй байх ёстой Чиг үүрэг. Процедурын салшгүй хэсэг нь үргэлж байдаг тул энэ хувьсагчийг тусад нь зарлах шаардлагагүй. Чиг үүрэг.

Үүнийг дараах жишээнд маш сайн харуулсан.

VBA функцийн жишээ: 3 тоон дээр математик үйлдлийг гүйцэтгэх

Дараах нь VBA процедурын кодын жишээ юм Чиг үүрэг, энэ нь гурван төрлийн аргументыг авдаг Давхар (давхар нарийвчлалтай хөвөгч цэгийн тоо). Үүний үр дүнд процедур нь өөр тооны төрлийг буцаана Давхарэхний хоёр аргументын нийлбэрээс гурав дахь аргументыг хассантай тэнцүү:

Функцийн нийлбэр хасах(dNum1 давхар, dNum2 давхар, dNum3 давхар) Давхар нийлбэр Хасах = dNum1 + dNum2 - dNum3 Төгсгөлийн функц

Энэ нь маш энгийн VBA процедур юм Чиг үүрэг аргументуудаар дамжуулан процедурт өгөгдөл хэрхэн дамждагийг харуулсан. Процедурын буцаасан өгөгдлийн төрлийг дараах байдлаар тодорхойлж байгааг харж болно Давхар (үг хэлж байна Давхар байдлаар аргументуудын жагсаалтын дараа). Энэ жишээ нь процедурын үр дүн хэрхэн гарч байгааг харуулж байна Чиг үүрэг процедурын нэртэй ижил нэртэй хувьсагчид хадгалагдана.

VBA процедурыг "Функц" гэж нэрлэх

Хэрэв дээрх энгийн процедур Чиг үүрэг Visual Basic засварлагчийн модульд оруулсан бөгөөд үүнийг бусад VBA процедураас дуудаж эсвэл Excel-ийн ажлын дэвтэрт ажлын хуудсан дээр ашиглаж болно.

VBA процедурыг өөр процедураас "Функц" гэж дууд

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

Дэд үндсэн() Бүдэг нийлбэр Давхар нийт = НийлбэрХасах(5, 4, 3) Төгсгөлийн Дэд

Ажлын хуудаснаас VBA процедурыг "Функц" гэж дуудна уу

VBA процедур Чиг үүрэг Excel-ийн ажлын хуудаснаас бусад суулгасан Excel функцтэй ижил аргаар дуудаж болно. Тиймээс өмнөх жишээнд үүсгэсэн процедур Чиг үүрэг - Сумминус Ажлын хуудасны нүдэнд дараах илэрхийллийг оруулах замаар дуудаж болно.

=SumMinus(10, 5, 2)

VBA процедур "Дэд"

VBA засварлагч өмнө нь процедур байгааг ойлгож байна дэдДараах нээх, хаах мэдэгдлүүдийн хооронд хавсаргасан бүлэг тушаалуудтай тулгарах үед:

Дэд ... Төгсгөлийн дэд

VBA процедур "Дэд": Жишээ 1. Сонгосон хүрээний нүднүүдийн төвд зэрэгцүүлэх, үсгийн хэмжээг өөрчлөх

Энгийн VBA процедурын жишээг авч үзье дэд, түүний даалгавар нь сонгосон хүрээний нүднүүдийн форматыг өөрчлөх явдал юм. Нүднүүд нь төвлөрсөн (босоо болон хэвтээ аль аль нь) бөгөөд үсгийн хэмжээг хэрэглэгчийн тодорхойлсон болгон өөрчилсөн:

Дэд форматтай_төвтэй_ба_хэмжээтэй(заавал биш iFontSize бүхэл тоо = 10) Сонголт.HorizontalAlignment = xlCenter Сонголт.VerticalAlignment = xlCenter Сонголт.Font.Size = iFontSize Төгсгөлийн дэд

Энэ процедур дэд үйлдэл хийдэг боловч үр дүнг буцаадаггүй.

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

VBA дэд процедур: Жишээ 2: Сонгосон нүднүүдийн хүрээнд төвд зэрэгцүүлэх ба тод үсгийн фонт

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

Дэд Format_Centered_And_Bold() Сонголт.HorizontalAlignment = xlCenter Сонголт.VerticalAlignment = xlCenter Сонголт.Font.Bold = Үнэн төгсгөл дэд

Excel VBA дахь "Дэд" процедурыг дуудах

VBA процедурыг өөр процедураас "Sub" гэж дуудна уу

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

Дэд үндсэн() Дуудлага Формат_төвтэй_ба_Хэмжээтэй (20) Төгсгөлийн дэд

Хэрэв процедур Формат_төвтэй_ба_хэмжээтэй нэгээс олон аргументтай бол тэдгээрийг таслалаар тусгаарлах ёстой. Үүн шиг:

Дэд үндсэн() Дуудлагын формат_төвтэй_ба_хэмжээтэй(arg1, arg2, ...) Төгсгөлийн дэд

Ажлын хуудаснаас VBA процедурыг "Дэд" гэж дуудна уу

журам дэд Процедурын тусламжтайгаар Excel хуудасны нүдэнд шууд оруулах боломжгүй Чиг үүрэгУчир нь журам дэд утгыг буцаадаггүй. Гэсэн хэдий ч журам дэд, ямар ч аргументгүй бөгөөд гэж зарласан Олон нийтийн (доор үзүүлсэн шиг) нь ажлын хуудасны хэрэглэгчдэд нээлттэй байх болно. Тиймээс, хэрэв дээр дурдсан энгийн журам дэд Visual Basic Editor дахь модуль руу оруулсан процедур Формат_төвт_болон_болд Excel-ийн ажлын хуудас болон процедурт ашиглах боломжтой болно Формат_төвтэй_ба_хэмжээтэй – аргументтай учир боломжгүй болно.

Процедурыг ажиллуулах (эсвэл гүйцэтгэх) хялбар арга энд байна дэд, ажлын хуудаснаас хандах боломжтой:

  • Press Alt + F8 (товчлуурыг дар Alt мөн дарж байгаад товчлуурыг дар F8).
  • Гарч ирэх макросын жагсаалтаас ажиллуулахыг хүссэнээ сонгоно уу.
  • Press Run (гүйх)

Процедурыг гүйцэтгэхийн тулд дэд хурдан бөгөөд хялбар, та түүнд гарын товчлолыг оноож болно. Үүний тулд:

  • Press Alt + F8.
  • Гарч ирэх макросын жагсаалтаас гарны товчлолыг оноохыг хүсч буйгаа сонгоно уу.
  • Press Үзүүлэлтүүд (Сонголтууд) болон гарч ирэх харилцах цонхонд гарын товчлолыг оруулна уу.
  • Press OK мөн харилцах цонхыг хаа Макро (Макро).

Анхаар: Макрод гарын товчлол өгөхдөө үүнийг Excel-д стандарт болгон ашиглахгүй байгаа эсэхийг шалгаарай (жишээлбэл, Ctrl + C). Хэрэв та аль хэдийн байгаа гарын товчлолыг сонговол макро руу дахин хуваарилагдах бөгөөд үүний үр дүнд хэрэглэгч санамсаргүйгээр макро эхлүүлж болзошгүй.

VBA процедурын хамрах хүрээ

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

Public Sub AddToCells(i As Integer) ... Төгсгөлийн дэд
Хэрэв процедурын мэдэгдлийн өмнө түлхүүр үг байгаа бол Олон нийтийн, дараа нь уг процедур нь тухайн VBA төслийн бүх модулиудад боломжтой болно.
Private Sub AddToCells(i As Integer) ... Төгсгөлийн дэд
Хэрэв процедурын мэдэгдлийн өмнө түлхүүр үг байгаа бол Хувийн, дараа нь энэ процедурыг зөвхөн одоогийн модульд ашиглах боломжтой болно. Үүнийг өөр ямар ч модуль эсвэл Excel-ийн ажлын номноос дуудаж болохгүй.

VBA процедурыг зарлахаас өмнө гэдгийг санаарай Чиг үүрэг or дэд Түлхүүр үг оруулаагүй, анхдагч шинж чанарыг процедурт тохируулсан Олон нийтийн (өөрөөр хэлбэл энэ VBA төслийн хаа сайгүй байх болно). Энэ нь анхдагчаар байдаг хувьсагчийн мэдэгдлээс ялгаатай юм Хувийн.

"Функц" ба "Дэд" VBA процедураас эрт гарах

Хэрэв та VBA процедурын гүйцэтгэлийг зогсоох шаардлагатай бол Чиг үүрэг or дэд, түүний байгалийн төгсгөлийг хүлээхгүйгээр, үүний тулд операторууд байдаг Гарах функц и Дэд хэсгээс гарах. Эдгээр операторуудын хэрэглээг жишээ болгон энгийн процедурыг ашиглан доор харуулав. Чиг үүрэгЦаашдын үйлдлийг гүйцэтгэхийн тулд эерэг аргумент хүлээн авна гэж найдаж буй A. Хэрэв эерэг бус утгыг процедурт шилжүүлбэл, дараа нь ямар ч үйлдэл хийх боломжгүй тул хэрэглэгчдэд алдааны мэдэгдэл гарч, процедурыг нэн даруй орхих ёстой.

Функц VAT_Amount(sVAT_Rate as Single) VAT_Amount = 0 бол sVAT_Rate <= 0 Дараа нь MsgBox "sVAT_Rate-ийн эерэг утгыг хүлээж байсан боловч хүлээн авсан" & sVAT_Rate Функц дуусах бол ... Төгсгөл Функц.

Процедурыг дуусгахын өмнө үүнийг анхаарна уу Чиг үүрэг - НӨАТ_Дүн, VBA функцийг кодонд оруулсан болно MsgBox, энэ нь хэрэглэгчдэд анхааруулах цонхыг харуулдаг.

хариу үлдээх