Zúžení toho, co způsobilo nehodu - Excel tipy

Někdy Excel jednoduše dá zprávu v duchu „Excel přestal fungovat. Omlouváme se za případné nepříjemnosti. “

Když dostanete takovou zprávu, můžete stisknout Ctrl + alt = "" + Smazat a znovu otevřít sešit (doufejme, že jste uložili jakoukoli práci, kterou jste provedli!), Chcete-li projít kódem a najít nevhodné prohlášení. Když kód projdete jedním krokem, vše může fungovat dobře, ale při spuštění v plné rychlosti se může znovu zhroutit. Jak můžete najít protiprávní prohlášení?

Mezi každý řádek kódu, který by mohl být viníkem, můžete napsat jednoduchý řádek kódu. Kód VBA tedy může původně vypadat nějak takto:

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

Tento postup ve skutečnosti nepadne, ale ilustruje, co můžete udělat, pokud zjistíte, že kód selže při spuštění při plné rychlosti, ale ne při jeho procházení.

Změníte výše uvedený kód na tento s vloženými příkazy Bug 1, Bug 2 atd .:

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

Zde je postup chyby:

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

Tento postup uloží hodnotu do registru. Syntaxe pro SaveSetting je:

SaveSetting Syntax

U prvních tří parametrů řekněme, že používáte EOTB2 (pro Excel mimo krabici 2) - náhodný výběr. Místo toho můžete použít SaveSetting "X", "X", "X", num. Pokud to hodně používáte, můžete využít výhod tří úrovní AppName, Section a Key. Tímto způsobem, pokud máte v AppName mnoho sekcí, můžete vyčistit registr pro všechna svá nastavení pomocí jednoduchého DeleteSetting "EOTB2" (nebo cokoli, co jste nastavili pro AppName) a všechny sekce a klíče budou také odstraněny.

Nyní spustíte proceduru na plnou rychlost a dojde k chybě. Takže restartujete Excel, dostanete se na VBE, otevřete okno Immediate (stisknutím Ctrl + G) a zadejte toto:

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

Pokud tento postup vrátí například 4, pak došlo k chybě někdy po chybě 4. Je nepravděpodobné, že viníkem byla sekce If / End If; pravděpodobněji to byl ActiveWorkbook.Unprotect SheetPassword. (Pamatujte, že toto je jen příklad, nikoli to, co se ve skutečnosti stalo.)

Pokud váš počáteční běh Bug 1, Bug 2 atd. Ukazuje, že procedura havarovala ve velké části kódu po Bug x, můžete vložit další volání chyby, abyste ji dále zúžili. Nějakým způsobem provedete binární vyhledávání v dlouhém postupu, abyste našli viníka.

Tento článek pro hosta je od Excel MVP Boba Umlasa. Je to z knihy Další Excel mimo krabici. Chcete-li zobrazit další témata v knize, klikněte sem.

Zajímavé články...