Saatat kohdata ongelmia VBA-koodisi kanssa, mutta miten löydät ongelman? Joskus VBA-koodisi saattaa vaatia virheenkorjausta. Jatka lukemista löytääksesi neljä yleisintä tapaa Excel VBA -koodin virheenkorjaukseen:
-
Koodia tutkimassa
-
MsgBox-toimintojen lisääminen koodin eri paikkoihin
-
Lisätään Debug.Print-lauseita
-
Excelin sisäänrakennettujen virheenkorjaustyökalujen käyttäminen
Koodisi tutkiminen
Ehkä yksinkertaisin virheenkorjaustekniikka on yksinkertaisesti tarkastella koodia tarkasti nähdäksesi, voitko löytää ongelman. Tämä menetelmä vaatii tietysti tietoa ja kokemusta. Toisin sanoen sinun on tiedettävä, mitä olet tekemässä. Jos olet onnekas, virhe pomppaaa heti esiin, ja lyöt otsaasi ja sanot: "Oho!" Kun otsakipu vähenee, voit korjata ongelman.
Huomaa sanojen "Jos olet onnekas" käyttö. Tämä johtuu siitä, että usein huomaat virheitä, kun olet työskennellyt ohjelman parissa kahdeksan tuntia putkeen, kello on kaksi yöllä ja käytät kofeiinia ja tahdonvoimaa. Tällaisina aikoina olet onnekas, jos näet edes koodisi, saati sitten löytää bugit. Älä siis hämmästy, jos pelkkä koodisi tutkiminen ei riitä löytämään ja poistamaan kaikki sen sisältämät virheet.
MsgBox-toiminnon käyttäminen
Yleinen ongelma monissa ohjelmissa liittyy siihen, että yksi tai useampi muuttuja ei ota odottamiasi arvoja. Tällaisissa tapauksissa muuttujien tarkkailu koodin suorituksen aikana on hyödyllinen virheenkorjaustekniikka. Yksi tapa tehdä tämä on lisätä tilapäisiä MsgBox-toimintoja rutiiniin. Jos sinulla on esimerkiksi muuttuja nimeltä CellCount, voit lisätä seuraavan lauseen:
MsgBox CellCount
Kun suoritat rutiinin, MsgBox-toiminto näyttää CellCountin arvon.
Usein on hyödyllistä näyttää kahden tai useamman muuttujan arvot viestiruudussa. Seuraava lause näyttää kahden muuttujan nykyisen arvon: LoopIndex (1) ja CellCount (72) välilyönnillä erotettuna.
MsgBox LoopIndex & " " & CellCount
Huomaa, että nämä kaksi muuttujaa yhdistetään ketjutusoperaattoriin (&) ja lisää välilyöntimerkki niiden väliin. Muussa tapauksessa viestilaatikko yhdistää nämä kaksi arvoa, jolloin ne näyttävät yhdeltä arvolta. Voit myös käyttää sisäänrakennettua vakiota vbNewLine välilyönnin sijaan. vbNewLine lisää rivinvaihdon, joka näyttää tekstin uudelle riville. Seuraava lause näyttää kolme muuttujaa, joista jokainen on omalla rivillään:
Viestiruudun käyttäminen kolmen muuttujan arvon näyttämiseen.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Tämä tekniikka ei rajoitu muuttujien seurantaan. Voit käyttää viestiruutua näyttääksesi kaikenlaisia hyödyllisiä tietoja koodisi ollessa käynnissä. Jos koodisi esimerkiksi kiertää taulukoiden sarjan läpi, seuraava käsky näyttää aktiivisen taulukon nimen ja tyypin:
MsgBox ActiveSheet.Name & " " & TypeName(ActiveSheet)
Jos viestilaatikossasi näkyy jotain odottamatonta, paina Ctrl+Break ja näet valintaikkunan, joka kertoo, että koodin suoritus on keskeytetty, sinulla on neljä vaihtoehtoa:
-
Napsauta Jatka-painiketta. Koodi jatkaa suoritusta.
-
Napsauta Lopeta-painiketta. Toteutus pysähtyy.
-
Napsauta Debug-painiketta. VBE siirtyy Debug-tilaan.
-
Napsauta Ohje-painiketta. Ohjenäyttö kertoo, että painat Ctrl+Break. Toisin sanoen, se ei ole kovin hyödyllinen.
Ctrl+Break-näppäinten painaminen pysäyttää koodin suorittamisen ja antaa sinulle joitain vaihtoehtoja.
Jos näppäimistössäsi ei ole Break-näppäintä, kokeile painaa Ctrl+ScrollLock.
Voit vapaasti käyttää MsgBox-toimintoja usein, kun suoritat koodin virheenkorjauksen. Varmista vain, että poistat ne, kun olet tunnistanut ja korjaanut ongelman.
Lisätään Debug.Print-lauseita
Vaihtoehtona MsgBox-toimintojen käyttämiselle koodissa voit lisätä yhden tai useamman väliaikaisen Debug.Print-lausekkeen. Käytä näitä lauseita tulostaaksesi yhden tai useamman muuttujan arvon Välitön-ikkunassa. Tässä on esimerkki, joka näyttää kolmen muuttujan arvot:
Debug.Print LoopIndex, CellCount, MyVal
Huomaa, että muuttujat erotetaan pilkuilla. Voit näyttää niin monta muuttujaa kuin haluat yhdellä Debug.Print-käskyllä.
Debug.Print lähettää tulosteen Välittömään ikkunaan, vaikka se olisi piilotettu. Jos VBE:n välitön ikkuna ei ole näkyvissä, paina Ctrl+G (tai valitse Näytä → Välitön ikkuna). Tässä on välitöntä ikkunaa.
Debug.Print-käsky lähettää tulosteen välittömään ikkunaan.
Toisin kuin MsgBox, Debug.Print-lauseet eivät pysäytä koodia. Joten sinun on pidettävä silmällä välitöntä ikkunaa nähdäksesi mitä tapahtuu.
Kun olet tehnyt virheenkorjauksen koodistasi, muista poistaa kaikki Debug.Print-lausekkeet. Jopa suuret yritykset, kuten Microsoft, unohtavat toisinaan poistaa Debug.Print-lausumansa. Useissa aiemmissa Excelin versioissa näet useita outoja viestejä Välittömässä ikkunassa joka kerta, kun Analysis ToolPak -apuohjelma avattiin. Ongelma korjattiin lopulta Excel 2007:ssä.
VBA-debuggerin käyttö
Excel-suunnittelijat tuntevat hyvin vikojen käsitteen. Tästä syystä Excel sisältää joukon virheenkorjaustyökaluja, jotka voivat auttaa sinua korjaamaan VBA-koodin ongelmia.