Ponekad Excel jednostavno pošalje poruku poput „Excel je prestao raditi. Žao nam je zbog neugodnosti. "
Kad dobijete takvu poruku, možete pritisnuti Ctrl + alt = "" + Delete i ponovo otvoriti radnu knjigu (nadamo se da ste spremili sve što ste radili!), Želeći proći kroz kôd da biste pronašli uvredljivu izjavu. Kada u jednom koraku prođete kroz kôd, svi će možda funkcionirati u redu, ali kad ga pokrenete punom brzinom, opet se može srušiti. Kako možete pronaći uvredljivu izjavu?
Možete napisati jednostavan redak koda između svakog retka koda koji bi mogao biti krivac. Dakle, VBA kôd može izvorno izgledati otprilike ovako:
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
Ovaj se postupak, u stvari, ne ruši, ali ilustrira što možete učiniti ako otkrijete da se kod ruši pri punoj brzini, ali ne i kad ga prođete.
Gornji kôd promijenite u ovaj, s umetnutim izjavama Bug 1, Bug 2, itd .:
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
Evo postupka s programskom pogreškom:
Sub Bug(num As Integer) SaveSetting "EOTB2", "EOTB2", "EOTB2", num End Sub
Ovaj postupak sprema vrijednost u registar. Sintaksa za SaveSetting je:

Za prva tri parametra recite da koristite EOTB2 (za Excel izvan okvira 2) - slučajni odabir. Umjesto toga, možete upotrijebiti SaveSetting "X", "X", "X", num. Ako ovo puno upotrebljavate, možete iskoristiti tri razine AppName, Section i Key. Na taj način, ako u AppName imate mnogo odjeljaka, možete očistiti registar za sve svoje postavke pomoću jednostavnog DeleteSetting "EOTB2" (ili bilo čega što ste postavili za AppName), a svi odjeljci i tipke također će se izbrisati.
Sada postupak izvodite punom brzinom i on pada. Dakle, ponovo pokrenete Excel, dolazite do VBE, otvorite prozor Odmah (pritiskom na Ctrl + G) i upišite ovo:
? GetSetting(“EOTB2”,”EOTB2”,”EOTB2”)
Ako ovaj postupak na primjer vrati 4, tada se srušio negdje nakon Bug 4. Malo je vjerojatno da je krivac odjeljak If / End If; vjerojatnije je to bila ActiveWorkbook.Unprotect SheetPassword. (Zapamtite da je ovo samo primjer, a ne ono što se zapravo dogodilo.)
Ako vaše početno pokretanje Bug 1, Bug 2 itd. Pokaže da se postupak srušio u velikom dijelu koda nakon Bug x-a, možete umetnuti više poziva za programske pogreške kako biste ga dodatno suzili. Nekako binarno pretražujete u dugom postupku da biste pronašli krivca.

Ovaj gost članak je iz Excela MVP-a Bob Umlas. Iz knjige je, Još Excel izvan okvira. Da biste pogledali ostale teme u knjizi, kliknite ovdje.