Dažreiz Excel vienkārši dod ziņojumu atbilstoši šādam principam: “Excel vairs nedarbojas. Mēs atvainojamies par sagādātajām neērtībām. ”
Kad saņemat šādu ziņojumu, varat nospiest taustiņu kombināciju Ctrl + alt = "" + Dzēst un vēlreiz atvērt darbgrāmatu (cerams, ka esat saglabājis visu paveikto darbu!), Vēloties iziet cauri kodam, lai atrastu pārkāpošo paziņojumu. Veicot vienu soli caur kodu, viss var darboties lieliski, bet, palaižot to ar pilnu ātrumu, atkal tas var avarēt. Kā jūs varat atrast pārkāpumu izdarošo paziņojumu?
Starp katru koda rindu, kas varētu būt vaininieks, varat ierakstīt vienkāršu koda rindu. Tātad VBA kods sākotnēji var izskatīties apmēram šādi:
Sub UICreation() Dim x As String On Error Resume Next x = Sheets("Scenario").Name If Err.Number 0 Then MsgBox "Current workbook needs to have a Scenario sheet!", vbCritical Exit Sub End If ActiveWorkbook.Unprotect WorkbookPassword Err.Clear ActiveWorkbook.Unprotect SheetPassword If Err.Number 0 Then MsgBox "Workbook cannot be unprotected by the macro.", vbCritical Exit Sub End If Application.OnTime Now, "More" ThisWorkbook.Sheets("FastPricer").Copy Before:=ActiveWorkbook.Sheets(1) End Sub
Šī procedūra faktiski nav avārija, bet tā parāda, ko jūs varat darīt, ja atklājat, ka kods avarē, palaižot to ar pilnu ātrumu, bet ne tad, kad jūs tam pāriet.
Jūs maināt iepriekš minēto kodu uz šo, ar ievietotiem paziņojumiem 1. kļūda, 2. kļūda utt.:
Sub UICreation() Dim x As String On Error Resume Next Bug 1 x = Sheets("Scenario").Name Bug 2 If Err.Number 0 Then MsgBox "Current workbook needs to have a Scenario sheet!", vbCritical Exit Sub End If Bug 3 ActiveWorkbook.Unprotect WorkbookPassword Err.Clear Bug 4 ActiveWorkbook.Unprotect SheetPassword If Err.Number 0 Then MsgBox "Workbook cannot be unprotected by the macro.", vbCritical Exit Sub End If Bug 5 Application.OnTime Now, "More" Bug 6 ThisWorkbook.Sheets("FastPricer").Copy Before:=ActiveWorkbook.Sheets(1) End Sub
Lūk, kļūda:
Sub Bug(num As Integer) SaveSetting "EOTB2", "EOTB2", "EOTB2", num End Sub
Šī procedūra saglabā vērtību reģistrā. Saglabāšanas iestatīšanas sintakse ir šāda:

Pirmajiem trim parametriem sakiet, ka izmantojat EOTB2 (programmai Excel Outside the Box 2) - izlases veidā. Tā vietā jūs varētu izmantot SaveSetting “X”, “X”, “X”, num. Ja jūs to daudz lietojat, varat izmantot trīs līmeņu AppName, Section un Key priekšrocības. Tādā veidā, ja jums ir daudz sadaļu AppName, varat iztīrīt visu iestatījumu reģistru, izmantojot vienkāršo DeleteSetting "EOTB2" (vai visu, ko iestatījāt AppName), un visas sadaļas un taustiņi arī tiks izdzēsti.
Tagad jūs palaižat procedūru ar pilnu ātrumu, un tā avarē. Tātad jūs restartējat programmu Excel, dodieties uz VBE, atveriet logu Tūlītēja (nospiežot Ctrl + G) un ierakstiet šo:
? GetSetting(“EOTB2”,”EOTB2”,”EOTB2”)
Ja šī procedūra atgriež, piemēram, 4, tad tā avarēja kaut kad pēc 4. kļūdas. Maz ticams, ka vainīgā bija If / End If sadaļa; visticamāk, tas bija ActiveWorkbook.Neaizsargājiet SheetPassword. (Atcerieties, ka tas ir tikai piemērs, nevis tas, kas faktiski ir noticis.)
Ja sākotnējā Bug 1, Bug 2 utt. Palaišana liecina, ka procedūra pēc Bug x avarēja lielā koda sadaļā, varat ievietot vairāk kļūdu izsaukumu, lai to vēl vairāk sašaurinātu. Jūs kaut kā veicat bināro meklēšanu ilgā procedūrā, lai atrastu vainīgo.

Šis viesu raksts ir no Excel MVP Bob Umlas. Tas ir no grāmatas Vairāk Excel ārpus kastes. Lai skatītu citas grāmatas tēmas, noklikšķiniet šeit.