Susiaurinimas, kas sukėlė avariją - „Excel“ patarimai

Kartais „Excel“ tiesiog pateikia pranešimą pagal „Excel nustojo veikti. Atsiprašome už nepatogumus “.

Gavę tokį pranešimą, galite paspausti „Ctrl“ + alt = "" + Ištrinti ir vėl atidaryti darbaknygę (tikimės, kad išsaugojote bet kokį atliktą darbą!), Norėdami pereiti kodą, kad rastumėte įžeidžiantį teiginį. Vieną kartą peržengus kodą, viskas gali veikti gerai, bet paleidus jį visu greičiu, jis vėl gali sugesti. Kaip rasti pažeidžiantį pareiškimą?

Galite parašyti paprastą kodo eilutę tarp kiekvienos kodo eilutės, kuri gali būti kaltininkė. Taigi VBA kodas iš pradžių gali atrodyti maždaug taip:

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

Ši procedūra, tiesą sakant, nesutrinka, tačiau ji parodo, ką galite padaryti, jei pastebite, kad kodas užstringa, kai jis veikia visu greičiu, bet ne tada, kai žengiate pro jį.

Pirmiau nurodytą kodą pakeisite į šį, su įterptais teiginiais 1, 2 ir kt. Klaidos:

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

Štai ši klaida procedūra:

Sub Bug(num As Integer) SaveSetting "EOTB2", "EOTB2", "EOTB2", num End Sub

Ši procedūra išsaugo reikšmę registre. „SaveSetting“ sintaksė yra:

„SaveSetting Syntax“

Pirmiesiems trims parametrams pasakykite, kad naudojate EOTB2 („Excel“ už 2 langelio) - atsitiktinį pasirinkimą. Vietoj to galite naudoti „SaveSetting“ „X“, „X“, „X“, Nr. Jei tai naudojate daug, galite pasinaudoti trijų lygių „AppName“, „Section“ ir „Key“ privalumais. Tokiu būdu, jei „AppName“ turite daug skyrių, galite išvalyti visų nustatymų registrą naudodami paprastą „DeleteSetting“ „EOTB2“ (arba bet ką, ką nustatėte „AppName“), taip pat bus ištrinti visi skyriai ir raktai.

Dabar jūs paleidžiate procedūrą visu greičiu, ir ji sugenda. Taigi iš naujo paleiskite „Excel“, pateksite į VBE, atidarykite langą „Tiesioginis“ (paspausdami „Ctrl“ + G) ir įveskite:

? GetSetting(“EOTB2”,”EOTB2”,”EOTB2”)

Pavyzdžiui, jei ši procedūra pateikia 4, tada ji sugedo kažkada po 4 klaidos. Vargu ar skiltis „If / End If“ buvo kaltininkė; labiau tikėtina, kad tai buvo „ActiveWorkbook“. Nepanaikinkite „SheetPassword“. (Atminkite, kad tai tik pavyzdys, o ne tai, kas iš tikrųjų įvyko.)

Jei jūsų pradinis 1, 2 ir kt klaidų paleidimas rodo, kad po „Bug x“ procedūra užstrigo didelėje kodo dalyje, galite įterpti daugiau klaidų, kad ją dar labiau susiaurintumėte. Jūs tarsi atliekate dvejetainę paiešką per ilgą procedūrą, kad surastumėte kaltininką.

Šis svečio straipsnis yra iš „Excel MVP Bob Umlas“. Tai iš knygos „Daugiau„ Excel “už dėžutės“. Norėdami pamatyti kitas knygos temas, spustelėkite čia.

Įdomios straipsniai...