Excel UDF не работи: проблеми и решенија

  • Споделете Го Ова
Michael Brown

Во оваа статија, ќе ги разгледаме проблемите со кои може да се соочите кога користите приспособени функции во вашите работни книги. Ќе се обидам да ви покажам што ги предизвикува и колку лесно може да се решат.

Еве за што ќе зборуваме:

    Претходно зборувавме за тоа што прилагодена функција е, како да ја креирате и користите. Ако сметате дека треба претходно да го освежите основното знаење за UDF, направете пауза и погледнете ја мојата претходна статија.

    Зошто Excel UDF не пресметува повторно?

    Кога правите какви било промени во вашата работна книга, Excel нема повторно да ја пресмета секоја формула што ја имате таму. Ќе ги ажурира резултатите за оние формули што се поврзани само со променетите ќелии.

    Но, ова се однесува на стандардните функции на Excel. Што се однесува до прилагодените, Excel не може да го потврди кодот VBA и да идентификува други ќелии кои исто така би можеле да влијаат на резултатот од приспособената функција. Затоа, вашата приспособена формула може да не се промени кога правите промени во работната книга.

    За да го решите проблемот, само ќе треба да ја користите изјавата Application.Volatile . Проверете го следното поглавје за да ги научите чекор-по-чекор инструкциите за тоа како да го примените.

    Парливи наспроти неиспарливи сопствени функции

    Стандардно, приспособените функции во Excel не се испарливи. Ова значи дека UDF повторно се пресметува само ако се промени вредноста на која било од ќелиите на кои се однесува. Но, ако форматот на ќелиите, името наработниот лист, името на датотеката се смени, тогаш нема да има промени во UDF.

    Да се ​​префрлиме од зборови на примери. На пример, треба да го запишете името на вашата работна книга во ќелија. За да го направите ова, креирате приспособена функција:

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

    Сега замислете го следниот случај. Напишавте приспособена формула =Име на работна книга() во ќелијата и таму го добивте името на датотеката. За некое време, решивте да ја преименувате датотеката и ја зачувавте со друго име. Но, ја гледате вредноста во ќелијата и гледате дека таа не е променета. Сè уште има старо име на датотека што веќе не е точно.

    Бидејќи нема аргументи во оваа функција, функцијата не се пресметува повторно (дури и ако го промените името на работната книга, затворете ја и потоа повторно отворете тоа).

    Забелешка. За повторно пресметување на сите функции во вашата датотека, можете да ја користите кратенката Ctrl + Alt + F9.

    Има ли полесен начин? За да ја направите формулата да се пресметува повторно при секое менување на работниот лист, потребна ви е дополнителна линија код. Залепете го следниов дел од кодот на почетокот на вашата функција:

    Application.Volatile

    Значи, вашиот код ќе изгледа вака:

    Function WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name крајна функција

    Сега вашиот UDF е испарлив, па оттука ќе се пресметува повторно автоматски ако некоја ќелија во работниот листе повторно пресметано или настанала некаква промена во работната книга. Штом ќе го промените името на датотеката, веднаш ќе го видите тоа ажурирање.

    Забелешка. Ве молиме имајте на ум дека премногу испарливи функции може да го забават вашиот Excel. На крајот на краиштата, има премногу сопствени функции кои вршат сложени пресметки и постојано работат на големи опсези на податоци.

    Затоа, препорачувам да ја користите нестабилноста само онаму каде што е навистина потребно.

    Зошто сопствените функции не се достапни

    Кога ќе ги внесете првите букви од името на приспособена функција, се појавува во паѓачката листа до влезната ќелија, исто како и стандардните функции на Excel.

    Сепак, тоа не се случува секогаш. Кои грешки можат да ја предизвикаат оваа ситуација?

    Ако имате Excel 2003-2007, тогаш UDF никогаш не се појавува во паѓачката листа. Таму можете да ги видите само стандардните функции.

    Но, дури и ако користите понова верзија на Excel, постои друга грешка што може случајно да ја направите.

    Гледате, приспособената функција мора да биде во стандарден VBA модул наречен Модули. Кога додавате нов модул за да го напишете функцискиот код, автоматски се создава папка Modules во која се запишани сите модули.

    Но понекогаш се случува нов модул да не е создавање. На следната слика од екранот можете да видите дека приспособениот функциски код е во модулот „Microsoft Excel Objects“ заедно соОваа Работна книга.

    Поентата е дека не можете да поставите приспособена функција во областа со код на работен лист или работна книга. Во овој случај, функцијата нема да работи. Покрај тоа, нема да се појави во паѓачката листа на функции. Затоа, кодот секогаш треба да биде во папката Модули .

    Не се прикажува текстот за помош при приспособена функција на Excel

    Може да се појави друг проблем е навестувањето што го гледате кога ќе залепите прилагодена функција. Ако користите стандардна функција, секогаш ќе видите совет за алатката за функцијата и за нејзините аргументи. Но, што е со UDF-ите?

    Ако имате многу сопствени функции, ќе ви биде исклучително тешко да запомните какви пресметки прави секоја од нив. Ќе биде уште потешко да се запамети кои аргументи да се користат. Мислам дека ќе биде добра идеја да имате опис на вашите сопствени функции како потсетник.

    За ова, би предложил користење на методот Application.MacroOptions . Ќе ви помогне да го прикажете описот не само на функцијата, туку и на секој нејзин аргумент во прозорецот Function Wizard. Овој прозорец го гледате кога ќе кликнете на копчето Fx во лентата со формули.

    Ајде да видиме како да додадете таков совет на вашите UDF. Во претходната статија ја разгледавме прилагодената функција GetMaxBetween. Го наоѓа максималниот број во наведениот опсег и зема три аргументи: опсег на нумерички вредности и максимална и минимална вредност забарај.

    Сега ќе додадеме опис за оваа приспособена функција. За да го направите ова, креирајте и извршете ја командата Application.MacroOptions . За функцијата GetMaxBetween , можете да ја извршите следнава команда:

    Sub RegisterUDF () Dim strFuncName As String 'име на функцијата што сакате да ја регистрирате Dim strDescr As String' опис на функцијата самиот Затемнет strArgs () Како стринг 'опис на функциските аргументи' Регистрирајте ја функцијата GetMaxBetween ReDim strArgs (1 до 3) 'Број на аргументи во вашата функција strFuncName = "GetMaxBetween" strDescr = "Максимален број во наведениот опсег" strArgs (1) "Опсег на нумерички вредности" strArgs (2) = "Граница на долен интервал" strArgs (3) = "Горна граница на интервалот" Application.MacroOptions Макро: = strFuncName, _ Опис: = strDescr, _ Описи на аргументи: = strArgs, _ Категорија: = " My Custom Functions " End Sub

    или

    Sub RegisterUDF () Application.MacroOptions Макро: = "GetMaxBetween" , _ Опис: = "Максимален број во наведениот опсег" , _ Категорија: = "Мој Прилагодени функции" , _ АргументОписи: = Низа (_ „Опсег на нумерички вредности“ , _ „Понизок интервал bor der" , _ "Горна граница на интервалот" ) Крајна под

    Променлива str Име на функција е името на функцијата. strDescr - опис на функцијата. Променливите strArgs содржат совети за секој аргумент.

    Можеби се прашувате кој е четвртиот аргумент заАпликација.MacroOptions. Овој изборен аргумент е именуван Категорија и ја означува класата на функции на Excel во кои ќе биде поставена нашата прилагодена функција GetMaxBetween () . Можете да ја именувате по која било од постоечките категории: Математика и засилување ; Trig, Statistical, Logical итн. Можете да наведете име за новата категорија во која ќе ги поставите функциите што ги креирате. Ако не го користите аргументот Категорија, тогаш приспособената функција автоматски ќе се смести во категоријата „Дефинирано од корисникот“.

    Залепете го кодот на функцијата во прозорецот на модулот:

    Потоа кликнете на копчето „Стартувај“. Командата ќе ги изврши сите поставки за користење на копчето Fx со вашата функција GetMaxBetween() .

    Ако се обидете да вметнете функција во ќелија користејќи го Вметни функција алатката, ќе видите дека вашата функција GetMaxBetween е во категоријата „Мои прилагодени функции“:

    Вие може едноставно да започне да го пишува името на функцијата во ќелијата и ќе ја видите вашата приспособена функција во паѓачката листа на функции од кои треба да изберете.

    Потоа повикајте го Волшебникот за функции со копчето Fx.

    Совет. Можете исто така да ја користите комбинацијата на копчиња CRTL + A за да го отворите Волшебникот за функции.

    Во прозорецот Function Wizard ќе видите опис на вашата функција, како и навестување за првиот аргумент. Ако го поставите курсорот надвториот или третиот аргумент, ќе видите и совети за нив.

    Ако сакате да го промените текстот на овие совети, променете ги вредностите на strDescr и strArgs променливи во кодот RegisterUDF () . Потоа повторно извршете ја командата RegisterUDF () .

    Ако сакате да ги вратите сите направени поставки и да го исчистите описот на функцијата, извршете го овој код:

    Sub UnregisterUDF () Application.MacroOptions Макро: = "GetMaxBetween" , _ Опис: = Празен , АргументОписи: = Празен , Категорија: = Празен крај Под

    Има уште еден начин да добиете совет кога внесувате приспособена функција. Внесете го името на функцијата и потоа притиснете Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Ќе видите список со сите аргументи на функцијата:

    За жал, овде нема да го видите описот на функцијата и нејзините аргументи. Но, ако имињата на аргументите се прилично информативни, па и тие би можеле да бидат корисни. Сепак, подобро е од ништо :)

    Ќе биде потребно малку повеќе работа за да се создаде интелигенција за UDF-и кои работат како стандардните функции на Excel. За жал, Microsoft не дава никакви опции. Единственото достапно решение во моментов е екстензија на Excel-DNA IntelliSense. Можете да најдете повеќе информации на веб-локацијата на развивачот.

    Се надеваме дека овие упатства ќе ви помогнат да ги решите проблемите кога вашата приспособена функција не работи или не работиработи како што сакаш. Меѓутоа, ако вашиот UDF сè уште не работи, ве молиме прецизно опишете го вашиот проблем во делот за коментари. Ќе се обидеме да го откриеме и да го најдеме решението за вас ;)

    Мајкл Браун е посветен технолошки ентузијаст со страст за поедноставување на сложените процеси користејќи софтверски алатки. Со повеќе од една деценија искуство во технолошката индустрија, тој ги усоврши своите вештини во Microsoft Excel и Outlook, како и Google Sheets и Docs. Блогот на Мајкл е посветен на споделување на своето знаење и експертиза со другите, обезбедувајќи лесни за следење совети и упатства за подобрување на продуктивноста и ефикасноста. Без разлика дали сте искусен професионалец или почетник, блогот на Мајкл нуди вредни сознанија и практични совети за да го извлечете максимумот од овие основни софтверски алатки.