Kaatumisen aiheuttaman kaventaminen - Excel-vinkit

Sisällysluettelo

Joskus Excel antaa yksinkertaisesti viestin "Excel on lakannut toimimasta. Pahoittelemme haittaa. "

Kun saat tällaisen viestin, voit painaa Ctrl + alt = "" + Delete ja avata työkirjan uudelleen (toivottavasti tallentanut tekemäsi työn!) Ja haluaa käydä läpi koodin löytääksesi loukkaavan lausunnon. Kun selaat koodia läpi yhden, kaikki voivat toimia hyvin, mutta kun suoritat sen täydellä nopeudella, se voi jälleen kaatua. Kuinka löydät loukkaavan lausunnon?

Voit kirjoittaa yksinkertaisen koodirivin jokaisen koodirivin väliin, joka voi olla syyllinen. Joten VBA-koodi voi alun perin näyttää tältä:

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

Tämä menettely ei todellakaan kaadu, mutta se kuvaa, mitä voit tehdä, jos huomaat, että koodi kaatuu, kun se suoritetaan täydellä nopeudella, mutta ei kun astut sen läpi.

Vaihdat yllä olevan koodin tähän lisäämällä lauseita Bug 1, Bug 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

Tässä on virhetoiminto:

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

Tämä toimenpide tallentaa arvon rekisteriin. SaveSettingin syntaksi on:

Tallenna syntaksin asetus

Kolmen ensimmäisen parametrin tapauksessa sano, että käytät EOTB2: ta (for Excel Outside the Box 2) - satunnainen valinta. Voit sen sijaan käyttää SaveSetting "X", "X", "X", numero. Jos käytät tätä paljon, voit hyödyntää kolmea tasoa AppName, Section ja Key. Tällä tavoin, jos sinulla on monia osioita AppName-sovelluksessa, voit puhdistaa kaikkien asetusten rekisterin käyttämällä yksinkertaista DeleteSetting "EOTB2" (tai mitä tahansa AppName-asetusta), ja myös kaikki osiot ja avaimet poistetaan.

Nyt suoritat menettelyn täydellä nopeudella, ja se kaatuu. Joten käynnistät Excelin uudelleen, pääset VBE: hen, avaa Välitön-ikkuna (painamalla Ctrl + G) ja kirjoita tämä:

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

Jos tämä menettely palauttaa esimerkiksi 4, se kaatui joskus vian 4 jälkeen. On epätodennäköistä, että If / End If -osio oli syyllinen; todennäköisemmin se oli ActiveWorkbook.Unprotect SheetPassword. (Muista, että tämä on vain esimerkki, ei sitä, mitä todella on tapahtunut.)

Jos Bug 1: n, Bug 2: n jne. Ensimmäinen suorituksesi osoittaa, että menettely kaatui suuressa osassa koodia Bug x: n jälkeen, voit lisätä lisää vikakutsuja kaventaaksesi sitä edelleen. Tee tavallaan binäärihaku pitkässä menettelyssä syyllisen löytämiseksi.

Tämä vierasartikkeli on peräisin Excel MVP Bob Umlasilta. Se on kirjassa More Excel Outside the Box. Näet muut kirjan aiheet napsauttamalla tätä.

Mielenkiintoisia artikkeleita...