Excel UDF ne radi: problemi i rješenja

  • Podijeli Ovo
Michael Brown

U ovom članku ćemo pogledati probleme s kojima se možete suočiti kada koristite prilagođene funkcije u svojim radnim knjigama. Pokušat ću vam pokazati šta ih uzrokuje i kako se lako mogu riješiti.

Evo o čemu ćemo razgovarati:

    Ranije smo razgovarali o tome šta prilagođena funkcija je kako je kreirati i koristiti. Ako smatrate da morate unaprijed osvježiti osnovno znanje o UDF-ovima, napravite pauzu i pogledajte moj prethodni članak.

    Zašto se Excel UDF ne izračunava ponovo?

    Kada izvršite bilo kakve promjene u u radnoj svesci, Excel neće preračunati svaku formulu koju tamo imate. Ažuriraće rezultate za one formule koje su povezane samo s promijenjenim ćelijama.

    Ali ovo se odnosi na standardne Excel funkcije. Što se tiče prilagođenih, Excel ne može potvrditi VBA kod i identificirati druge ćelije koje bi također mogle utjecati na rezultat prilagođene funkcije. Stoga se vaša prilagođena formula možda neće promijeniti kada unesete promjene u radnu knjigu.

    Da biste riješili problem, trebat ćete samo koristiti naredbu Application.Volatile . Pogledajte sljedeće poglavlje kako biste naučili korak po korak upute o tome kako ga primijeniti.

    Vlatilne naspram nepromjenjivih prilagođenih funkcija

    Prema zadanim postavkama, prilagođene funkcije u Excelu nisu promjenjive. To znači da se UDF ponovo izračunava samo ako se promijeni vrijednost bilo koje ćelije na koju se odnosi. Ali ako je format ćelija, imeradni list, naziv datoteke se promijeni, tada se neće dogoditi nikakve promjene u UDF-u.

    Pređimo s riječi na primjere. Na primjer, trebate zapisati naziv svoje radne knjige u ćeliju. Da biste to učinili, kreirate prilagođenu funkciju:

    Funkcija Naziv radne knjige() Kao niz Ime radne knjige = ThisWorkbook.Name Kraj funkcije

    Sada zamislite sljedeći slučaj. Napisali ste prilagođenu formulu =WorkbookName() u ćeliju i tamo dobili naziv datoteke. Ubrzo ste odlučili da preimenujete datoteku i sačuvali ste je pod drugim imenom. Ali pogledate vrijednost u ćeliji i vidite da se nije promijenila. Još uvijek postoji staro ime datoteke koje više nije ispravno.

    Pošto u ovoj funkciji nema argumenata, funkcija se ne izračunava ponovo (čak i ako promijenite naziv radne knjige, zatvorite je, a zatim ponovo otvorite to).

    Napomena. Da biste ponovo izračunali sve funkcije u datoteci, možete koristiti prečicu Ctrl + Alt + F9.

    Postoji li lakši način? Da bi se formula ponovo izračunavala svaki put kada se radni list promijeni, potreban vam je dodatni red koda. Zalijepite sljedeći dio koda na početak svoje funkcije:

    Application.Volatile

    Dakle, vaš će kod izgledati ovako:

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

    Sada je vaš UDF promjenjiv, stoga će se automatski ponovo izračunati ako bilo koja ćelija na radnom listuje preračunato ili je došlo do bilo kakve promjene u radnoj knjižici. Čim promijenite ime datoteke, odmah ćete vidjeti to ažuriranje.

    Napomena. Imajte na umu da previše nestabilnih funkcija može usporiti vaš Excel. Na kraju krajeva, postoji previše prilagođenih funkcija koje izvode složene proračune i kontinuirano rade na velikim rasponima podataka.

    Stoga, preporučujem korištenje volatilnosti samo tamo gdje je zaista potrebno.

    Zašto prilagođene funkcije nisu dostupne

    Kada unesete prva slova imena prilagođene funkcije, pojavljuje se na padajućoj listi pored ćelije za unos, baš kao i standardne Excel funkcije.

    Međutim, to se ne događa uvijek. Koje greške mogu uzrokovati ovu situaciju?

    Ako imate Excel 2003-2007, onda se UDF nikada ne pojavljuje na padajućoj listi. Tamo možete vidjeti samo standardne funkcije.

    Ali čak i ako koristite noviju verziju Excela, postoji još jedna greška koju možete slučajno napraviti.

    Vidite, prilagođena funkcija mora biti u standardni VBA modul koji se zove Moduli. Kada dodate novi modul za pisanje koda funkcije, automatski se kreira folder Moduli u koji su upisani svi moduli.

    Ali ponekad se desi da novi modul nije stvaranjem. Na sljedećem snimku ekrana možete vidjeti da se kod prilagođene funkcije nalazi u modulu “Microsoft Excel Objects” zajedno saOva radna sveska.

    Poenta je da ne možete postaviti prilagođenu funkciju u područje koda radnog lista ili radne knjige. U ovom slučaju funkcija neće raditi. Štaviše, neće se pojaviti na padajućoj listi funkcija. Stoga bi kod uvijek trebao biti u mapi Moduli .

    Tekst pomoći za prilagođenu funkciju Excel nije prikazan

    Može se pojaviti još jedan problem je savjet koji vidite kada zalijepite prilagođena funkcija. Ako koristite standardnu ​​funkciju, uvijek ćete vidjeti opis za funkciju i njene argumente. Ali što je s UDF-ovima?

    Ako imate puno prilagođenih funkcija, bit će vam izuzetno teško zapamtiti koje proračune svaka od njih radi. Biće još teže zapamtiti koje argumente koristiti. Mislim da bi bilo dobro imati opis vaših prilagođenih funkcija kao podsjetnik.

    Za ovo, predlažem korištenje metode Application.MacroOptions . Pomoći će vam da prikažete opis ne samo funkcije već i svakog od njenih argumenata u prozoru čarobnjaka za funkcije. Ovaj prozor vidite kada kliknete na dugme Fx u traci formule.

    Hajde da vidimo kako da dodate takav nagoveštaj vašim UDF-ovima. U prethodnom članku pogledali smo prilagođenu funkciju GetMaxBetween. Pronalazi maksimalni broj u navedenom rasponu i uzima tri argumenta: raspon numeričkih vrijednosti i maksimalnu i minimalnu vrijednost zatraži.

    Sada ćemo dodati opis za ovu prilagođenu funkciju. Da biste to učinili, kreirajte i pokrenite naredbu Application.MacroOptions . Za funkciju GetMaxBetween , možete pokrenuti sljedeću naredbu:

    Sub RegisterUDF () Dim strFuncName As String 'ime funkcije koju želite registrirati Dim strDescr As String ' opis funkcije sama Dim strArgs () As String 'opis argumenata funkcije ' Registrirajte GetMaxBetween funkciju ReDim strArgs (1 do 3) 'Broj argumenata u vašoj funkciji strFuncName = "GetMaxBetween" strDescr = "Maksimalni broj u navedenom rasponu" strArgs (1) = "Raspon numeričkih vrijednosti" strArgs (2) = "Donja granica intervala " strArgs (3) = " Gornja granica intervala " Application.MacroOptions Makro: = strFuncName, _ Opis: = strDescr, _ Opisi argumenata: = strArgs, _ Kategorija: = " Moje prilagođene funkcije " End Sub

    ili

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Opis: = "Maksimalni broj u navedenom rasponu" , _ Kategorija: = "Moj Prilagođene funkcije" , _ ArgumentDescriptions: = Niz (_ "Raspon numeričkih vrijednosti" , _ "Donji interval bor der" , _ "Gornja granica intervala" ) Kraj Sub

    Varijabla str FuncName je naziv funkcije. strDescr - opis funkcije. Varijable strArgs sadrže nagovještaje za svaki argument.

    Možete se zapitati koji je četvrti argument zaApplication.MacroOptions. Ovaj neobavezni argument nosi naziv Kategorija i označava klasu Excel funkcija u koju će biti smještena naša prilagođena funkcija GetMaxBetween () . Možete je imenovati prema bilo kojoj od postojećih kategorija: Math & ; Trig, Statistical, Logical, itd. Možete odrediti naziv za novu kategoriju u koju ćete smjestiti funkcije koje kreirate. Ako ne koristite argument Category, tada će prilagođena funkcija automatski biti stavljena u kategoriju “Korisnički definirano”.

    Zalijepite kod funkcije u prozor modula:

    Zatim kliknite na dugme “Run”. Naredba će izvršiti sve postavke za korištenje tipke Fx sa vašom funkcijom GetMaxBetween() .

    Ako pokušate umetnuti funkciju u ćeliju pomoću Insert Function alat, vidjet ćete da je vaša GetMaxBetween funkcija u kategoriji "Moje prilagođene funkcije":

    Vi možete jednostavno početi upisivati ​​naziv funkcije u ćeliju i vidjet ćete svoju prilagođenu funkciju na padajućoj listi funkcija koje možete izabrati.

    Zatim pozovite Čarobnjaka za funkcije pomoću dugmeta Fx.

    Savjet. Također možete koristiti kombinaciju tipki CRTL + A da otvorite čarobnjak za funkcije.

    U prozoru Čarobnjak za funkcije vidjet ćete opis vaše funkcije, kao i savjet za prvi argument. Ako postavite kursor prekodrugi ili treći argument, vidjet ćete i savjete za njih.

    Ako želite promijeniti tekst ovih savjeta, promijenite vrijednosti strDescr i strArgs varijable u kodu RegisterUDF () . Zatim ponovo pokrenite naredbu RegisterUDF () .

    Ako želite poništiti sva napravljena podešavanja i izbrisati opis funkcije, pokrenite ovaj kod:

    Sub UnregisterUDF () Application.MacroOptions Makro: = "GetMaxBetween" , _ Opis: = Prazan, Opisi argumenta: = Prazan, Kategorija: = Empty End Sub

    Postoji još jedan način da dobijete savjet kada unesete prilagođenu funkciju. Unesite naziv funkcije, a zatim pritisnite Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Vidjet ćete listu svih argumenata funkcije:

    Nažalost, ovdje nećete vidjeti opis funkcije i njene argumente. Ali ako su nazivi argumenata prilično informativni, pa bi i oni mogli biti od pomoći. Ipak, bolje je nego ništa :)

    Bit će potrebno malo više rada da se kreira intellisense za UDF-ove koji rade kao standardne Excel funkcije. Nažalost, Microsoft ne nudi nikakve opcije. Trenutno jedino dostupno rješenje je ekstenzija Excel-DNA IntelliSense. Više informacija možete pronaći na web stranici programera.

    Nadajmo se da će vam ove smjernice pomoći u rješavanju problema kada vaša prilagođena funkcija ne radi ili ne radiradite kako želite. Međutim, ako vaš UDF i dalje ne radi, molimo vas da tačno opišete svoj problem u odjeljku Komentari. Pokušat ćemo to shvatiti i pronaći rješenje za vas ;)

    Michael Brown je posvećen tehnološki entuzijasta sa strašću za pojednostavljenje složenih procesa pomoću softverskih alata. Sa više od decenije iskustva u tehnološkoj industriji, usavršio je svoje vještine u Microsoft Excelu i Outlooku, kao i Google Sheets i Docs. Michaelov blog je posvećen dijeljenju svog znanja i stručnosti s drugima, pružajući jednostavne savjete i tutorijale za poboljšanje produktivnosti i efikasnosti. Bilo da ste iskusni profesionalac ili početnik, Michaelov blog nudi vrijedne uvide i praktične savjete za izvlačenje maksimuma iz ovih osnovnih softverskih alata.