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

    Енді келесі жағдайды елестетіңіз. Сіз ұяшыққа =Жұмыс кітабының аты() теңшелетін формуласын жазып, файл атауын сол жерден алдыңыз. Біраз уақыттан кейін сіз файлдың атын өзгертуді шешіп, оны басқа атпен сақтадыңыз. Бірақ сіз ұяшықтағы мәнге қарап, оның өзгермегенін көресіз. Әлі де дұрыс емес ескі файл атауы бар.

    Бұл функцияда аргументтер жоқ болғандықтан, функция қайта есептелмейді (тіпті жұмыс кітабының атын өзгертіп, оны жауып, қайта ашсаңыз да) it).

    Ескерту. Файлдағы барлық функцияларды қайта есептеу үшін Ctrl + Alt + F9 пернелер тіркесімін пайдалануға болады.

    Оңай жолы бар ма? Жұмыс парағы өзгерген сайын формуланы қайта есептеу үшін сізге қосымша код жолы қажет. Функцияңыздың басына келесі код бөлігін қойыңыз:

    Application.Volatile

    Сонымен, сіздің кодыңыз келесідей болады:

    Функция WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Функциясы

    Енді UDF өзгермелі, сондықтан жұмыс парағында кез келген ұяшық болса, ол автоматты түрде қайта есептеледі.қайта есептелді немесе жұмыс кітабында кез келген өзгеріс орын алды. Файлдың атын өзгерткен бойда ол жаңартуды бірден көресіз.

    Ескертпе. Тым көп өзгермелі функциялар Excel жұмысын баяулататынын есте сақтаңыз. Өйткені, күрделі есептеулерді орындайтын және үлкен деректер ауқымында үздіксіз жұмыс істейтін реттелетін функциялар тым көп.

    Сондықтан мен құбылмалылықты шынымен қажет жерде ғана пайдалануды ұсынамын.

    Неліктен реттелетін функциялар қолжетімсіз?

    Теңшелетін функция атауының бірінші әріптерін енгізген кезде, ол пайда болады. стандартты Excel функциялары сияқты енгізу ұяшығының жанындағы ашылмалы тізімде.

    Бірақ бұл әрқашан бола бермейді. Бұл жағдайды қандай қателер тудыруы мүмкін?

    Егер сізде Excel 2003-2007 болса, UDF ашылмалы тізімде ешқашан көрсетілмейді. Онда сіз тек стандартты функцияларды көре аласыз.

    Бірақ Excel бағдарламасының жаңарақ нұсқасын пайдалансаңыз да, байқаусызда тағы бір қате жіберіп алуыңыз мүмкін.

    Көріп отырсыз, реттелетін функция мына жерде болуы керек. модульдер деп аталатын стандартты VBA модулі. Функция кодын жазу үшін жаңа модульді қосқанда, барлық модульдер жазылатын Модульдер қалтасы автоматты түрде жасалады.

    Бірақ кейде жаңа модуль жоқ болып қалады. құрылу. Келесі скриншотта теңшелетін функция коды «Microsoft Excel нысандары» модулінде жәнеБұл жұмыс кітабы.

    Мәселе мынада: жұмыс парағының немесе жұмыс кітабының код аймағына теңшелетін функцияны орналастыру мүмкін емес. Бұл жағдайда функция жұмыс істемейді. Сонымен қатар, ол функциялардың ашылмалы тізімінде пайда болмайды. Сондықтан код әрқашан Модульдер қалтасында болуы керек.

    Excel реттелетін функциясының анықтама мәтіні көрсетілмейді

    Тағы бір мәселе қою кезінде көретін кеңес болуы мүмкін. теңшелетін функция. Стандартты функцияны пайдалансаңыз, әрқашан функция мен оның аргументтері үшін құралдар кеңесін көресіз. Бірақ UDF туралы не деуге болады?

    Егер сізде көптеген реттелетін функциялар болса, олардың әрқайсысы қандай есептеулер жасайтынын есте сақтау өте қиын болады. Қай аргументтерді қолдану керектігін есте сақтау одан да қиын болады. Еске салғыш ретінде реттелетін функцияларыңыздың сипаттамасын алу жақсы идея деп ойлаймын.

    Ол үшін мен Application.MacroOptions әдісін пайдалануды ұсынамын. Бұл функция шебері терезесінде функцияның ғана емес, сонымен қатар оның әрбір аргументінің сипаттамасын көрсетуге көмектеседі. Формула жолағындағы Fx түймесін басқан кезде сіз бұл терезені көресіз.

    Ондай кеңесті UDF файлдарына қалай қосу керектігін көрейік. Алдыңғы мақалада біз GetMaxBetween теңшелетін функциясын қарастырдық. Ол көрсетілген диапазондағы ең көп санды табады және үш аргументті қабылдайды: сандық мәндер ауқымы және ең үлкен және ең төменгі мәніздеңіз.

    Енді осы реттелетін функцияның сипаттамасын қосамыз. Ол үшін Application.MacroOptions пәрменін жасап, іске қосыңыз. GetMaxBetween функциясы үшін келесі пәрменді орындауға болады:

    Sub RegisterUDF () Dim strFuncName As String 'тіркелгіңіз келетін функцияның атауы Dim strDescr Жол ретінде ' функцияның сипаттамасы өзі Dim strArgs () As String 'функция аргументтерінің сипаттамасы ' GetMaxBetween функциясын тіркеңіз ReDim strArgs (1-ден 3-ке дейін) 'Функцияңыздағы аргументтердің саны strFuncName = "GetMaxBetween" strDescr = "Көрсетілген ең көп сан"str =Arg ішінде" "Сандық мәндер ауқымы" strArgs (2) = "Төменгі интервал шекарасы " strArgs (3) = " Жоғарғы интервал шекарасы " Application.MacroOptions Макро: = strFuncName, _ Сипаттама: = strDescr, _ ArgumentDescriptions: = strArgs, _ Санат: = " Менің теңшелетін функцияларым " End Sub

    немесе

    Sub RegisterUDF () Application.MacroOptions Макрос: = "GetMaxBetween" , _ Сипаттама: = "Көрсетілген ауқымдағы ең көп сан" , _ Санат: = "Менің Теңшелетін функциялар" , _ ArgumentDescriptions: = Массив (_ "Сандық мәндер ауқымы" , _ "Төменгі интервал der" , _ "Жоғарғы интервал шекарасы" ) End Sub

    Айнымалы str FuncName - функцияның аты. strDescr - функцияның сипаттамасы. strArgs айнымалылары әрбір аргументке арналған кеңестерді қамтиды.

    Сізге төртінші аргумент не екенін қызықтыруыңыз мүмкін.Application.MacroOptions. Бұл қосымша аргумент Category деп аталады және біздің теңшелетін GetMaxBetween () функциясы орналасатын Excel функцияларының сыныбын көрсетеді. Оны бар санаттардың кез келгенінен кейін атауға болады: Math & ; Trig, Statistical, Logical, т.б. Жасалатын функцияларды орналастыратын жаңа санат үшін атауды көрсетуге болады. Санат аргументін пайдаланбасаңыз, реттелетін функция автоматты түрде «Пайдаланушы анықтаған» санатына орналастырылады.

    Функция кодын модуль терезесіне қойыңыз:

    Одан кейін «Іске қосу» түймесін басыңыз. Пәрмен GetMaxBetween() функциясымен Fx түймешігін пайдаланудың барлық параметрлерін орындайды.

    Егер функцияны <арқылы ұяшыққа кірістіруге әрекет жасасаңыз. 6>Функцияны кірістіру құралы, сіз өзіңіздің GetMaxBetween функцияңыздың «Менің теңшелетін функцияларым» санатында екенін көресіз:

    Сіз жай ғана ұяшыққа функция атауын теруді бастауға болады, сонда сіз таңдалатын функциялардың ашылмалы тізімінде реттелетін функцияны көресіз.

    Одан кейін Функция шеберіне қоңырау шалыңыз. Fx түймесімен.

    Кеңес. Функция шеберін ашу үшін CRTL + A пернелер тіркесімін де пайдалануға болады.

    Функция шебері терезесінде сіз өзіңіздің функцияңыздың сипаттамасын, сондай-ақ бірінші аргументке арналған кеңесті көресіз. Курсорды үстіне қойсаңызекінші немесе үшінші аргумент болса, олар үшін кеңестерді де көресіз.

    Егер осы кеңестердің мәтінін өзгерткіңіз келсе, strDescr және strArgs<мәндерін өзгертіңіз. 7> айнымалылар RegisterUDF () кодында. Содан кейін RegisterUDF () пәрменін қайта іске қосыңыз.

    Егер барлық жасалған параметрлерді қайтарып, функция сипаттамасын өшіргіңіз келсе, мына кодты іске қосыңыз:

    SubregisterUDF () Application.MacroOptions Макрос: = "GetMaxBetween" , _ Сипаттама: = Бос , ArgumentDescriptions: = Бос , Санат: = Бос End Sub

    Теңшелетін функцияны енгізген кезде кеңес алудың тағы бір жолы бар. Функцияның атын енгізіп, Ctrl + Shift + A пернелерін басыңыз :

    =GetMaxBetween( + Ctrl + Shift + A

    Функцияның барлық аргументтерінің тізімін көресіз:

    Өкінішке орай, бұл жерде сіз функцияның сипаттамасын және оның аргументтерін көрмейсіз. Бірақ аргументтердің атаулары өте ақпараттандыратын болса, олар да пайдалы болуы мүмкін. Дегенмен, бұл ештеңеден жақсы :)

    Стандартты Excel функциялары сияқты жұмыс істейтін UDF үшін intellisense жасау үшін біраз жұмыс қажет. Өкінішке орай, Microsoft ешқандай опцияны ұсынбайды. Қазіргі уақытта қол жетімді жалғыз шешім Excel-DNA IntelliSense кеңейтімі болып табылады. Қосымша ақпаратты әзірлеушінің веб-сайтынан таба аласыз.

    Бұл нұсқаулықтар реттелетін функция жұмыс істемегенде немесе істемегенде мәселелерді шешуге көмектеседі деп үміттенеміз.қалағаныңызша жұмыс жасаңыз. Дегенмен, UDF әлі де жұмыс істемесе, Пікірлер бөлімінде мәселеңізді дәл сипаттаңыз. Біз оны анықтауға және сіз үшін шешімін табуға тырысамыз ;)

    Майкл Браун - бағдарламалық құралдарды пайдалана отырып, күрделі процестерді жеңілдетуге құмарлығы бар арнайы технология әуесқойы. Технологиялық индустрияда он жылдан астам тәжірибесі бар ол Microsoft Excel және Outlook, сондай-ақ Google Sheets және Docs бағдарламаларында өз дағдыларын жетілдірді. Майклдың блогы өз білімі мен тәжірибесін басқалармен бөлісуге, өнімділік пен тиімділікті арттыруға арналған оңай орындалатын кеңестер мен оқулықтар беруге арналған. Сіз тәжірибелі кәсіпқой болсаңыз да, жаңадан бастаушы болсаңыз да, Майклдың блогы осы маңызды бағдарламалық құралдарды барынша пайдалану үшін құнды түсініктер мен практикалық кеңестер ұсынады.