Beperking van de oorzaak van een crash - Excel-tips

Soms geeft Excel gewoon een bericht in de trant van "Excel werkt niet meer. Onze excuses voor het ongemak. "

Wanneer u zo'n bericht krijgt, kunt u op Ctrl + alt = "" + Delete drukken en de werkmap opnieuw openen (hopelijk heeft u al het werk dat u had gedaan opgeslagen!), En wilt u door de code lopen om de aanstootgevende verklaring te vinden. Wanneer u de code in één keer doorloopt, werkt alles misschien goed, maar als u het op volle snelheid uitvoert, kan het opnieuw crashen. Hoe vind je de beledigende verklaring?

U kunt een eenvoudige regel code schrijven tussen elke regel code die de boosdoener zou kunnen zijn. Dus de VBA-code kan er oorspronkelijk ongeveer zo uitzien:

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

Deze procedure crasht in feite niet, maar het illustreert wat u kunt doen als u merkt dat de code crasht wanneer deze op volle snelheid wordt uitgevoerd, maar niet wanneer u er doorheen loopt.

Je verandert de bovenstaande code hier in, met ingevoegde statements Bug 1, Bug 2, etc .:

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

Hier is de bug-procedure:

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

Met deze procedure wordt een waarde in het register opgeslagen. De syntaxis voor SaveSetting is:

SaveSetting Syntax

Stel dat u voor de eerste drie parameters EOTB2 gebruikt (voor Excel Outside the Box 2) - een willekeurige selectie. U kunt in plaats daarvan SaveSetting "X", "X", "X", num. Als u dit veel gebruikt, kunt u profiteren van de drie niveaus AppName, Section en Key. Op die manier kunt u, als u veel secties in de AppName heeft, het register opschonen voor al uw instellingen door de eenvoudige DeleteSetting "EOTB2" te gebruiken (of wat u ook instelt voor AppName), en alle secties en sleutels worden ook verwijderd.

Nu voer je de procedure op volle snelheid uit en het crasht. Dus herstart je Excel, ga naar de VBE, open het venster Onmiddellijk (door op Ctrl + G te drukken) en typ dit:

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

Als deze procedure bijvoorbeeld 4 retourneert, crashte het ergens na bug 4. Het is onwaarschijnlijk dat de If / End If-sectie de boosdoener was; waarschijnlijker was het ActiveWorkbook.Unprotect SheetPassword. (Onthoud dat dit slechts een voorbeeld is, niet wat er werkelijk is gebeurd.)

Als uw eerste uitvoering van Bug 1, Bug 2, enz. Aantoont dat de procedure crashte in een groot gedeelte van de code na Bug x, kunt u meer bugoproepen invoegen om het verder te beperken. Je doet een soort binaire zoekopdracht in een lange procedure om de boosdoener te vinden.

Dit gastartikel is van Excel MVP Bob Umlas. Het komt uit het boek More Excel Outside the Box. Om de andere onderwerpen in het boek te zien, klik hier.

Interessante artikelen...