Bazen Excel, "Excel çalışmayı durdurdu" şeklinde bir mesaj verir. Verdiğimiz rahatsızlıktan dolayı özür dileriz. "
Böyle bir mesaj aldığınızda, rahatsız edici ifadeyi bulmak için kodda ilerlemek isteyerek Ctrl + alt = "" + Delete tuşlarına basabilir ve çalışma kitabını tekrar açabilirsiniz (umarım yaptığınız işi kaydetmişsinizdir!). Kodda tek bir adım attığınızda, her şey yolunda gidebilir, ancak tam hızda çalıştırdığınızda bir kez daha çökebilir. Rahatsız edici ifadeyi nasıl bulabilirsiniz?
Suçlu olabilecek her kod satırı arasına basit bir kod satırı yazabilirsiniz. Dolayısıyla, VBA kodu başlangıçta şöyle görünebilir:
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
Bu prosedür aslında çökmez, ancak bu kodun tam hızda çalıştırıldığında çöktüğünü görürseniz ancak adım attığınızda değil, ne yapabileceğinizi gösterir.
Yukarıdaki kodu, Hata 1, Hata 2, vb. İfadeler ekleyerek değiştirirsiniz:
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
İşte hata prosedürü:
Sub Bug(num As Integer) SaveSetting "EOTB2", "EOTB2", "EOTB2", num End Sub
Bu prosedür, kayıt defterine bir değer kaydeder. SaveSetting için sözdizimi şöyledir:

İlk üç parametre için, rastgele bir seçim olan EOTB2'yi (Kutunun Dışındaki Excel için) kullandığınızı söyleyin. Bunun yerine SaveSetting "X", "X", "X", num kullanabilirsiniz. Bunu çok kullanırsanız, AppName, Section ve Key gibi üç seviyeden yararlanabilirsiniz. Bu şekilde, AppName'de birçok bölümünüz varsa, basit DeleteSetting "EOTB2" (veya UygulamaAdı için ne ayarladıysanız) kullanarak tüm ayarlarınız için kayıt defterini temizleyebilirsiniz ve tüm bölümler ve anahtarlar da silinecektir.
Şimdi prosedürü tam hızda çalıştırıyorsunuz ve çöküyor. Böylece Excel'i yeniden başlatırsınız, VBE'ye gidin, Hemen penceresini açın (Ctrl + G tuşlarına basarak) ve şunu yazın:
? GetSetting(“EOTB2”,”EOTB2”,”EOTB2”)
Örneğin, bu prosedür 4 döndürürse, Hata 4'ten bir süre sonra çöktü. Suçlu If / End If bölümünün olması olası değildir; daha çok ActiveWorkbook.Unprotect SheetPassword idi. (Bunun sadece bir örnek olduğunu unutmayın, gerçekte ne olduğu değil.)
Hata 1, Hata 2, vb. İlk çalıştırmanız, prosedürün Hata x'ten sonra büyük bir kod bölümünde çöktüğünü gösteriyorsa, daha fazla daraltmak için daha fazla hata çağrısı ekleyebilirsiniz. Suçluyu bulmak için uzun bir prosedürde ikili arama yaparsınız.

Bu konuk makale Excel MVP Bob Umlas'tan. Kutunun Dışında Daha Fazla Excel kitabından. Kitaptaki diğer konuları görmek için burayı tıklayın.