Excel UDF ei tööta: probleemid ja lahendused

  • Jaga Seda
Michael Brown

Selles artiklis vaatleme probleeme, millega võite oma töövihikutes kohandatud funktsioonide kasutamisel kokku puutuda. Püüan näidata, mis neid põhjustab ja kuidas neid hõlpsasti lahendada.

Siin on see, millest me räägime:

    Varem rääkisime sellest, mis on kohandatud funktsioon, kuidas seda luua ja kasutada. Kui tunned, et sul on vaja eelnevalt värskendada põhiteadmisi UDF-idest, siis tee paus ja vaata läbi minu eelmine artikkel.

    Miks Excel UDF ei arvuta ümber?

    Kui teete oma töövihikus muudatusi, ei arvuta Excel uuesti kõiki seal olevaid valemeid. Ta uuendab ainult nende valemite tulemusi, mis on seotud muudetud lahtritega.

    Kuid see puudutab Exceli standardseid funktsioone. Mis puutub kohandatud funktsioonidesse, siis Excel ei saa VBA koodi kontrollida ja tuvastada teisi lahtreid, mis võivad samuti mõjutada kohandatud funktsiooni tulemust. Seetõttu ei pruugi teie kohandatud valem muutuda, kui te töövihikus muudatusi teete.

    Probleemi lahendamiseks peate lihtsalt kasutama funktsiooni Application.Volatile avaldus. Vaadake järgmist peatükki, et õppida samm-sammult, kuidas seda rakendada.

    Hõlmavad vs. mittehõlmavad kohandatud funktsioonid

    Vaikimisi ei ole Exceli kohandatud funktsioonid volatiilsed. See tähendab, et UDF arvutatakse ümber ainult siis, kui mõne lahtri väärtus, millele ta viitab, muutub. Kui aga lahtrite formaat, töölehe nimi, faili nimi muutub, siis UDFis muutusi ei toimu.

    Üleminek sõnadest näidete juurde. Näiteks on vaja kirjutada oma töövihiku nimi lahtrisse. Selleks loote kohandatud funktsiooni:

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

    Nüüd kujutage ette järgmist juhtumit. Te kirjutasite kohandatud valemi =WorkbookName() lahtrisse ja said seal faili nime. Mõne aja pärast otsustasid sa faili ümber nimetada ja salvestasid selle teise nimega. Kuid sa vaatad lahtris olevat väärtust ja näed, et see ei ole muutunud. Seal on endiselt vana faili nimi, mis ei ole enam õige.

    Kuna selles funktsioonis ei ole argumente, ei arvutata funktsiooni uuesti (isegi kui te muudate töövihiku nime, sulgete selle ja seejärel avate selle uuesti).

    Märkus. Kõigi failis olevate funktsioonide ümberarvutamiseks võite kasutada klahvikombinatsiooni Ctrl + Alt + F9.

    Kas on olemas lihtsam viis? Selleks, et valem arvutaks uuesti iga kord, kui tööleht muutub, on vaja täiendavat koodirida. Sisestage järgmine kooditükk oma funktsiooni algusesse:

    Application.Volatile

    Seega näeb teie kood välja selline:

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

    Nüüd on teie UDF muutuv, seega arvutatakse see automaatselt ümber, kui mõni lahter töölehel on ümber arvutatud või kui töövihikus on toimunud mõni muudatus. Niipea, kui muudate faili nime, näete seda uuendust kohe.

    Märkus. Pidage meeles, et liiga palju lenduvaid funktsioone võib Exceli aeglustada. On ju liiga palju kohandatud funktsioone, mis teevad keerulisi arvutusi ja töötavad pidevalt suurte andmevaldkondadega.

    Seetõttu soovitan kasutada volatiilsust ainult seal, kus seda tõesti vaja on.

    Miks kohandatud funktsioonid ei ole saadaval

    Kui sisestate kohandatud funktsiooni nime esimesed tähed, ilmub see sisendraku kõrval olevasse rippmenüüde loendisse, nagu tavalised Exceli funktsioonid.

    Siiski ei juhtu see alati. Millised vead võivad sellist olukorda põhjustada?

    Kui teil on Excel 2003-2007, siis UDF ei ilmu kunagi ripploendistikku. Seal näete ainult standardfunktsioone.

    Kuid isegi kui te kasutate Exceli uuemat versiooni, võite kogemata teha veel ühe vea.

    Näete, et kohandatud funktsioon peab olema standardses VBA moodulis nimega Moodulid. Kui lisate uue mooduli funktsiooni koodi kirjutamiseks, luuakse automaatselt kaust Moodulid, kuhu kõik moodulid kirjutatakse.

    Kuid mõnikord juhtub, et uut moodulit ei looda. Järgmisel ekraanipildil näete, et kohandatud funktsiooni kood on moodulis "Microsoft Excel Objects" koos ThisWorkbookiga.

    Küsimus on selles, et te ei saa paigutada kohandatud funktsiooni töölehe või töövihiku koodialasse. Sellisel juhul ei tööta funktsioon. Lisaks ei ilmu see funktsioonide ripploendistikku. Seetõttu peaks kood olema alati kaustas Moodulid .

    Exceli kohandatud funktsiooni abi teksti ei kuvata

    Teine probleem võib tekkida seoses vihjega, mida näete kohandatud funktsiooni kleepimisel. Kui kasutate standardfunktsiooni, näete alati funktsiooni ja selle argumentide kohta tööriistavihjet. Aga kuidas on UDF-ide puhul?

    Kui teil on palju kohandatud funktsioone, on teil äärmiselt raske meeles pidada, milliseid arvutusi igaüks neist teeb. Veelgi raskem on meeles pidada, milliseid argumente kasutada. Ma arvan, et on hea mõte omada oma kohandatud funktsioonide kirjeldust meeldetuletuseks.

    Selleks soovitan kasutada Application.MacroOptions meetod. See aitab teil näidata mitte ainult funktsiooni, vaid ka iga selle argumendi kirjeldust Funktsiooni viisardi aknas. Seda akent näete, kui vajutate valemiribal nupule Fx.

    Vaatame, kuidas lisada selline vihje oma UDF-i. Eelmises artiklis vaatlesime kohandatud funktsiooni GetMaxBetween. See leiab maksimaalse arvu määratud vahemikus ja võtab kolm argumenti: arvväärtuste vahemik ning maksimaalne ja minimaalne väärtus, mida otsida.

    Nüüd lisame sellele kohandatud funktsioonile kirjelduse. Selleks loome ja käivitame funktsiooni Application.MacroOptions käsk. GetMaxBetween funktsiooni, saate käivitada järgmise käsu:

    Sub RegisterUDF () Dim strFuncName As String 'registreeritava funktsiooni nimi Dim strDescr As String ' funktsiooni enda kirjeldus Dim strArgs () As String 'funktsiooni argumentide kirjeldus ' Registreeri GetMaxBetween funktsioon ReDim strArgs (1 To 3) 'Argumentide arv sinu funktsioonis strFuncName = "GetMaxBetween" strDescr = "Maksimaalne arv määratud vahemikus" strArgs (1) ="Numbriliste väärtuste vahemik" strArgs (2) = "Alumine intervallipiir " strArgs (3) = " Ülemine intervallipiir " Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ Category: = " My Custom Functions " End Sub

    või

    Sub RegisterUDF () Application.MacroOptions Makro: = "GetMaxBetween" , _ Description: = "Maksimaalne arv määratud vahemikus" , _ Category: = "Minu kohandatud funktsioonid" , _ ArgumentDescriptions: = Array (_ "Numbriliste väärtuste vahemik" , _ "Alumine intervallipiir" , _ "Ülemine intervallipiir" ) End Sub

    Muutuv str FuncName on funktsiooni nimi. strDescr - funktsiooni kirjeldus. strArgs muutujad sisaldavad vihjeid iga argumendi kohta.

    Te võite küsida, mis on neljas argument Application.MacroOptions'ile. See valikuline argument kannab nime Kategooria ja näitab Exceli funktsioonide klassi, mida meie kohandatud GetMaxBetween () Võite nimetada selle mis tahes olemasoleva kategooria järgi: Math & Trig, Statistical, Logical jne. Te võite määrata uue kategooria nime, kuhu te oma loodud funktsioonid paigutate. Kui te ei kasuta argumenti Category, siis paigutatakse kohandatud funktsioon automaatselt kategooriasse "User Defined".

    Sisestage funktsiooni kood mooduli aknasse:

    Seejärel klõpsake nupule "Run". Käsk teostab kõik seadistused, mis on vajalikud selleks, et kasutada Fx nuppu oma GetMaxBetween() funktsioon.

    Kui proovite sisestada funktsiooni lahtrisse, kasutades funktsiooni Sisestage funktsioon tööriist, näete, et seal on teie GetMaxBetween funktsioon on kategoorias "Minu kohandatud funktsioonid":

    Võite lihtsalt alustada funktsiooni nime sisestamist lahtrisse ja näete oma kohandatud funktsiooni valikuliste funktsioonide rippmenüüst, mille hulgast saate valida.

    Seejärel helistage Funktsiooni viisard Fx nupuga.

    Näpunäide. Funktsioonivõti avamiseks võite kasutada ka klahvikombinatsiooni CRTL + A.

    In the Funktsiooni viisard aknas näete oma funktsiooni kirjeldust ja vihjet esimese argumendi kohta. Kui asetate kursori teise või kolmanda argumendi kohale, näete ka nende kohta vihjeid.

    Kui soovite nende vihjete teksti muuta, siis muutke väärtusi väärtuste strDescr ja strArgs muutujaid RegisterUDF () kood. Seejärel käivitage RegisterUDF () käsk uuesti.

    Kui soovite tühistada kõik tehtud seadistused ja kustutada funktsiooni kirjelduse, käivitage see kood:

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

    On veel üks võimalus saada vihje, kui sisestate kohandatud funktsiooni. Sisestage funktsiooni nimi ja seejärel vajutage Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Näete nimekirja kõigist funktsiooni argumentidest:

    Kahjuks ei näe siin funktsiooni ja selle argumentide kirjeldust. Aga kui argumentide nimed on päris informatiivsed, siis võib neist ka abi olla. Siiski, see on parem kui mitte midagi :)

    Selleks, et luua UDF-idele intellisense, mis töötaks nagu tavalised Exceli funktsioonid, on vaja veidi rohkem tööd. Kahjuks ei paku Microsoft mingeid võimalusi. Ainus olemasolev lahendus on praegu Excel-DNA IntelliSense laiendus. Lisainfot leiad arendaja kodulehelt.

    Loodetavasti aitavad need juhised teil lahendada probleeme, kui teie kohandatud funktsioon ei tööta või ei tööta nii, nagu te tahaksite. Kui teie UDF siiski ei tööta, kirjeldage palun oma probleemi täpselt kommentaaride sektsioonis. Me püüame selle välja selgitada ja leida teile lahenduse ;)

    Michael Brown on pühendunud tehnoloogia entusiast, kelle kirg on tarkvaratööriistade abil keerukate protsesside lihtsustamine. Rohkem kui kümneaastase kogemusega tehnoloogiatööstuses on ta lihvinud oma oskusi Microsoft Excelis ja Outlookis, samuti Google Sheetsis ja Docsis. Michaeli ajaveebi eesmärk on jagada oma teadmisi ja teadmisi teistega, pakkudes hõlpsasti järgitavaid näpunäiteid ja õpetusi tootlikkuse ja tõhususe parandamiseks. Olenemata sellest, kas olete kogenud professionaal või algaja, pakub Michaeli ajaveebi väärtuslikke teadmisi ja praktilisi nõuandeid nende oluliste tarkvaratööriistade maksimaalseks kasutamiseks.