Excel UDF ne radi: problemi i rješenja

  • Podijeli Ovo
Michael Brown

U ovom ćemo članku pogledati probleme s kojima se možete susresti prilikom korištenja prilagođenih funkcija u svojim radnim knjigama. Pokušat ću vam pokazati što ih uzrokuje i kako se lako mogu riješiti.

Evo o čemu ćemo razgovarati:

    Ranije smo govorili o tome što prilagođena funkcija je kako je izraditi i koristiti. Ako mislite da prije toga trebate obnoviti osnovno znanje o UDF-ovima, zastanite i pregledajte moj prethodni članak.

    Zašto Excel UDF ne izračunava ponovno?

    Kada napravite bilo kakve promjene u vašu radnu knjigu, Excel neće ponovno izračunati svaku formulu koju tamo imate. Ažurirat će rezultate samo za one formule koje su povezane s promijenjenim ćelijama.

    Ali ovo se odnosi na standardne Excel funkcije. Što se tiče prilagođenih, Excel ne može potvrditi valjanost VBA koda 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 izvršite izmjene u radnoj knjizi.

    Da biste riješili problem, samo ćete morati upotrijebiti izjavu Application.Volatile . Pogledajte sljedeće poglavlje kako biste saznali korak po korak upute o tome kako ga primijeniti.

    Volatile vs non-volatile prilagođene funkcije

    Prema zadanim postavkama, prilagođene funkcije u Excelu nisu nestabilne. To znači da se UDF ponovno izračunava samo ako se promijeni vrijednost bilo koje ćelije na koju se odnosi. Ali ako je format ćelija, nazivradni list, promijenite naziv datoteke, neće doći do promjena u UDF-u.

    Prebacimo se s riječi na primjere. Na primjer, trebate zapisati naziv svoje radne bilježnice u ćeliju. Da biste to učinili, izradite prilagođenu funkciju:

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

    Sada zamislite sljedeći slučaj. Napisali ste prilagođenu formulu =WorkbookName() u ćeliju i tamo dobili naziv datoteke. Nakon nekog vremena odlučili ste preimenovati datoteku i spremili je pod drugim imenom. Ali pogledate vrijednost u ćeliji i vidite da se nije promijenila. Još uvijek postoji stari naziv datoteke koji više nije ispravan.

    Budući da u ovoj funkciji nema argumenata, funkcija se ne izračunava ponovno (čak i ako promijenite naziv radne knjige, zatvorite je i zatim ponovno otvorite to).

    Napomena. Za ponovno izračunavanje svih funkcija u vašoj datoteci, možete koristiti prečac Ctrl + Alt + F9.

    Postoji li lakši način? Kako bi se formula ponovno 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 kôd izgledati ovako:

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

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

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

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

    Zašto prilagođene funkcije nisu dostupne

    Kada unesete prva slova naziva prilagođene funkcije, pojavljuje se na padajućem popisu pokraj ćelije za unos, baš kao i standardne Excel funkcije.

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

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

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

    Vidite, prilagođena funkcija mora biti u standardni VBA modul pod nazivom Modules. Kada dodate novi modul za pisanje funkcijskog koda, automatski se stvara mapa Modules u kojoj su zapisani svi moduli.

    Ali ponekad se dogodi da novi modul nije stvarajući se. Na sljedećoj snimci zaslona možete vidjeti da se kod prilagođene funkcije nalazi u modulu "Microsoft Excel Objects" zajedno sThisWorkbook.

    Stvar je u tome da ne možete postaviti prilagođenu funkciju u područje koda radnog lista ili radne knjige. U tom slučaju funkcija neće raditi. Štoviše, neće se pojaviti na padajućem popisu funkcija. Stoga bi kod uvijek trebao biti u mapi Moduli .

    Tekst pomoći prilagođene funkcije programa 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 alata za funkciju i njene argumente. Ali što je s UDF-ovima?

    Ako imate mnogo prilagođenih funkcija, bit će vam izuzetno teško zapamtiti koje izračune svaka od njih radi. Bit će još teže zapamtiti koje argumente koristiti. Mislim da bi bilo dobro imati opis svojih 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 nego i svakog od njenih argumenata u prozoru čarobnjaka za funkcije. Ovaj prozor vidite kada kliknete gumb Fx na traci s formulama.

    Da vidimo kako dodati takav savjet vašim UDF-ovima. U prethodnom smo članku pogledali prilagođenu funkciju GetMaxBetween. Pronalazi najveći broj u navedenom rasponu i uzima tri argumenta: raspon numeričkih vrijednosti te 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 'naziv funkcije koju želite registrirati Dim strDescr As String ' opis funkcije Dim strArgs () As String 'opis argumenata funkcije ' Registrirajte funkciju GetMaxBetween 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, _ ArgumentDescriptions: = strArgs, _ Kategorija: = " Moje prilagođene funkcije " End Sub

    or

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

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

    Možda se pitate koji je četvrti argument zaApplication.MacroOptions. Ovaj izborni argument zove se Kategorija i označava klasu Excel funkcija u koju će biti smještena naša prilagođena funkcija GetMaxBetween () . Možete ga imenovati prema bilo kojoj od postojećih kategorija: Matematika & ; Trig, Statistički, Logički, itd. Možete navesti naziv za novu kategoriju u koju ćete smjestiti funkcije koje kreirate. Ako ne koristite argument Kategorija, tada će prilagođena funkcija automatski biti smještena u kategoriju "Korisnički definirano".

    Zalijepite kod funkcije u prozor modula:

    Zatim kliknite na gumb "Pokreni". Naredba će izvršiti sve postavke za korištenje gumba Fx s vašom funkcijom GetMaxBetween() .

    Ako pokušate umetnuti funkciju u ćeliju pomoću Alat za umetanje funkcije , vidjet ćete da je vaša funkcija GetMaxBetween 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ćem popisu funkcija za odabir.

    Zatim pozovite Čarobnjaka za funkcije tipkom Fx.

    Savjet. Također možete upotrijebiti kombinaciju tipki CRTL + A za otvaranje čarobnjaka za funkcije.

    U prozoru Function Wizard vidjet ćete opis svoje funkcije, kao i savjet za prvi argument. Ako postavite pokazivač iznaddrugi ili treći argument, također ćete vidjeti 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 sve napravljene postavke i izbrisati opis funkcije, pokrenite ovaj kod:

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

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

    =GetMaxBetween( + Ctrl + Shift + A

    Vidjet ćete popis svih argumenata funkcije:

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

    Bit će potrebno malo više posla da se stvori intellisense za UDF-ove koji rade kao standardne Excel funkcije. Nažalost, Microsoft ne nudi nikakve mogućnosti. Jedino dostupno rješenje trenutno je ekstenzija Excel-DNA IntelliSense. Više informacija možete pronaći na web stranici razvojnog programera.

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

    Michael Brown predani je tehnološki entuzijast sa strašću za pojednostavljivanjem složenih procesa pomoću softverskih alata. S više od desetljeća iskustva u tehnološkoj industriji, usavršio je svoje vještine u Microsoft Excelu i Outlooku, kao i Google tablicama i dokumentima. Michaelov blog posvećen je dijeljenju znanja i stručnosti s drugima, pružajući savjete i upute koje je lako slijediti za poboljšanje produktivnosti i učinkovitosti. Bez obzira jeste li iskusni profesionalac ili početnik, Michaelov blog nudi vrijedne uvide i praktične savjete za izvlačenje maksimuma iz ovih osnovnih softverskih alata.