Sisällysluettelo
Koska tiedät jo, miten UDF:iä luodaan (ja toivottavasti olet myös kokeillut niiden käyttöä Excelissäsi), mennään hieman syvemmälle ja katsotaan, mitä voidaan tehdä, jos käyttäjän määrittelemä funktio ei toimi.
Jos haluat ratkaista joitakin ongelmia, kun luot mukautetun funktion, sinun on todennäköisesti suoritettava virheenkorjaus. Silloin voit olla varma, että funktio toimii oikein.
Tutustumme seuraaviin virheenkorjaustekniikoihin:
Kun luot mukautetun funktion, on aina mahdollista, että teet virheen. Mukautetut funktiot ovat yleensä melko monimutkaisia. Eivätkä ne aina ala toimia oikein heti. Kaava saattaa palauttaa väärän tuloksen tai #VALUE! -virheen. Toisin kuin tavalliset Excel-funktiot, et näe muita viestejä.
Voiko mukautetun funktion käydä läpi askel askeleelta ja tarkistaa, miten kukin sen lauseke toimii? Toki! Tätä varten käytetään virheenkorjausta.
Tarjoan sinulle useita tapoja debugata mukautettua funktiotasi, jotta voit valita itsellesi sopivan.
Esimerkkinä käytämme mukautettua funktiota GetMaxBetween eräästä aiemmasta artikkelistamme, joka laskee suurimman luvun määritetyllä arvoalueella:
Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionFunktion argumentit ovat solujen alue, johon numerot kirjoitetaan, sekä arvojen ylä- ja alaraja.
Sijoita MsgBox-funktio tärkeisiin paikkoihin
Jotta voit seurata laskutoimitusten suorittamista, voit näyttää tärkeimpien muuttujien arvot näytöllä oikeissa paikoissa. Tämä voidaan tehdä ponnahdusikkunoiden avulla.
MsgBox on valintaikkuna, jota voit käyttää jonkinlaisen viestin näyttämiseen käyttäjälle.
MsgBoxin syntaksi on samanlainen kuin muiden VBA-funktioiden:
MsgBox(prompt [, painikkeet] [, title] [, helpfile, context])kehotus on pakollinen argumentti. Se sisältää viestin, jonka näet valintaikkunassa. Sitä voidaan käyttää myös yksittäisten muuttujien arvojen näyttämiseen.
Kaikki muut argumentit ovat valinnaisia.
[ painikkeet ] - määrittää, mitkä painikkeet ja kuvakkeet näkyvät näytössä. MsgBox Jos esimerkiksi käytämme vaihtoehtoa vbOkOnly , niin vain OK painike tulee näkyviin. Vaikka et olisi antanut tätä argumenttia, painiketta käytetään oletusarvoisesti.
[ otsikko ] - Tässä voit määrittää viestikentän otsikon.
Siirrytään sanoista käytäntöön ja aloitetaan virheenkorjaus. Viestin näyttämiseksi lisätään seuraava rivi koodiin seuraavasti GetMaxBetween käyttäjän määrittelemä funktio ennen Asia Else operaattori:
Seuraavassa on tulos:
Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween =WorksheetFunction.Max(arrNums) End FunctionKäyttämällä vMax muuttuja valintaikkunassa, näemme, mitkä numerot täyttävät valintakriteerit, jotta voimme valita niistä suurimman. Otsikkorivillä olevalla ilmaisulla "Count -" & I ilmoitamme, kuinka monta numeroa olemme jo valinneet enimmäisarvon määrittämiseksi. Laskuri kasvaa jokaisen uuden arvon myötä.
Kun olemme asettaneet UDF:n, sovellamme alla olevaa kaavaa päivämääräalueeseen:
= GetMaxBetween (A1:A6,10,50)
Kun Enter-painiketta on painettu, näet alla olevan kuvakaappauksen mukaisen viestin:
Tämä on ensimmäinen luku alueella A1: A6, joka täyttää kriteerit: suurempi kuin 10 mutta pienempi kuin 50.
Kun olet napsauttanut OK-painiketta, näkyviin tulee toinen viesti, jossa on luku 14. Muut luvut eivät vastaa valintaperusteita. Siksi funktio poistuu ja palauttaa kahdesta arvosta suurimman, 17.
The MsgBox funktiota voidaan käyttää mukautetun funktiosi tärkeimmissä paikoissa ohjaamaan sitä, miten yksittäisten muuttujien arvot muuttuvat. Viestilaatikot voivat olla erittäin hyödyllisiä, kun sinulla on suuri funktio ja paljon laskentaa. Tällöin sinun on helppo määrittää, missä koodin osassa virhe tapahtuu.
Määritä pysähtymiskohdat ja suorita vaihe vaiheelta.
Voit lisätä funktiosi koodiin taukopisteitä, joissa koodin suoritus pysähtyy. Näin voit seurata laskentaprosessia vaihe vaiheelta. Näin voit nähdä, miten muuttujien arvot muuttuvat.
Kun haluat lisätä taukopisteen, aseta kursori riville, joka sisältää lausekkeen, jonka haluat pysäyttää. Napsauta sitten hiiren kakkospainikkeella ja valitse sitten Debug -> Pysäytyskohdan vaihtaminen tai paina F9 . Voit myös napsauttaa haluamaasi kohtaan toimintokoodin vasemmalla puolella olevaa harmaata pystysuoraa aluetta.
Näyttöön ilmestyy punainen ympyrä, kuten alla olevassa kuvassa näkyy. Koodirivi, jossa laskenta pysäytetään, on korostettu punaisella.
Nyt VBA-editori-ikkuna avautuu, kun funktio on käynnissä. Kursori on siinä kohdassa, johon pysäytit toiminnon.
Jos viet hiiren kursorin minkä tahansa funktion koodissa olevan muuttujan päälle, näet sen nykyisen arvon:
Jatka laskentaa painamalla F5.
Huomautus. Pysäytyskohdan jälkeen voit alkaa seurata laskennan etenemistä askel askeleelta. Jos painat F8-painiketta, vain yksi seuraava rivi VBA-koodia suoritetaan. Keltainen nuoliviiva siirtyy myös viimeksi suoritetun koodin kohtaan.
Koska funktion suoritus on jälleen keskeytetty, voit tarkastella kaikkien funktion muuttujien nykyisiä arvoja hiiren kursorin avulla.
Seuraava F8-näppäimen painallus vie meidät askeleen eteenpäin. Voit siis painaa F8-näppäintä laskennan loppuun asti. Tai painaa F5-näppäintä jatkaaksesi laskentaa seuraavaan taukopisteeseen asti.
Virheen sattuessa kursori pysähtyy siihen kohtaan koodia, jossa virhe tapahtui. Lisäksi näet ponnahdusikkunan virheilmoituksen. Näin ongelman syy on helppo selvittää.
Määrittämiäsi taukopisteitä käytetään siihen asti, kunnes suljet tiedoston. Kun avaat sen uudelleen, sinun on asetettava ne uudelleen. Eikö olekin kätevä menetelmä?
Ongelma voidaan kuitenkin ratkaista. Stop lausekkeen funktiokoodiin tarvittavissa kohdissa, ja voit pysäyttää ohjelman suorituksen samalla tavalla kuin taukopisteitä käytettäessä.
Kun VBA kohtaa Stop lausekkeella se pysäyttää ohjelman suorituksen ja odottaa toimintaasi. Tarkista muuttujien arvot ja jatka sitten painamalla F5.
Tai painamalla F8 voit suorittaa toiminnon vaiheittain edellä kuvatulla tavalla.
The Stop lauseke on osa ohjelmaa eikä sitä siksi poisteta, kuten taukopistettä. Kun olet lopettanut debuggauksen, poista se itse. Tai muuta se kommentiksi asettamalla sen eteen lainausmerkki (').
Vianmääritys Debug.Print-operaattorin avulla
Voit sijoittaa Debug.Print funktiokoodissa oikeassa paikassa. Tämä on hyödyllistä sellaisten muuttujien arvojen tarkistamisessa, jotka muuttuvat syklisesti.
Voit nähdä esimerkin Debug.Printin suorituskyvystä alla olevassa kuvakaappauksessa.
Lausunto Debug.Print i, vMax tulostaa arvot ja niiden järjestysluvut.
Immediate-ikkunassa näet kaksi numeroa (17 ja 14) valitulta alueelta, joka vastaa asetettuja rajoja ja joiden joukosta valitaan maksimi. Numerot 1 ja 2 tarkoittavat, että funktio on suorittanut kaksi sykliä, joissa numerot valittiin. Näemme tärkeimpien muuttujien arvot, kuten aiemmin teimme kohdassa MsgBox . Mutta tämä ei lopettanut toimintaa.
Kutsu funktiota proseduurista
Käyttäjän määrittelemää funktiota ei voi kutsua työarkin solusta vaan proseduurista. Tällöin kaikki virheet näytetään Visual Basic Editor -ikkunassa.
Näin voit kutsua käyttäjän määrittelemää funktiota GetMaxBerween proseduurista:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubAseta kursori mihin tahansa kohtaan koodia ja paina F5 . Jos funktiossa ei ole virhettä, näet ponnahdusikkunan, jossa näkyy laskennan tulos.
Virheen sattuessa näet VBA-editorissa vastaavan viestin. Laskenta pysäytetään ja koodirivi, jossa virhe tapahtui, korostetaan keltaisella. Voit helposti tunnistaa, missä ja miksi virhe tapahtui.
Siinä kaikki. Nyt olet luonut oman lisäosan, lisännyt sen Exceliin ja voit käyttää siinä UDF:ää. Jos haluat käyttää useampia UDF:iä, kirjoita koodi lisäosan moduuliin VBA-editorissa ja tallenna se.
Siinä kaikki tältä päivältä. Olemme käsitelleet eri tapoja vianmääritykseen mukautetuissa funktioissa ja oppineet käyttämään niitä työkirjassasi. Toivomme todella, että näistä ohjeista on sinulle apua. Jos sinulla on kysyttävää, kirjoita kommentteihin tähän artikkeliin.