Mündəricat
UDF-ləri necə yaratmağı artıq bildiyiniz üçün (və ümid edirəm ki, siz də onları Excel-də tətbiq etməyə cəhd etmisiniz), gəlin bir az dərinləşək və istifadəçi tərəfindən müəyyən edilmiş funksiyanız işləmədiyi halda nə edilə biləcəyinə baxaq.
Fərdi funksiya yaradarkən bəzi problemləri həll etmək üçün çox güman ki, siz debug işlətməli olacaqsınız. Onda siz funksiyanın düzgün işlədiyinə əmin ola bilərsiniz.
Aşağıdakı sazlama üsullarını araşdıracağıq:
Fərdi funksiya yaratdığınız zaman həmişə belə bir imkan var. ki, səhv edəcəksən. Xüsusi funksiyalar adətən olduqca mürəkkəbdir. Həmişə dərhal düzgün işləməyə başlamırlar. Düstur yanlış nəticə və ya #VALUE! səhv. Standart Excel funksiyalarından fərqli olaraq, siz heç bir başqa mesaj görməyəcəksiniz.
Hər bir ifadənin necə işlədiyini yoxlamaq üçün fərdi funksiyadan addım-addım keçməyin bir yolu varmı? Əlbəttə! Bunun üçün sazlama istifadə olunur.
Mən sizə fərdi funksiyanızı sazlamaq üçün bir neçə yol təklif edəcəyəm ki, sizin üçün uyğun olanı seçə biləsiniz.
Misal olaraq, biz fərdi funksiyadan istifadə edirik. GetMaxBetween , göstərilən dəyərlər diapazonunda maksimum ədədi hesablayan əvvəlki məqalələrimizdən birindən:
Funksiya GetMaxBetween(RngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i rngCells vMax-da Hər NumRange üçün Tam ReDim arrNums(rngCells.Count) kimi =NumRange Select Case vMax Case MinNum + 0.01 to MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(əyləncəli Numlar) funksiyası əlavə olunur <0. rəqəmlərin yazıldığı xanalar diapazonu, eləcə də dəyərlərin yuxarı və aşağı həddi.MsgBox funksiyasını vacib yerlərdə yerləşdirin
Hesablamaların yerinə yetirilməsinə nəzarət etmək üçün siz ekranı göstərə bilərsiniz. ekranda ən vacib dəyişənlərin dəyərləri lazımi yerlərdə. Bunu pop-up dialoq qutularından istifadə etməklə etmək olar.
MsgBox istifadəçiyə bir növ mesaj göstərmək üçün istifadə edə biləcəyiniz dialoq qutusudur.
MsgBox-un sintaksisi digər VBA funksiyalarına bənzəyir:
MsgBox(prompt [, düymələr] [, başlıq] [, helpfile, context])prompt tələb olunan arqumentdir. O, dialoq qutusunda gördüyünüz mesajı ehtiva edir. O, həmçinin fərdi dəyişənlərin dəyərlərini göstərmək üçün istifadə edilə bilər.
Bütün digər arqumentlər isteğe bağlıdır.
[ düymələr ] - hansı düymələrin və nişanların olduğunu müəyyən edir. MsgBox -də göstərilir. Məsələn, vbOkOnly variantından istifadə etsək, onda yalnız OK düyməsi görünəcək. Bu arqumenti qaçırsanız belə, bu düymə defolt olaraq istifadə olunur.
[ title ] - burada siz mesaj qutusunun başlığını təyin edə bilərsiniz.
Gəlin buradan keçək. məşq etmək və sazlamaya başlamaq üçün sözlər. Göstərmək üçünmesajında, Case Else operatorundan əvvəl istifadəçi tərəfindən müəyyən edilmiş GetMaxBetween funksiyasının koduna aşağıdakı sətri əlavə edin:
MsgBox vMax,, "Count -" & iNəticədə əldə edəcəyimiz budur:
Funksiya GetMaxBetween(RngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.) rngCells-də Hər NumRange üçün vMax = NumRange Case Select 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 Next Seçin NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionDialoq qutusunda vMax dəyişənindən istifadə edərək, biz hansı nömrələrin seçim meyarlarına uyğun olduğunu görəcəyik. ki, onlardan ən böyüyü seçə bilək. "Count -" ifadəsi ilə & Mən başlıq çubuğunda maksimum dəyəri müəyyən etmək üçün artıq neçə ədəd seçdiyimizi göstəririk. Sayğac hər yeni dəyərlə artırılacaq.
UDF təyin etdikdən sonra tarix diapazonuna aşağıdakı düsturu tətbiq edirik:
= GetMaxBetween (A1:A6,10,50)
Daxil et düyməsindən sonra basıldığında, aşağıdakı ekran görüntüsündə olduğu kimi bir mesaj görəcəksiniz:
Bu, A1: A6 diapazonunda meyarlara cavab verən ilk rəqəmdir: 10-dan çox, lakin daha az 50-dən çox.
OK düyməsini kliklədikdən sonra 14 rəqəmi ilə ikinci mesaj görünür. Qalan nömrələr seçimə uyğun gəlmir.meyarlar. Buna görə də, funksiya iki dəyərdən ən böyüyü olan 17-ni çıxarır və qaytarır.
MsgBox funksiyası dəyərlərin necə idarə olunmasına nəzarət etmək üçün fərdi funksiyanızda ən vacib yerlərdə istifadə edilə bilər. fərdi dəyişənlərin dəyişməsi. Böyük bir funksiyaya və çoxlu hesablamalara malik olduğunuz zaman mesaj qutuları çox faydalı ola bilər. Bu halda, kodun hansı hissəsində xətanın baş verdiyini müəyyən etmək sizin üçün asan olacaq.
Dayanma nöqtələrini müəyyənləşdirin və addım-addım yerinə yetirin
Sizin koduna kəsmə nöqtələri əlavə edə bilərsiniz. kodun icrasının dayanacağı funksiyanız. Beləliklə, hesablama prosesini addım-addım izləyə bilərsiniz. Bununla siz dəyişənlərin qiymətlərinin necə dəyişdiyini görə bilərsiniz.
Kəsmə nöqtəsi əlavə etmək üçün kursoru dayandırmağı seçdiyiniz ifadəni ehtiva edən sətirə qoyun. Sonra sağ klikləyin və seçin Debug -> Breakpoint -i dəyişdirin və ya sadəcə F9 düyməsini basın. Siz həmçinin funksiya kodunun sol tərəfindəki şaquli boz sahədə istədiyiniz yerə klikləyə bilərsiniz.
Aşağıdakı ekran görüntüsündə gördüyünüz kimi qırmızı dairə görünəcək. Hesablamanın dayandırılacağı kod sətri qırmızı rənglə vurğulanır.
İndi funksiya işləyərkən VBA redaktoru pəncərəsi açılacaq. Kursor dayandığınız yerdə yerləşdiriləcək.
Mausun kursorunu funksiya kodundakı dəyişənlərdən hər hansı birinin üzərinə gətirsəniz, onların cari parametrlərini görə bilərsiniz.dəyər:
Hesablamağa davam etmək üçün F5 düyməsini basın.
Qeyd. Kəsmə nöqtəsindən sonra hesablamaların gedişatını addım-addım izləməyə başlaya bilərsiniz. F8 düyməsini basarsanız, VBA kodunun yalnız bir növbəti sətri yerinə yetiriləcək. Ox olan sarı xətt də son icra edilən kod mövqeyinə keçəcək.
Funksiyanın icrasına yenidən fasilə verildiyi üçün siz siçan kursorundan istifadə edərək funksiyanın bütün dəyişənlərinin cari dəyərlərinə baxa bilərsiniz.
F8 düyməsini növbəti dəfə basmaq bizi bir addım irəli aparacaq. . Beləliklə, hesablamanın sonuna qədər F8 düyməsini basa bilərsiniz. Və ya növbəti kəsmə nöqtəsinə qədər hesablamağa davam etmək üçün F5 düyməsini basın.
Xəta baş verərsə, kursor kodun xətanın baş verdiyi nöqtədə dayandırılacaq. Siz həmçinin pop-up səhv mesajı görəcəksiniz. Bu, problemin səbəbini müəyyən etməyi asanlaşdırır.
Siz faylı bağlayana qədər qeyd etdiyiniz kəsmə nöqtələri tətbiq olunacaq. Onu yenidən açdığınız zaman onları yenidən təyin etməli olacaqsınız. Ən əlverişli üsul deyil, sizcə?
Lakin bu problemi həll etmək olar. Lazımi nöqtələrdə funksiya koduna Stop ifadəsini daxil edin və proqramın icrasını kəsmə nöqtələrindən istifadə edərkən olduğu kimi dayandıra bilərsiniz.
VBA Stop ifadəsi ilə qarşılaşdıqda, proqramın icrasını dayandıracaq və hərəkətinizi gözləyəcək. Sonra dəyişənlərin dəyərlərini yoxlayındavam etmək üçün F5 düyməsini basın.
Və ya yuxarıda təsvir olunduğu kimi funksiyanı addım-addım yerinə yetirmək üçün F8 düyməsini basın.
Stop ifadəsi proqramın bir hissəsidir və buna görə də kəsilmə nöqtəsində olduğu kimi silinmir. Sazlama işlərini bitirdikdən sonra onu özünüz çıxarın. Və ya ondan əvvəl bir dırnaq işarəsi (') ilə onu şərhə çevirin.
Debug.Print operatorundan istifadə etməklə sazlama
Siz Debug.Print -i bura yerləşdirə bilərsiniz. funksiya kodu düzgün yerdə. Bu, dövri olaraq dəyişən dəyişənlərin dəyərlərini yoxlamaq üçün faydalıdır.
Aşağıdakı skrinşotda Debug.Print performansının nümunəsinə baxa bilərsiniz.
İfadəsi Debug.Print i, vMax dəyərləri və onların sıra nömrələrini çap edir.
Dərhal pəncərədə siz seçilmiş diapazondan iki ədəd (17 və 14) görürsünüz. limitlər təyin edin və onların arasında maksimum seçiləcək. 1 və 2 rəqəmləri funksiyanın nömrələrin seçildiyi 2 dövrü tamamladığını bildirir. Daha əvvəl MsgBox ilə etdiyimiz kimi, ən vacib dəyişənlərin dəyərlərini görürük. Lakin bu funksiyanı dayandırmadı.
Prosedurdan funksiyaya zəng edin
Siz istifadəçi tərəfindən müəyyən edilmiş funksiyanı iş vərəqindəki xanadan deyil, prosedurdan çağıra bilərsiniz. Bu halda, bütün səhvlər Visual Basic Redaktoru pəncərəsində göstəriləcək.
İstifadəçi tərəfindən müəyyən edilmiş GetMaxBerween funksiyasına aşağıdakı kimi zəng edə bilərsiniz.prosedur:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubKursoru kodun istənilən yerinə yerləşdirin və F5 düyməsini basın. Əgər funksiyada heç bir xəta yoxdursa, siz hesablama nəticəsi ilə açılan pəncərəni görəcəksiniz.
Səhv baş verərsə, VBA redaktorunda müvafiq mesajı görəcəksiniz. Hesablama dayandırılacaq və xətanın baş verdiyi kod xətti sarı rənglə vurğulanacaq. Siz xətanın harada və niyə baş verdiyini asanlıqla müəyyən edə bilərsiniz.
Hamısı budur. İndi siz öz əlavənizi yaratdınız, onu Excel-ə əlavə etdiniz və orada UDF-dən istifadə edə bilərsiniz. Daha çox UDF istifadə etmək istəyirsinizsə, kodu VBA redaktorunda əlavə modulda yazın və yadda saxlayın.
Bu gün üçün belədir. Fərdi funksiyaları sazlamaq üçün müxtəlif yolları əhatə etdik və iş dəftərinizdə onlardan necə istifadə edəcəyinizi öyrəndik. Ümid edirik ki, bu təlimatları faydalı tapacaqsınız. Hər hansı bir sualınız varsa, bu məqalənin şərhlərində yazın.