Mundarija
UDF-larni qanday yaratishni allaqachon bilganingiz uchun (va umid qilamanki, siz ularni Excel-da qo'llashga harakat qilgansiz), keling, biroz chuqurroq qazib olaylik va foydalanuvchi belgilagan funksiya ishlamasa nima qilish mumkinligini ko'rib chiqamiz.
Xususiy funktsiyani yaratishda ba'zi muammolarni hal qilish uchun siz disk raskadrovkani ishga tushirishingiz kerak bo'ladi. Shunda funksiya toʻgʻri ishlayotganiga amin boʻlishingiz mumkin.
Biz quyidagi nosozliklarni tuzatish usullarini oʻrganamiz:
Xususiy funksiya yaratganingizda, har doim imkoniyat mavjud. siz xato qilasiz. Maxsus funktsiyalar odatda juda murakkab. Va ular har doim ham darhol to'g'ri ishlay boshlashmaydi. Formula noto'g'ri natija yoki #VALUE! xato. Standart Excel funksiyalaridan farqli o'laroq, siz boshqa xabarlarni ko'rmaysiz.
Uning har bir bayonoti qanday ishlashini tekshirish uchun maxsus funksiyadan bosqichma-bosqich o'tishning yo'li bormi? Albatta! Buning uchun disk raskadrovkadan foydalaniladi.
Men sizga moslashtirilgan funksiyani disk raskadrovka qilishning bir necha usullarini taklif qilaman, shunda siz oʻzingizga mos keladiganini tanlaysiz.
Misol sifatida biz maxsus funksiyadan foydalanamiz. GetMaxBetween koʻrsatilgan qiymatlar oraligʻidagi maksimal sonni hisoblaydigan oldingi maqolalarimizdan biri:
Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Integer ReDim arrNums(rngCells.Count) sifatida rngCells vMax ichidagi har bir raqam diapazoni uchun =NumRange Case tanlash vMax Case MinNum + 0,01 to MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Keyingi NumRange GetMaxBetween = WorksheetFunction.Max(Funksiya funksiyasi faollashtirilgan) <0) raqamlar yoziladigan katakchalar diapazoni, shuningdek qiymatlarning yuqori va pastki chegarasi.MsgBox funksiyasini muhim joylarga joylashtiring
Hisob-kitoblarning bajarilishini kuzatish uchun siz ekranni ko'rsatishingiz mumkin. to'g'ri joylarda ekrandagi eng muhim o'zgaruvchilar qiymatlari. Buni qalqib chiquvchi dialog oynalari yordamida amalga oshirish mumkin.
MsgBox - foydalanuvchiga qandaydir xabarni ko'rsatish uchun foydalanishingiz mumkin bo'lgan muloqot oynasi.
MsgBox sintaksisi boshqa VBA funksiyalariga o'xshaydi:
MsgBox(prompt [, tugmalar] [, sarlavha] [, helpfile, kontekst])prompt talab qilinadigan argumentdir. U dialog oynasida ko'rgan xabarni o'z ichiga oladi. U alohida o'zgaruvchilarning qiymatlarini ko'rsatish uchun ham ishlatilishi mumkin.
Boshqa barcha argumentlar ixtiyoriy.
[ tugmalar ] - qaysi tugmalar va piktogrammalar ekanligini aniqlaydi. MsgBox da ko'rsatiladi. Misol uchun, agar biz vbOkOnly opsiyasidan foydalansak, u holda faqat OK tugmasi ko'rsatiladi. Agar siz ushbu argumentni o'tkazib yuborgan bo'lsangiz ham, bu tugma sukut bo'yicha ishlatiladi.
[ title ] - bu yerda siz xabarlar oynasi sarlavhasini belgilashingiz mumkin.
Keling, quyidagidan almashtiramiz. mashq qilish va tuzatishni boshlash uchun so'zlar. Ko'rsatish uchunxabar uchun, GetMaxBetween foydalanuvchi tomonidan belgilangan funksiya kodiga Case Else operatoridan oldin quyidagi qatorni qo'shing:
MsgBox vMax,, "Count -" & iNatijada biz nimaga erishamiz:
Funktsiya GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.) Har bir NumRange In rngCells uchun vMax = NumRange Case vMax Case MinNum + 0,01 To MaxNum - 0,01 arrNums (i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 End Keyingini tanlang NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionMuloqot oynasidagi vMax o'zgaruvchisidan foydalanib, qaysi raqamlar tanlash mezonlariga mos kelishini ko'ramiz, shuning uchun Biz ulardan eng kattasini tanlashimiz mumkin. "Count -" ifodasi bilan & Men sarlavha satrida biz maksimal qiymatni aniqlash uchun qancha raqam tanlaganimizni ko'rsatamiz. Hisoblagich har bir yangi qiymat bilan ortadi.
UDF o'rnatilgandan so'ng, sanalar oralig'iga quyidagi formulani qo'llaymiz:
= GetMaxBetween (A1:A6,10,50)
Kirish tugmasidan so'ng bosilsa, quyidagi skrinshotdagi kabi xabarni ko'rasiz:
Bu A1: A6 diapazonidagi mezonlarga javob beradigan birinchi raqam: 10 dan katta, lekin kamroq 50 dan ortiq.
OK tugmasini bosganingizdan so'ng 14 raqami bilan ikkinchi xabar paydo bo'ladi. Qolgan raqamlar tanlanganga mos kelmaydi.mezonlar. Shu sababli, funktsiya ikkita qiymatdan eng kattasini chiqaradi va qaytaradi, 17.
MsgBox funksiyasi qiymatlarni qanday boshqarishini boshqarish uchun shaxsiy funksiyangizning eng muhim joylarida ishlatilishi mumkin. individual o'zgaruvchilarning o'zgarishi. Xabar qutilari katta funktsiyaga va juda ko'p hisoblashga ega bo'lganda juda foydali bo'lishi mumkin. Bunday holda, kodning qaysi qismida xatolik yuz berganligini aniqlash oson bo'ladi.
To'xtash nuqtalarini aniqlang va bosqichma-bosqich bajaring
Siz kodga to'xtash nuqtalarini qo'shishingiz mumkin. kod bajarilishi to'xtaydigan funktsiyangiz. Shunday qilib, hisoblash jarayonini bosqichma-bosqich kuzatishingiz mumkin. Bunda siz oʻzgaruvchilar qiymatlari qanday oʻzgarishini koʻrishingiz mumkin.
Toʻxtash nuqtasini qoʻshish uchun kursorni pauza qilishni tanlagan bayonotni oʻz ichiga olgan qatorga qoʻying. Keyin sichqonchaning o'ng tugmachasini bosing va Debug -> Breakpoint -ni almashtiring yoki shunchaki F9 tugmasini bosing. Funksiya kodining chap tomonidagi vertikal kulrang maydonning kerakli joyini ham bosishingiz mumkin.
Quyidagi skrinshotda koʻrib turganingizdek, qizil doira paydo boʻladi. Hisoblash to'xtatiladigan kod qatori qizil rang bilan ta'kidlangan.
Endi funksiya ishlayotganda VBA muharriri oynasi ochiladi. Kursor siz toʻxtagan joyingizga joylashtiriladi.
Agar sichqoncha kursorini funktsiya kodidagi oʻzgaruvchilardan birortasi ustiga olib kelsangiz, ularning joriy qiymatini koʻrishingiz mumkin.qiymat:
Hisoblashni davom ettirish uchun F5 tugmasini bosing.
Eslatma. To'xtash nuqtasidan so'ng siz hisob-kitoblarning borishini bosqichma-bosqich kuzatishni boshlashingiz mumkin. Agar siz F8 tugmasini bossangiz, VBA kodining faqat bitta keyingi qatori bajariladi. O'q bilan sariq chiziq ham oxirgi bajarilgan kod pozitsiyasiga o'tadi.
Funktsiyaning bajarilishi yana to'xtatilganligi sababli, siz sichqoncha kursori yordamida funktsiyaning barcha o'zgaruvchilari joriy qiymatlarini ko'rishingiz mumkin.
F8 tugmasini keyingi bosish bizni bir qadam oldinga olib boradi. . Shunday qilib, siz F8 tugmasini hisoblash oxirigacha bosishingiz mumkin. Yoki keyingi to'xtash nuqtasiga qadar hisoblashni davom ettirish uchun F5 tugmasini bosing.
Agar xatolik yuzaga kelsa, kursor xatolik yuz bergan koddagi nuqtada to'xtatiladi. Shuningdek, siz qalqib chiquvchi xato xabarini ko'rasiz. Bu muammoning sababini aniqlashni osonlashtiradi.
Siz ko'rsatgan to'xtash nuqtalari faylni yopguningizcha qo'llaniladi. Uni qayta ochganingizda, ularni qayta o'rnatishingiz kerak bo'ladi. Eng qulay usul emas, shunday emasmi?
Biroq, bu muammoni hal qilish mumkin. Funksiya kodiga kerakli nuqtalarda Stop iborasini kiriting va siz to'xtash nuqtalaridan foydalanganda dasturning bajarilishini xuddi shunday to'xtatib qo'yishingiz mumkin.
VBA Stop bayonotiga duch kelganida, u dastur bajarilishini to'xtatadi va sizning harakatingizni kutadi. Keyin o'zgaruvchilarning qiymatlarini tekshiringDavom etish uchun F5 tugmasini bosing.
Yoki yuqorida tavsiflanganidek, funktsiyani bosqichma-bosqich bajarish uchun F8 tugmasini bosing.
Stop iborasi dasturning bir qismidir va shuning uchun to'xtash nuqtasida bo'lgani kabi o'chirilmaydi. Nosozliklarni tuzatish tugagach, uni o'zingiz olib tashlang. Yoki uning oldiga bitta qo'shtirnoq (') qo'yib, uni izohga aylantiring.
Debug.Print operatori yordamida disk raskadrovka qilish
Siz Debug.Print -ni o'z ichiga joylashtirishingiz mumkin. funktsiya kodi to'g'ri joyda. Bu davriy ravishda oʻzgaruvchan oʻzgaruvchilar qiymatlarini tekshirish uchun foydalidir.
Quyidagi skrinshotda Debug.Print ishlashining namunasini koʻrishingiz mumkin.
Bayonot Debug.Print i, vMax qiymatlarni va ularning tartib raqamlarini chop etadi.
Immediate oynasida siz tanlangan diapazondan ikkita raqamni (17 va 14) ko'rasiz, bu raqamga mos keladi. chegaralarni belgilang va ular orasidan maksimali tanlanadi. 1 va 2-raqamlar funksiya raqamlar tanlangan 2 tsiklni tugatganligini bildiradi. Biz avvalroq MsgBox bilan qilganimizdek, eng muhim o'zgaruvchilarning qiymatlarini ko'ramiz. Lekin bu funktsiyani to'xtata olmadi.
Protseduradan funksiyani chaqirish
Siz foydalanuvchi aniqlagan funksiyani ishchi varaqdagi hujayradan emas, balki protseduradan chaqirishingiz mumkin. Bunday holda, barcha xatolar Visual Basic Editor oynasida ko'rsatiladi.
Bu erda siz foydalanuvchi tomonidan belgilangan GetMaxBerween funktsiyasiniprotsedura:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubKursorni kodning istalgan joyiga joylashtiring va F5 tugmasini bosing. Agar funktsiyada xatolik bo'lmasa, siz hisoblash natijasi bilan qalqib chiquvchi oynani ko'rasiz.
Xato bo'lsa, VBA muharririda tegishli xabarni ko'rasiz. Hisoblash to'xtatiladi va xatolik yuz bergan kod qatori sariq rangda ta'kidlanadi. Xato qayerda va nima uchun sodir bo'lganini osongina aniqlashingiz mumkin.
Hammasi shu. Endi siz o'zingizning plaginingizni yaratdingiz, uni Excelga qo'shdingiz va unda UDF dan foydalanishingiz mumkin. Agar siz koʻproq UDF dan foydalanmoqchi boʻlsangiz, VBA muharriridagi qoʻshimcha modulga kodni yozing va uni saqlang.
Bugungidek. Biz maxsus funksiyalarni disk raskadrovka qilishning turli usullarini ko‘rib chiqdik va ularni ish kitobingizda qanday ishlatishni o‘rgandik. Umid qilamizki, siz ushbu ko'rsatmalarni foydali deb topasiz. Agar sizda biron bir savol bo'lsa, ushbu maqolaga sharhlarda yozing.