Mengecilkan Perkara Yang Menyebabkan Kerosakan - Petua Excel

Kadang-kadang Excel hanya memberikan mesej seperti "Excel telah berhenti berfungsi. Kami mohon maaf atas sebarang kesulitan. "

Apabila anda mendapat mesej seperti itu, anda mungkin menekan Ctrl + alt = "" + Padam dan buka buku kerja sekali lagi (semoga anda dapat menyimpan apa sahaja kerja yang telah anda lakukan!), Ingin meneliti kod tersebut untuk mencari penyataan yang menyinggung perasaan. Apabila anda melangkah kod tunggal, semuanya mungkin berfungsi dengan baik, tetapi apabila anda menjalankannya dengan kelajuan penuh, sekali lagi ia mungkin akan rosak. Bagaimana anda dapat mencari penyataan yang menyinggung perasaan?

Anda boleh menulis baris kod sederhana antara setiap baris kod yang boleh menjadi pelakunya. Jadi kod VBA pada asalnya mungkin kelihatan seperti ini:

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

Prosedur ini, sebenarnya, tidak mogok, tetapi ini menggambarkan apa yang boleh anda lakukan sekiranya anda mendapati kod itu terhempas ketika dijalankan dengan kelajuan penuh tetapi tidak ketika anda melaluinya.

Anda menukar kod di atas menjadi ini, dengan penyataan yang disisipkan Bug 1, Bug 2, dan lain-lain:

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

Inilah prosedur pepijat:

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

Prosedur ini menyimpan nilai dalam pendaftaran. Sintaks untuk SaveSetting adalah:

Sintaks SimpanSetting

Untuk tiga parameter pertama, katakan bahawa anda menggunakan EOTB2 (untuk Excel Di Luar Kotak 2) - pilihan rawak. Anda boleh menggunakan SaveSetting "X", "X", "X", num. Sekiranya anda banyak menggunakan ini, anda boleh memanfaatkan tiga tahap AppName, Section, dan Key. Dengan cara itu, jika anda mempunyai banyak bahagian dalam AppName, anda boleh membersihkan pendaftaran untuk semua tetapan anda dengan menggunakan DeleteSetting "EOTB2" yang mudah (atau apa sahaja yang anda tetapkan untuk AppName), dan semua bahagian dan kunci juga akan dihapuskan.

Sekarang anda menjalankan prosedur dengan kelajuan penuh, dan ia tidak berfungsi. Oleh itu, anda mulakan semula Excel, sampai ke VBE, buka tetingkap Segera (dengan menekan Ctrl + G), dan taipkan ini:

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

Sekiranya prosedur ini mengembalikan 4, misalnya, maka ia akan terhenti seketika selepas Bug 4. Tidak mungkin bahagian If / End If adalah pelakunya; kemungkinan besar ia adalah ActiveWorkbook.Unprotect SheetPassword. (Ingat bahawa ini hanyalah contoh, bukan apa yang sebenarnya berlaku.)

Sekiranya jalan awal Bug 1, Bug 2, dan lain-lain menunjukkan bahawa prosedur itu terhenti di bahagian besar kod setelah Bug x, anda boleh memasukkan lebih banyak panggilan bug untuk menyempitkannya lebih jauh. Anda semacam melakukan carian binari dalam prosedur yang panjang untuk mencari pelakunya.

Artikel tetamu ini adalah dari Excel MVP Bob Umlas. Ini adalah dari buku, Lebih Banyak Excel Di Luar Kotak. Untuk melihat topik lain dalam buku, klik di sini.

Artikel menarik...