VBA-da "Funktsiya" va "Sub" protseduralari

O'rnatilgan VBA funktsiyalari

O'zingizning VBA funktsiyalaringizni yaratishni boshlashdan oldin, Excel VBA-da kod yozishda foydalanishingiz mumkin bo'lgan oldindan o'rnatilgan o'rnatilgan funktsiyalarning boy to'plami borligini bilish yaxshidir.

Ushbu funktsiyalar ro'yxatini VBA muharririda ko'rish mumkin:

  • Excel ish kitobini oching va VBA muharririni ishga tushiring (buni amalga oshirish uchun bosing Alt + F11) tugmachasini bosing va keyin tugmasini bosing F2.
  • Ekranning yuqori chap qismidagi ochiladigan ro'yxatdan kutubxonani tanlang VBA.
  • O'rnatilgan VBA sinflari va funktsiyalari ro'yxati paydo bo'ladi. Oynaning pastki qismida uning qisqacha tavsifini ko'rsatish uchun funksiya nomini bosing. bosish F1 ushbu xususiyat uchun onlayn yordam sahifasini ochadi.

Bundan tashqari, misollar bilan o'rnatilgan VBA funktsiyalarining to'liq ro'yxatini Visual Basic Developer Center-da topish mumkin.

VBA-da "Funktsiya" va "Sub" maxsus protseduralari

Excel Visual Basic dasturida ma'lum bir vazifani bajaradigan buyruqlar to'plami protseduraga joylashtirilgan. vazifa (funktsiya) yoki sub (Ichki dastur). Jarayonlar orasidagi asosiy farq vazifa и sub protsedura shu vazifa natijani, protsedurani qaytaradi sub - yo'q.

Shuning uchun, agar siz harakatlarni bajarishingiz va biron bir natija olishingiz kerak bo'lsa (masalan, bir nechta raqamlarni yig'ing), unda protsedura odatda qo'llaniladi. vazifa, va oddiygina ba'zi amallarni bajarish uchun (masalan, hujayralar guruhining formatini o'zgartirish) protsedurani tanlashingiz kerak. sub.

Dalillar

Argumentlar yordamida VBA protseduralariga turli ma'lumotlar uzatilishi mumkin. Argumentlar ro'yxati protsedurani e'lon qilishda ko'rsatiladi. Masalan, protsedura sub VBA da tanlangan diapazondagi har bir katakka berilgan butun sonni (Integer) qo'shadi. Ushbu raqamni argument yordamida protseduraga o'tkazishingiz mumkin, masalan:

Sub AddToCells(i Integer) ... End Sub

Yodda tutingki, protseduralar uchun argumentlar mavjud vazifa и sub VBA-da ixtiyoriy. Ba'zi protseduralar argumentlarni talab qilmaydi.

Ixtiyoriy argumentlar

VBA protseduralarida ixtiyoriy argumentlar bo'lishi mumkin. Bu argumentlar, agar foydalanuvchi xohlasa, belgilashi mumkin va agar ular o'tkazib yuborilsa, protsedura ular uchun standart qiymatlardan foydalanadi.

Oldingi misolga qaytsak, funktsiyaga ixtiyoriy butun son argumentini qo'shish uchun u quyidagicha e'lon qilinadi:

Sub AddToCells(Ixtiyoriy i Butun son = 0)

Bunday holda, butun son argumenti i standart 0 bo'ladi.

Protsedurada bir nechta ixtiyoriy argumentlar bo'lishi mumkin, ularning barchasi argumentlar ro'yxatining oxirida keltirilgan.

Argumentlarni qiymat va mos yozuvlar bo'yicha uzatish

VBA-dagi argumentlar protseduraga ikki usulda uzatilishi mumkin:

  • ByVal - argumentni qiymat bo'yicha uzatish. Demak, protseduraga faqat qiymat (ya’ni argumentning nusxasi) uzatiladi va shuning uchun protsedura ichida argumentga kiritilgan har qanday o‘zgartirishlar protsedura tugagandan so‘ng yo‘qoladi.
  • Ref – argumentni havola orqali berish. Ya'ni xotiradagi argument joylashuvining haqiqiy manzili protseduraga uzatiladi. Protsedura ichidagi argumentga kiritilgan har qanday o'zgarishlar protsedura tugaganda saqlanadi.

Kalit so'zlardan foydalanish ByVal or Ref protsedura deklaratsiyasida argumentning protseduraga qanday uzatilishini belgilashingiz mumkin. Bu quyidagi misollarda ko'rsatilgan:

Sub AddToCells(ByVal i As Integer) ... End Sub
Bunday holda, butun son argumenti i qiymati bo'yicha o'tdi. Jarayonni tark etgandan keyin sub bilan qilingan hammasi i o'zgarishlar yo'qoladi.
Sub AddToCells(ByRef i As Integer) ... End Sub
Bunday holda, butun son argumenti i ma'lumotnoma orqali o'tdi. Jarayonni tark etgandan keyin sub bilan qilingan hammasi i o'zgarishlar protseduraga o'tgan o'zgaruvchida saqlanadi sub.

Esda tutingki, VBA-dagi argumentlar sukut bo'yicha mos yozuvlar orqali uzatiladi. Boshqacha qilib aytganda, agar kalit so'zlar ishlatilmasa ByVal or Ref, keyin argument havola orqali uzatiladi.

Jarayonlarni davom ettirishdan oldin vazifa и sub batafsilroq, ushbu ikki turdagi protseduralar o'rtasidagi xususiyatlar va farqlarni yana bir bor ko'rib chiqish foydali bo'ladi. Quyida VBA protseduralarining qisqacha muhokamasi keltirilgan vazifa и sub va oddiy misollar ko'rsatilgan.

VBA protsedurasi «Funktsiya»

VBA muharriri protsedurani taniydi vazifau quyidagi ochilish va yopish iboralari orasiga kiritilgan buyruqlar guruhiga duch kelganida:

Funktsiya ... Funktsiyani tugatish

Yuqorida aytib o'tilganidek, protsedura vazifa VBA da (farqli ravishda sub) qiymatni qaytaradi. Qaytish qiymatlari uchun quyidagi qoidalar qo'llaniladi:

  • Qaytish qiymatining ma'lumotlar turi protsedura sarlavhasida e'lon qilinishi kerak vazifa.
  • Qaytish qiymatini o'z ichiga olgan o'zgaruvchi protsedura bilan bir xil nomlanishi kerak vazifa. Bu o'zgaruvchini alohida e'lon qilish shart emas, chunki u har doim protseduraning ajralmas qismi sifatida mavjud. vazifa.

Bu quyidagi misolda yaxshi tasvirlangan.

VBA funksiyasiga misol: 3 ta raqam ustida matematik amalni bajarish

Quyida VBA protsedura kodiga misol keltirilgan vazifa, bu turdagi uchta argumentni oladi ikki hissa (ikki aniqlikdagi suzuvchi nuqtali raqamlar). Natijada, protsedura boshqa turdagi sonni qaytaradi ikki hissabirinchi ikki argument yig‘indisidan uchinchi argumentni ayirib tashlashga teng:

Funktsiya SumMinus(dNum1 Double, dNum2 Double, dNum3 Double) As Double SumMinus = dNum1 + dNum2 - dNum3 End Function

Bu juda oddiy VBA protsedurasi vazifa argumentlar orqali ma'lumotlarning protseduraga qanday uzatilishini ko'rsatadi. Jarayon tomonidan qaytarilgan ma'lumotlar turi sifatida aniqlanganligini ko'rishingiz mumkin ikki hissa (so'zlar aytadi Double sifatida argumentlar ro'yxatidan keyin). Ushbu misol, shuningdek, protsedura natijasi qanday ekanligini ko'rsatadi vazifa protsedura nomi bilan bir xil nomdagi o'zgaruvchida saqlanadi.

VBA protsedurasini "Funktsiya" deb nomlash

Yuqoridagi oddiy protsedura bo'lsa vazifa Visual Basic muharririda modulga kiritilgan, uni boshqa VBA protseduralaridan chaqirish yoki Excel ish kitobidagi ish varag'ida ishlatish mumkin.

VBA protsedurasini boshqa protseduradan "Funktsiya" ga chaqiring

tartib vazifa boshqa VBA protsedurasidan ushbu protsedurani o'zgaruvchiga tayinlash orqali chaqirilishi mumkin. Quyidagi misol protseduraga qo'ng'iroqni ko'rsatadi Summinus, bu yuqorida tavsiflangan edi.

Sub main() Xira jami ikki marta jami = SumMinus(5, 4, 3) End Sub

Ish varag'idan VBA protsedurasi "Funktsiya" ga qo'ng'iroq qiling

VBA protsedurasi vazifa Excel ish varag'idan boshqa o'rnatilgan Excel funksiyasi kabi chaqirilishi mumkin. Shuning uchun, oldingi misolda yaratilgan protsedura vazifa - Summinus quyidagi ifodani ishchi varaq katakchasiga kiritish orqali chaqirish mumkin:

=SumMinus(10, 5, 2)

VBA protsedurasi "Sub"

VBA muharriri uning oldida tartib borligini tushunadi subu quyidagi ochilish va yopish iboralari orasiga kiritilgan buyruqlar guruhiga duch kelganida:

Sub ... End Sub

VBA “Sub” protsedurasi: 1-misol. Tanlangan hujayralar diapazonida markazga moslashish va shrift o‘lchamini o‘zgartirish

Oddiy VBA protsedurasining misolini ko'rib chiqing sub, uning vazifasi tanlangan hujayralar diapazonini formatlashni o'zgartirishdir. Hujayralar markazlashtirilgan (vertikal va gorizontal) va shrift o'lchami foydalanuvchi tomonidan ko'rsatilganiga o'zgartiriladi:

Sub Format_Centered_Va_Sized(Ixtiyoriy iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Ushbu protsedura sub amallarni bajaradi, lekin natijani qaytarmaydi.

Ushbu misolda ixtiyoriy argument ham qo'llaniladi Shrift hajmi. Agar argument bo'lsa Shrift hajmi protseduraga o'tmagan sub, keyin uning standart qiymati 10. Biroq, agar argument Shrift hajmi protseduraga o'tdi sub, keyin tanlangan hujayralar diapazoni foydalanuvchi tomonidan belgilangan shrift o'lchamiga o'rnatiladi.

VBA quyi protsedurasi: 2-misol: tanlangan hujayralar diapazonida markazga tekislash va qalin shrift

Quyidagi protsedura yuqorida muhokama qilinganga o'xshaydi, lekin bu safar o'lchamini o'zgartirish o'rniga tanlangan katakchalar diapazoniga qalin shrift uslubini qo'llaydi. Bu misol protsedurasi sub, bu hech qanday dalil talab qilmaydi:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Excel VBA da "Sub" protsedurasini chaqirish

VBA protsedurasini boshqa protseduradan "Sub" deb chaqiring

VBA protsedurasini chaqirish uchun sub boshqa VBA protsedurasidan siz kalit so'zni yozishingiz kerak chaqirish, protsedura nomi sub va keyin qavs ichida protsedura argumentlari keltirilgan. Bu quyidagi misolda ko'rsatilgan:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Agar protsedura Format_markazlangan_va_oʻlchamli bir nechta argumentga ega, ular vergul bilan ajratilishi kerak. Shunga o'xshash:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Ish varag'idan VBA protsedurasi "Sub" ga qo'ng'iroq qiling

tartib sub to'g'ridan-to'g'ri Excel varaq katakchasiga kiritib bo'lmaydi, chunki protsedura yordamida amalga oshirilishi mumkin vazifachunki protsedura sub qiymat qaytarmaydi. Biroq, protseduralar sub, argumentlarga ega bo'lmagan va deb e'lon qilingan ijtimoiy (quyida ko'rsatilganidek) ishchi varaq foydalanuvchilari uchun mavjud bo'ladi. Shunday qilib, agar yuqorida muhokama qilingan oddiy tartiblar sub Visual Basic muharriridagi modulga kiritilgan protsedura Format_markazlangan_va_qalin Excel ish varag'ida foydalanish uchun mavjud bo'ladi va protsedura Format_markazlangan_va_oʻlchamli – mavjud bo'lmaydi, chunki unda argumentlar mavjud.

Mana protsedurani ishga tushirish (yoki bajarish)ning oson yo'li sub, ish varag'idan foydalanish mumkin:

  • matbuot Alt + F8 (tugmasini bosing Alt va uni ushlab turganda tugmani bosing F8).
  • Ko'rsatilgan makroslar ro'yxatida ishga tushirmoqchi bo'lgan birini tanlang.
  • matbuot yugurish (yugurish)

Jarayonni bajarish uchun sub tez va oson, siz unga klaviatura yorlig'ini belgilashingiz mumkin. Buning uchun:

  • matbuot Alt + F8.
  • Ko'rsatilgan makroslar ro'yxatida klaviatura yorlig'ini tayinlamoqchi bo'lgan birini tanlang.
  • matbuot Parameters (Options) va paydo bo'lgan dialog oynasida klaviatura yorliqlarini kiriting.
  • matbuot OK va dialog oynasini yoping Ibratli (Makro).

Diqqat: Makrosga klaviatura yorlig'ini belgilashda, u Excelda standart sifatida ishlatilmasligiga ishonch hosil qiling (masalan, Ctrl + C). Agar siz allaqachon mavjud klaviatura yorlig'ini tanlasangiz, u makrosga qayta tayinlanadi va natijada foydalanuvchi tasodifan so'lni ishga tushirishi mumkin.

VBA protseduralari doirasi

Ushbu qo‘llanmaning 2-qismida o‘zgaruvchilar va konstantalar doirasi hamda kalit so‘zlarning roli muhokama qilindi. ijtimoiy и shaxsiy. Ushbu kalit so'zlardan VBA protseduralari bilan ham foydalanish mumkin:

Umumiy Sub AddToCells(i Integer) ... End Sub
Agar protsedura deklaratsiyasidan oldin kalit so'z bo'lsa ijtimoiy, keyin protsedura ushbu VBA loyihasidagi barcha modullar uchun mavjud bo'ladi.
Private Sub AddToCells(i As Integer) ... End Sub
Agar protsedura deklaratsiyasidan oldin kalit so'z bo'lsa shaxsiy, keyin bu protsedura faqat joriy modul uchun mavjud bo'ladi. Uni boshqa modulda yoki Excel ish kitobidan chaqirib bo'lmaydi.

Shuni esda tutingki, agar VBA protsedurasini e'lon qilishdan oldin vazifa or sub kalit so'z kiritilmagan, protsedura uchun standart xususiyat o'rnatiladi ijtimoiy (ya'ni, bu VBA loyihasida hamma joyda mavjud bo'ladi). Bu sukut bo'yicha o'zgarmaydigan deklaratsiyalardan farqli o'laroq shaxsiy.

"Funktsiya" va "Sub" VBA protseduralaridan erta chiqish

Agar siz VBA protsedurasining bajarilishini to'xtatishingiz kerak bo'lsa vazifa or sub, uning tabiiy tugashini kutmasdan, buning uchun operatorlar mavjud Chiqish funksiyasi и Sub-dan chiqing. Ushbu operatorlardan foydalanish misol sifatida oddiy protsedura yordamida quyida ko'rsatilgan. vazifaKeyingi operatsiyalarni bajarish uchun ijobiy dalil olishni kutadigan A. Agar protseduraga ijobiy bo'lmagan qiymat o'tkazilsa, boshqa operatsiyalarni bajarib bo'lmaydi, shuning uchun foydalanuvchiga xato xabari ko'rsatilishi va protsedura darhol chiqishi kerak:

Funktsiya VAT_Amount(sVAT_Rate as Single) VAT_Amount = 0 Agar sVAT_Rate <= 0 bo'lsa, u holda MsgBox "sVAT_Rate ning ijobiy qiymati kutilgan, ammo olingan" va sVAT_Rate Funktsiyadan chiqish Funktsiya tugashi, agar ... End Funktsiya

Iltimos, protsedurani yakunlashdan oldin unutmang vazifa - QQS_summasi, kodga o'rnatilgan VBA funksiyasi kiritilgan MsgBox, bu foydalanuvchiga ogohlantirish qalqib chiquvchi oynasini ko'rsatadi.

Leave a Reply