Excel UDF nedarbojas: problēmas un risinājumi

  • Dalīties Ar Šo
Michael Brown

Šajā rakstā aplūkosim problēmas, ar kurām varat saskarties, izmantojot pielāgotās funkcijas darbgrāmatā. Mēģināšu parādīt, kas tās izraisa un kā tās var viegli atrisināt.

Lūk, par ko mēs runāsim:

    Iepriekš mēs runājām par to, kas ir pielāgota funkcija, kā to izveidot un izmantot. Ja jums šķiet, ka pirms tam nepieciešams atsvaidzināt pamatzināšanas par UDF, pakavējieties un izlasiet manu iepriekšējo rakstu.

    Kāpēc Excel UDF netiek pārrēķināts?

    Veicot izmaiņas darbgrāmatā, Excel nepārrēķinās katru izmantoto formulu. Tā atjauninās rezultātus tikai tām formulām, kas ir saistītas ar mainītajām šūnām.

    Taču tas attiecas uz standarta Excel funkcijām. Attiecībā uz pielāgotajām funkcijām Excel nevar pārbaudīt VBA kodu un identificēt citas šūnas, kas arī varētu ietekmēt pielāgotās funkcijas rezultātu. Tāpēc, veicot izmaiņas darbgrāmatā, pielāgotā formula var nemainīties.

    Lai atrisinātu šo problēmu, jums būs vienkārši jāizmanto Pieteikums.Gaistošs Pārbaudiet nākamo nodaļu, lai uzzinātu soli pa solim, kā to piemērot.

    Gaistošas un negaistošas pielāgotās funkcijas

    Pēc noklusējuma pielāgotās funkcijas programmā Excel nav gaistošas. Tas nozīmē, ka UDF tiek pārrēķināta tikai tad, ja mainās kādas šūnas vērtība, uz kuru tā attiecas. Bet, ja mainās šūnu formāts, darblapas nosaukums, faila nosaukums, UDF netiks mainīta.

    Pāriesim no vārdiem uz piemēriem. Piemēram, jums ir nepieciešams kādā šūnā ierakstīt darbgrāmatas nosaukumu. Lai to izdarītu, izveidojiet pielāgotu funkciju:

    Funkcija WorkbookName() As String WorkbookName = ThisWorkbook.Name Beigu funkcija

    Tagad iedomājieties šādu gadījumu. Jūs uzrakstījāt pielāgotu formulu =Darba grāmatas nosaukums() šūnā un tur iegūstat faila nosaukumu. Pēc kāda laika esat nolēmis pārdēvēt failu un saglabājis to ar citu nosaukumu. Bet jūs paskatāties uz vērtību šūnā un redzat, ka tā nav mainījusies. Tur joprojām ir vecais faila nosaukums, kas vairs nav pareizs.

    Tā kā šajā funkcijā nav argumentu, funkcija netiek pārrēķināta (pat tad, ja tiek mainīts darbgrāmatas nosaukums, tā tiek aizvērta un pēc tam atkal atvērta).

    Piezīme. Lai pārrēķinātu visas faila funkcijas, varat izmantot saīsni Ctrl + Alt + F9.

    Vai ir vieglāks veids? Lai formula pārrēķinātos katru reizi, kad mainās darblapa, ir nepieciešama papildu koda rinda. Funkcijas sākumā ielīmējiet šādu koda daļu:

    Pieteikums.Gaistošs

    Tādējādi jūsu kods izskatīsies šādi:

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

    Tagad jūsu UDF ir mainīgs, tāpēc tas tiks pārrēķināts automātiski, ja darblapā tiks pārrēķināta kāda šūna vai darbgrāmatā būs notikušas kādas izmaiņas. Tiklīdz mainīsiet faila nosaukumu, nekavējoties redzēsiet šo atjauninājumu.

    Piezīme. Lūdzu, paturiet prātā, ka pārāk daudz gaistošo funkciju var palēnināt Excel darbību. Galu galā ir pārāk daudz pielāgotu funkciju, kas veic sarežģītus aprēķinus un nepārtraukti darbojas ar lieliem datu diapazoniem.

    Tāpēc es iesaku svārstīgumu izmantot tikai tad, kad tas patiešām ir nepieciešams.

    Kāpēc pielāgotās funkcijas nav pieejamas

    Ievadot pielāgotās funkcijas nosaukuma pirmos burtus, tā tiek parādīta nolaižamajā sarakstā blakus ievades šūnai tāpat kā standarta Excel funkcijas.

    Tomēr ne vienmēr tā notiek. Kādas kļūdas var izraisīt šādu situāciju?

    Ja jums ir Excel 2003-2007, tad UDF nekad netiek parādīts nolaižamajā sarakstā. Tajā var redzēt tikai standarta funkcijas.

    Taču, pat ja izmantojat jaunāku Excel versiju, varat nejauši pieļaut vēl vienu kļūdu.

    Redziet, pielāgotajai funkcijai ir jāatrodas standarta VBA modulī Modules. Kad pievienojat jaunu moduli, lai ierakstītu funkcijas kodu, automātiski tiek izveidota mape Modules, kurā tiek ierakstīti visi moduļi.

    Taču dažreiz gadās, ka jauns modulis netiek izveidots. Nākamajā ekrānšāviņas attēlā redzams, ka pielāgotās funkcijas kods ir modulī "Microsoft Excel Objects" kopā ar ThisWorkbook.

    Runa ir par to, ka pielāgotu funkciju nevarat ievietot darblapas vai darbgrāmatas koda apgabalā. Šādā gadījumā funkcija nedarbosies. Turklāt tā netiks parādīta funkciju izlaižamajā sarakstā. Tāpēc kodam vienmēr jāatrodas mapē. Moduļi .

    Excel pielāgotās funkcijas palīdzības teksts netiek parādīts

    Vēl viena problēma var rasties saistībā ar mājienu, ko redzat, ielīmējot pielāgotu funkciju. Ja izmantojat standarta funkciju, vienmēr redzēsiet rīkjoslu par funkciju un tās argumentiem. Bet kā ir ar UDF?

    Ja jums ir daudz pielāgotu funkciju, jums būs ārkārtīgi grūti atcerēties, kādus aprēķinus katra no tām veic. Vēl grūtāk būs atcerēties, kādus argumentus izmantot. Manuprāt, būtu labi, ja jūsu pielāgotās funkcijas tiktu aprakstītas kā atgādinājums.

    Šim nolūkam es ieteiktu izmantot Application.MacroOptions metode. Tas palīdzēs parādīt ne tikai funkcijas, bet arī katra tās argumenta aprakstu funkcijas vedņa logā. Šo logu redzat, kad formulas joslā noklikšķināt uz pogas Fx.

    Apskatīsim, kā pievienot šādu mājienu savām UDF. Iepriekšējā rakstā aplūkojām pielāgoto funkciju GetMaxBetween. Tā atrod maksimālo skaitli norādītajā diapazonā un izmanto trīs argumentus: skaitlisko vērtību diapazonu, kā arī maksimālo un minimālo vērtību, ko meklēt.

    Tagad mēs pievienosim šīs pielāgotās funkcijas aprakstu. Lai to izdarītu, izveidojiet un palaidiet Application.MacroOptions komandu. Attiecībā uz GetMaxBetween funkciju, varat palaist šādu komandu:

    Sub RegisterUDF () Dim strFuncName As String 'tās funkcijas nosaukums, kuru vēlaties reģistrēt Dim strDescr As String ' pašas funkcijas apraksts Dim strArgs () As String 'funkcijas argumentu apraksts ' Reģistrēt funkciju GetMaxBetween ReDim strArgs (1 To 3) 'Argumentu skaits jūsu funkcijā strFuncName = "GetMaxBetween" strDescr = "Maksimālais skaits norādītajā diapazonā" strArgs (1) ="Skaitlisko vērtību diapazons" strArgs (2) = "Apakšējā intervāla robeža " strArgs (3) = " Augšējā intervāla robeža " Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ Category: = " My Custom Functions " End Sub

    vai

    Sub RegisterUDF () Application.MacroOptions Makro: = "GetMaxBetween" , _ Description: = "Maksimālais skaitlis norādītajā diapazonā" , _ Category: = "Manas pielāgotās funkcijas" , _ ArgumentDescriptions: = Array (_ "Skaitlisko vērtību diapazons" , _ "Apakšējā intervāla robeža" , _ "Augšējā intervāla robeža" ) End Sub

    Mainīgs str FuncName ir funkcijas nosaukums. strDescr - funkcijas apraksts. strArgs mainīgajos ir norādes par katru argumentu.

    Jums var rasties jautājums, kas ir ceturtais arguments Application.MacroOptions. Šis izvēles arguments ir nosaukts par Kategorija un norāda Excel funkciju klasi, ko mūsu pielāgotā GetMaxBetween () Varat to nosaukt pēc jebkuras no esošajām kategorijām: Math & amp; Trig, Statistical, Logical u. c. Varat norādīt nosaukumu jaunajai kategorijai, kurā tiks ievietotas jūsu izveidotās funkcijas. Ja neizmantosiet argumentu Category, pielāgotā funkcija automātiski tiks ievietota kategorijā "User Defined".

    Ielīmējiet funkcijas kodu moduļa logā:

    Pēc tam noklikšķiniet uz pogas "Palaist". Komanda veiks visus iestatījumus, lai izmantotu Fx pogu ar GetMaxBetween() funkcija.

    Ja mēģināt ievietot funkciju šūnā, izmantojot Ievietot funkciju rīku, redzēsiet, ka ir jūsu GetMaxBetween funkcija atrodas kategorijā "Manas pielāgotās funkcijas":

    Varat vienkārši sākt ievadīt funkcijas nosaukumu šūnā, un nolaižamajā funkciju sarakstā redzēsiet savu pielāgoto funkciju, no kuras varat izvēlēties.

    Pēc tam izsauciet Funkciju vednis ar pogu Fx.

    Padoms. Funkciju vedni var atvērt arī ar taustiņu kombināciju CRTL + A.

    In the Funkciju vednis logā redzēsiet savas funkcijas aprakstu, kā arī mājienu par pirmo argumentu. Ja novietosiet kursoru virs otrā vai trešā argumenta, redzēsiet arī mājienus par tiem.

    Ja vēlaties mainīt šo mājienu tekstu, mainiet vērtību strDescr un strArgs mainīgie RegisterUDF () kodu. Pēc tam palaidiet RegisterUDF () vēlreiz izpildiet komandu.

    Ja vēlaties atcelt visus iestatījumus un dzēst funkcijas aprakstu, izpildiet šo kodu:

    Sub UnregisterUDF () Application.MacroOptions Makro: = "GetMaxBetween" , _ Description: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    Ir vēl viens veids, kā saņemt mājienu, kad ievadāt pielāgotu funkciju. Ievadiet funkcijas nosaukumu un pēc tam nospiediet taustiņus Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Tiek parādīts saraksts ar visiem funkcijas argumentiem:

    Diemžēl šeit jūs neredzēsiet funkcijas un tās argumentu aprakstu. Bet, ja argumentu nosaukumi ir diezgan informatīvi, tad arī tie varētu būt noderīgi. Tomēr tas ir labāk nekā nekas :)

    Būs nepieciešams nedaudz vairāk darba, lai izveidotu inteliģences paplašinājumu UDF, kas darbojas kā standarta Excel funkcijas. Diemžēl Microsoft nesniedz nekādas iespējas. Pašlaik vienīgais pieejamais risinājums ir Excel-DNA IntelliSense paplašinājums. Vairāk informācijas var atrast izstrādātāja vietnē.

    Cerams, ka šīs vadlīnijas palīdzēs jums atrisināt problēmas, kad jūsu pielāgotā funkcija nedarbojas vai nedarbojas tā, kā jūs vēlētos. Ja tomēr jūsu UDF joprojām nedarbojas, lūdzu, precīzi aprakstiet savu problēmu komentāru sadaļā. Mēs centīsimies to noskaidrot un atrast risinājumu jūsu vietā ;)

    Maikls Brauns ir īpašs tehnoloģiju entuziasts, kura aizraušanās ir sarežģītu procesu vienkāršošana, izmantojot programmatūras rīkus. Ar vairāk nekā desmit gadu pieredzi tehnoloģiju nozarē viņš ir pilnveidojis savas prasmes programmās Microsoft Excel un Outlook, kā arī Google izklājlapās un dokumentos. Maikla emuārs ir veltīts tam, lai dalītos savās zināšanās un pieredzē ar citiem, sniedzot viegli izpildāmus padomus un pamācības produktivitātes un efektivitātes uzlabošanai. Neatkarīgi no tā, vai esat pieredzējis profesionālis vai iesācējs, Maikla emuārs piedāvā vērtīgas atziņas un praktiskus padomus, kā maksimāli izmantot šos būtiskos programmatūras rīkus.