Excel UDF işləmir: problemlər və həllər

  • Bunu Paylaş
Michael Brown

Bu məqalədə iş kitablarınızda fərdi funksiyalardan istifadə edərkən qarşılaşa biləcəyiniz problemlərə nəzər salacağıq. Mən sizə onların nəyə səbəb olduğunu və onların necə asanlıqla həll oluna biləcəyini göstərməyə çalışacağam.

Budur, nə haqqında danışacağıq:

    Əvvəllər biz nədən danışdıq xüsusi funksiya, onu necə yaratmaq və istifadə etməkdir. UDF-lər haqqında əsas bilikləri əvvəlcədən yeniləməli olduğunuzu hiss edirsinizsə, fasilə verin və mənim əvvəlki məqaləmə nəzər salın.

    Excel UDF niyə yenidən hesablanmır?

    Hər hansı dəyişiklik edərkən iş dəftərinizdə Excel oradakı hər bir düsturunuzu yenidən hesablamayacaq. O, yalnız dəyişdirilmiş xanalarla əlaqələndirilmiş düsturların nəticələrini yeniləyəcək.

    Lakin bu, standart Excel funksiyalarına aiddir. Xüsusi olanlara gəldikdə, Excel VBA kodunu təsdiq edə və xüsusi funksiyanın nəticəsinə təsir edə biləcək digər hüceyrələri müəyyən edə bilməz. Buna görə də, iş kitabında dəyişiklik etdiyiniz zaman fərdi düsturunuz dəyişməyə bilər.

    Problemi həll etmək üçün sadəcə Application.Volatile ifadəsindən istifadə etməlisiniz. Onun tətbiqi ilə bağlı addım-addım təlimatları öyrənmək üçün növbəti fəsilə baxın.

    Uçucu və dəyişkən olmayan fərdi funksiyalar

    Defolt olaraq, Excel-də fərdi funksiyalar dəyişkən deyil. Bu o deməkdir ki, UDF yalnız istinad etdiyi xanalardan hər hansı birinin dəyəri dəyişdikdə yenidən hesablanır. Amma xanaların formatı varsa, adıiş vərəqi, faylın adı dəyişir, onda UDF-də heç bir dəyişiklik baş verməyəcək.

    Gəlin sözlərdən nümunələrə keçək. Məsələn, iş dəftərinizin adını xanaya yazmalısınız. Bunu etmək üçün siz fərdi funksiya yaradırsınız:

    Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

    İndi aşağıdakı işi təsəvvür edin. Siz xanaya =İş kitabıAdı() xüsusi düsturunu yazdınız və orada fayl adını aldınız. Bir müddət sonra faylın adını dəyişməyə qərar verdiniz və onu başqa adla saxladınız. Amma xanadakı qiymətə baxırsan ki, dəyişməyib. Hələ də düzgün olmayan köhnə fayl adı var.

    Bu funksiyada heç bir arqument olmadığı üçün funksiya yenidən hesablanmır (iş kitabının adını dəyişsəniz, onu bağlayın və sonra yenidən açsanız belə) o).

    Qeyd. Faylınızdakı bütün funksiyaları yenidən hesablamaq üçün Ctrl + Alt + F9 qısa yolundan istifadə edə bilərsiniz.

    Daha asan yol varmı? İş vərəqi hər dəfə dəyişdikdə düsturun yenidən hesablanması üçün sizə əlavə kod xətti lazımdır. Aşağıdakı kod parçasını funksiyanızın əvvəlinə yerləşdirin:

    Application.Volatile

    Beləliklə, kodunuz belə görünəcək:

    Funksiya WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    İndi sizin UDF dəyişkəndir, ona görə də iş vərəqində hər hansı xana varsa avtomatik olaraq yenidən hesablanacaq.yenidən hesablanıb və ya iş kitabında hər hansı dəyişiklik baş verib. Faylın adını dəyişən kimi dərhal həmin yeniləməni görəcəksiniz.

    Qeyd. Xahiş edirik unutmayın ki, həddən artıq çox dəyişkən funksiyalar Excel-i ləngidə bilər. Axı, mürəkkəb hesablamaları yerinə yetirən və davamlı olaraq böyük məlumat diapazonlarında işləyən çoxlu xüsusi funksiyalar var.

    Ona görə də dəyişkənlikdən yalnız həqiqətən lazım olduğu yerdə istifadə etməyi məsləhət görürəm.

    Fərdi funksiyalar niyə mövcud deyildir

    Fərdi funksiyanın adının ilk hərflərini daxil etdiyiniz zaman o, görünür standart Excel funksiyaları kimi daxiletmə xanasının yanında açılan siyahıda.

    Lakin bu, həmişə baş vermir. Hansı səhvlər bu vəziyyətə səbəb ola bilər?

    Əgər sizdə Excel 2003-2007 varsa, onda UDF açılan siyahıda heç vaxt görünməyəcək. Orada siz yalnız standart funksiyaları görə bilərsiniz.

    Ancaq Excel-in daha yeni versiyasından istifadə etsəniz belə, təsadüfən edə biləcəyiniz başqa bir səhv var.

    Görürsən ki, fərdi funksiya burada olmalıdır. Modullar adlı standart VBA modulu. Funksiya kodunu yazmaq üçün yeni modul əlavə etdikdə avtomatik olaraq bütün modulların yazıldığı Modullar qovluğu yaradılır.

    Lakin bəzən elə olur ki, yeni modul yoxdur. yaradılır. Növbəti ekran görüntüsündə xüsusi funksiya kodunun “Microsoft Excel Objects” modulunda olduğunu görə bilərsiniz.Bu İş kitabı.

    Məsələ ondadır ki, siz iş vərəqinin və ya iş kitabının kod sahəsinə fərdi funksiya yerləşdirə bilməzsiniz. Bu halda funksiya işləməyəcək. Üstəlik, o, funksiyaların açılan siyahısında görünməyəcək. Buna görə də kod həmişə Modullar qovluğunda olmalıdır.

    Excel xüsusi funksiyası yardım mətni göstərilmir

    Başqa bir problem, yapışdırdığınız zaman gördüyünüz işarədir. xüsusi funksiya. Standart funksiyadan istifadə etsəniz, həmişə funksiya və onun arqumentləri üçün alət ipucunu görəcəksiniz. Bəs UDF-lər haqqında nə demək olar?

    Əgər çoxlu fərdi funksiyalarınız varsa, onların hər birinin hansı hesablamaları etdiyini xatırlamaq sizin üçün çox çətin olacaq. Hansı arqumentlərdən istifadə edəcəyinizi xatırlamaq daha da çətin olacaq. Düşünürəm ki, xatırlatma kimi fərdi funksiyalarınızın təsvirinin olması yaxşı fikirdir.

    Bunun üçün mən Application.MacroOptions metodundan istifadə etməyi təklif edərdim. Bu, Funksiya Sihirbazı pəncərəsində təkcə funksiyanın deyil, həm də onun hər bir arqumentinin təsvirini göstərməyə kömək edəcək. Düsturlar zolağında Fx düyməsini kliklədiyiniz zaman bu pəncərəni görürsünüz.

    Gəlin UDF-lərinizə belə bir işarəni necə əlavə edəcəyinizi görək. Əvvəlki məqalədə GetMaxBetween xüsusi funksiyasına baxdıq. O, göstərilən diapazonda maksimum ədədi tapır və üç arqument götürür: ədədi dəyərlər diapazonu və maksimum və minimum dəyər.axtarın.

    İndi biz bu fərdi funksiya üçün təsvir əlavə edəcəyik. Bunun üçün Application.MacroOptions əmrini yaradıb işlədin. GetMaxBetween funksiyası üçün aşağıdakı əmri işlədə bilərsiniz:

    Sub RegisterUDF () Dim strFuncName As String 'qeydiyyatdan keçirmək istədiyiniz funksiyanın adı Dim strDescr As String ' funksiyanın təsviri özü Dim strArgs () As String 'funksiya arqumentlərinin təsviri ' GetMaxBetween funksiyasını qeydiyyatdan keçirin ReDim strArgs (1-dən 3-ə qədər) 'Funksiyanızda arqumentlərin sayı strFuncName = "GetMaxBetween" strDescr = "Maksimum say" (GetMaxBetween) "Rəqəmsal dəyərlər diapazonu" strArgs (2) = "Aşağı interval sərhədi " strArgs (3) = " Yuxarı interval sərhədi " Application.MacroOptions Makro: = strFuncName, _ Təsvir: = strDescr, _ ArgumentDescriptions: = strArgs, _ Kateqoriya: = " Mənim Fərdi Funksiyalarım " Son Alt

    və ya

    Sub RegisterUDF () Application.MacroOptions Makro: = "GetMaxBetween" , _ Təsvir: = "Göstərilən diapazonda maksimum say" , _ Kateqoriya: = "Mənim Xüsusi Funksiyalar" , _ ArqumentDescriptions: = Massiv (_ "Ədədi dəyərlər diapazonu" , _ "Aşağı interval bor" der", _ "Yuxarı interval sərhədi" ) End Sub

    Dəyişən str FuncName funksiyanın adıdır. strDescr - funksiyanın təsviri. strArgs dəyişənlərində hər bir arqument üçün göstərişlər var.

    Dördüncü arqumentin nə olduğunu düşünə bilərsiniz.Proqram.MacroOptions. Bu isteğe bağlı arqument Kateqoriya adlanır və xüsusi GetMaxBetween () funksiyamızın yerləşdiriləcəyi Excel funksiyaları sinfini göstərir. Siz onu mövcud kateqoriyalardan hər hansı birinin adı ilə adlandıra bilərsiniz: Riyaziyyat və amp ; Trig, Statistical, Logical və s. Yaratdığınız funksiyaları yerləşdirəcəyiniz yeni kateqoriya üçün ad təyin edə bilərsiniz. Əgər siz Kateqoriya arqumentindən istifadə etməsəniz, o zaman fərdi funksiya avtomatik olaraq “İstifadəçinin müəyyən etdiyi” kateqoriyasına yerləşdiriləcək.

    Funksiya kodunu modul pəncərəsinə yapışdırın:

    Sonra “Çalış” düyməsini sıxın. Komanda GetMaxBetween() funksiyanız ilə Fx düyməsini istifadə etmək üçün bütün parametrləri yerinə yetirəcək.

    Əgər siz Insert Function aləti ilə siz GetMaxBetween funksiyanızın "Mənim Xüsusi Funksiyalarım" kateqoriyasında olduğunu görəcəksiniz:

    Siz sadəcə olaraq xanaya funksiya adını yazmağa başlaya bilərsiniz və siz seçdiyiniz funksiyaların açılan siyahısında öz xüsusi funksiyanızı görəcəksiniz.

    Sonra Funksiya Sihirbazına zəng edin. Fx düyməsi ilə.

    İpucu. Funksiya Sihirbazını açmaq üçün CRTL + A düymələr kombinasiyasından da istifadə edə bilərsiniz.

    Funksiya Sihirbazı pəncərəsində siz öz funksiyanızın təsvirini, həmçinin birinci arqument üçün göstərişi görəcəksiniz. Kursoru üzərinə yerləşdirsənizikinci və ya üçüncü arqument, siz onlar üçün göstərişlər də görəcəksiniz.

    Bu göstərişlərin mətnini dəyişdirmək istəyirsinizsə, strDescr strArgs RegisterUDF () kodunda 7> dəyişənlər. Sonra RegisterUDF () əmrini yenidən işə salın.

    Əgər edilən bütün parametrləri geri qaytarmaq və funksiyanın təsvirini təmizləmək istəyirsinizsə, bu kodu çalıştırın:

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Təsvir: = Empty , ArgumentDescriptions: = Empty , Kateqoriya: = Empty End Sub

    Fərdi funksiyanı daxil etdiyiniz zaman ipucu əldə etməyin daha bir yolu var. Funksiyanın adını daxil edin və sonra Ctrl + Shift + A düyməsini basın :

    =GetMaxBetween( + Ctrl + Shift + A

    Siz funksiyanın bütün arqumentlərinin siyahısını görəcəksiniz:

    Təəssüf ki, siz burada funksiyanın təsvirini və onun arqumentlərini görməyəcəksiniz. Amma arqumentlərin adları olduqca informativdirsə, onlar da faydalı ola bilər. Yenə də heç nədən yaxşıdır :)

    Standart Excel funksiyaları kimi işləyən UDF-lər üçün intellisense yaratmaq üçün bir az daha çox iş lazım olacaq. Təəssüf ki, Microsoft heç bir seçim təqdim etmir. Hazırda mövcud olan yeganə həll Excel-DNA IntelliSense uzantısıdır. Ətraflı məlumatı tərtibatçının saytında tapa bilərsiniz.

    Ümid edirik ki, bu təlimatlar fərdi funksiyanız işləmədikdə və ya işləmədikdə problemləri həll etməyə kömək edəcək.istədiyiniz kimi işləyin. Bununla belə, UDF hələ də işləmirsə, lütfən, Şərhlər bölməsində probleminizi dəqiq təsvir edin. Biz bunu anlamağa və sizin üçün həllini tapmağa çalışacağıq ;)

    Michael Brown proqram alətlərindən istifadə edərək mürəkkəb prosesləri sadələşdirməyə həvəsi olan xüsusi texnologiya həvəskarıdır. Texnologiya sənayesində on ildən artıq təcrübəyə malik olmaqla, o, Microsoft Excel və Outlook, həmçinin Google Cədvəl və Sənədlərdə bacarıqlarını mükəmməlləşdirib. Mayklın bloqu öz biliyini və təcrübəsini başqaları ilə bölüşməyə, məhsuldarlığı və səmərəliliyi artırmaq üçün asan izlənilən məsləhətlər və dərslikləri təqdim etməyə həsr olunub. İstər təcrübəli peşəkar, istərsə də yeni başlayan biri olmağınızdan asılı olmayaraq, Mayklın bloqu bu vacib proqram alətlərindən maksimum yararlanmaq üçün dəyərli fikirlər və praktiki məsləhətlər təklif edir.