Mõnikord annab Excel lihtsalt sõnumi järgmiselt: „Excel ei tööta enam. Vabandame ebamugavuste pärast. "
Sellise teate saamisel võite vajutada klahvikombinatsiooni Ctrl + alt = "" + Kustuta ja avada töövihik uuesti (loodetavasti olete kõik tehtud tööd salvestanud!), Soovides solvava avalduse leidmiseks koodi läbi astuda. Kui astute koodist ühe sammu läbi, võivad kõik toimida hästi, kuid täiskäigul käivitades võib see taas kokku kukkuda. Kuidas leiate õigusrikkuva avalduse?
Saate kirjutada iga koodirea vahele lihtsa koodirea, mis võib olla süüdlane. Nii et VBA kood võib algselt välja näha umbes selline:
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
See protseduur tegelikult ei jookse kokku, kuid see näitab, mida saate teha, kui leiate, et kood jookseb kokku täiskiirusel töötades, kuid mitte sellest läbi astudes.
Muudate ülaltoodud koodi selliseks koos sisestatud lausetega Viga 1, Viga 2 jne:
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
Siin on veaprotseduur:
Sub Bug(num As Integer) SaveSetting "EOTB2", "EOTB2", "EOTB2", num End Sub
See protseduur salvestab registrisse väärtuse. SaveSeteti süntaks on järgmine:

Esimese kolme parameetri puhul öelge, et kasutate juhuslikku valikut EOTB2 (Exceli jaoks väljaspool kasti 2). Selle asemel võite kasutada nuppu SaveSetting "X", "X", "X", arv. Kui kasutate seda palju, saate kasutada kolme taseme AppName, Section ja Key eeliseid. Sel viisil, kui teil on AppName'is palju sektoreid, saate kõigi oma seadete registri puhastada, kasutades lihtsat DeleteSetting "EOTB2" (või mida iganes olete rakenduse AppName jaoks määranud), kustutatakse ka kõik jaotised ja võtmed.
Nüüd käivitate protseduuri täiskiirusel ja see kukub kokku. Nii et taaskäivitate Exceli, minge VBE-sse, avage aken Vahetu (vajutades Ctrl + G) ja tippige see:
? GetSetting(“EOTB2”,”EOTB2”,”EOTB2”)
Kui see protseduur tagastab näiteks 4, siis kukkus see millalgi pärast viga 4. On ebatõenäoline, et süüdi oli jaotis If / End If; tõenäolisemalt oli see ActiveWorkbook. Tühjendage SheetPassword. (Pidage meeles, et see on vaid näide, mitte see, mis tegelikult juhtus.)
Kui teie Bug 1, Bug 2 jms esmakordne käitamine näitab, et protseduur kukkus pärast Bug x-i kokku suures osas koodis, saate selle täiendavaks kitsendamiseks sisestada rohkem veakutseid. Teete omamoodi süüdlase leidmiseks pika protseduuri käigus kahendotsingu.

See külalisartikkel pärineb Exceli MVP Bob Umlaselt. See pärineb raamatust More Exceli väljaspool kasti. Teiste raamatu teemade nägemiseks klõpsake siin.