Var rasties problēmas ar savu VBA kodu, bet kā atrast problēmu? Dažreiz jūsu VBA kodam var būt nepieciešama atkļūdošana. Turpiniet lasīt, lai atklātu četras visizplatītākās metodes Excel VBA koda atkļūdošanai:
-
Pārbaudot kodu
-
MsgBox funkciju ievietošana dažādās koda vietās
-
Notiek Debug.Print paziņojumu ievietošana
-
Izmantojot Excel iebūvētos atkļūdošanas rīkus
Pārbaudot jūsu kodu
Iespējams, visvienkāršākā atkļūdošanas tehnika ir vienkārši rūpīgi apskatīt kodu, lai noskaidrotu, vai varat atrast problēmu. Šī metode, protams, prasa zināšanas un pieredzi. Citiem vārdiem sakot, jums ir jāzina, ko jūs darāt. Ja jums paveicas, kļūda parādās uzreiz, un jūs sitāt pa pieri un sakāt: "Ak!" Kad pieres sāpes mazinās, jūs varat novērst problēmu.
Pievērsiet uzmanību vārdu lietojumam: "Ja jums paveicas". Tas ir tāpēc, ka bieži jūs atklājat kļūdas, kad esat strādājis pie savas programmas astoņas stundas pēc kārtas, ir pulksten 2 naktī un jūs strādājat ar kofeīnu un gribasspēku. Šādos gadījumos jums ir paveicies, ja varat pat redzēt savu kodu, nemaz nerunājot par kļūdu atrašanu. Tāpēc nebrīnieties, ja ar koda pārbaudi vien nepietiek, lai atrastu un izdzēstu visas tajā esošās kļūdas.
Izmantojot funkciju MsgBox
Bieži sastopama problēma daudzās programmās ir saistīta ar vienu vai vairākiem mainīgajiem, kas nepieņem gaidītās vērtības. Šādos gadījumos mainīgā(-u) pārraudzība koda darbības laikā ir noderīgs atkļūdošanas paņēmiens. Viens veids, kā to izdarīt, ir savā rutīnā ievietot pagaidu MsgBox funkcijas. Piemēram, ja jums ir mainīgais ar nosaukumu CellCount, varat ievietot šādu paziņojumu:
MsgBox šūnu skaits
Kad izpildāt rutīnu, funkcija MsgBox parāda CellCount vērtību.
Bieži vien ir noderīgi ziņojuma lodziņā parādīt divu vai vairāku mainīgo vērtības. Šis paziņojums parāda divu mainīgo pašreizējo vērtību: LoopIndex (1) un CellCount (72), atdalot tos ar atstarpi.
MsgBox LoopIndex & " " & CellCount
Ņemiet vērā, ka abi mainīgie ir apvienoti ar saitīšanas operatoru (&) un ievietojiet starp tiem atstarpes rakstzīmi. Pretējā gadījumā ziņojuma lodziņā abas vērtības tiek saliktas kopā, padarot tās līdzīgas vienai vērtībai. Atstarpes rakstzīmes vietā varat izmantot arī iebūvēto konstanti vbNewLine. vbNewLine ievieto rindas padeves pārtraukumu, kas parāda tekstu jaunā rindā. Šis paziņojums parāda trīs mainīgos, katrs atsevišķā rindā:
Ziņojuma lodziņa izmantošana, lai parādītu trīs mainīgo vērtību.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Šī metode neaprobežojas tikai ar mainīgo lielumu uzraudzību. Varat izmantot ziņojumu lodziņu, lai parādītu visu veidu noderīgu informāciju, kamēr kods darbojas. Piemēram, ja kods iziet cauri virknei lapu, tālāk norādītajā paziņojumā tiek parādīts aktīvās lapas nosaukums un veids:
MsgBox ActiveSheet.Name & " " & TypeName(Active Sheet)
Ja ziņojuma lodziņā tiek parādīts kaut kas neparedzēts, nospiediet Ctrl+Break un tiek parādīts dialoglodziņš, kas informē, ka koda izpilde ir pārtraukta, jums ir četras izvēles iespējas:
-
Noklikšķiniet uz pogas Turpināt. Kods turpinās izpildīt.
-
Noklikšķiniet uz pogas Beigt. Izpilde apstājas.
-
Noklikšķiniet uz pogas Atkļūdot. VBE pāriet atkļūdošanas režīmā.
-
Noklikšķiniet uz pogas Palīdzība. Palīdzības ekrānā tiek parādīts, ka nospiedāt Ctrl+Break. Citiem vārdiem sakot, tas nav īpaši noderīgi.
Nospiežot taustiņu kombināciju Ctrl+Break, tiek apturēta koda izpilde un tiek piedāvātas dažas izvēles iespējas.
Ja tastatūrai nav Break taustiņa, mēģiniet nospiest Ctrl+ScrollLock.
Atkļūdojot kodu, varat bieži izmantot MsgBox funkcijas. Noteikti noņemiet tos pēc problēmas noteikšanas un novēršanas.
Notiek Debug.Print paziņojumu ievietošana
Kā alternatīvu MsgBox funkciju izmantošanai kodā varat ievietot vienu vai vairākus pagaidu Debug.Print paziņojumus. Izmantojiet šos paziņojumus, lai izdrukātu viena vai vairāku mainīgo vērtību tūlītējā logā. Šeit ir piemērs, kas parāda trīs mainīgo vērtības:
Debug.Print LoopIndex, CellCount, MyVal
Ņemiet vērā, ka mainīgie ir atdalīti ar komatiem. Varat parādīt tik daudz mainīgo, cik vēlaties, izmantojot vienu Debug.Print paziņojumu.
Debug.Print nosūta izvadi tūlītējam logam pat tad, ja šis logs ir paslēpts. Ja VBE tūlītējais logs nav redzams, nospiediet Ctrl+G (vai izvēlieties Skats → Tūlītējais logs). Šeit ir daži rezultāti tūlītējā logā.
Debug.Print paziņojums nosūta izvadi uz tūlītējo logu.
Atšķirībā no MsgBox, Debug.Print paziņojumi neaptur jūsu kodu. Tāpēc jums ir jāseko tūlītējam logam, lai redzētu, kas notiek.
Pēc koda atkļūdošanas noteikti noņemiet visus Debug.Print paziņojumus. Pat lielie uzņēmumi, piemēram, Microsoft, laiku pa laikam aizmirst noņemt savus Debug.Print paziņojumus. Vairākās iepriekšējās Excel versijās katru reizi, kad tika atvērta pievienojumprogramma Analysis ToolPak, tūlītējā logā tika parādīti vairāki dīvaini ziņojumi. Šī problēma beidzot tika novērsta programmā Excel 2007.
Izmantojot VBA atkļūdotāju
Excel dizaineri ir labi pazīstami ar kļūdu jēdzienu. Līdz ar to programmā Excel ir iekļauts atkļūdošanas rīku komplekts, kas var palīdzēt novērst problēmas VBA kodā.