2010-08-09 18 views
5

Nie miałem dużego doświadczenia z VBA, ale czasami używam go w pracy. Niedawno natknąłem się na problem, który nie powinien się zdarzyć, i że ani mój szef, ani ja nie potrafimy dojść do tego.Obsługa błędów VBA nie działa w Excelu

Zasadniczo problem polega na tym, że domyślnie Application właściwość DisplayAlerts jest ustawiona na True i nie może być zmieniona z jakiegoś powodu. Prawdopodobnie jest to związane z tym, że po wystąpieniu błędu zawsze wyświetla się komunikat End | Debug | Help i nigdy nie trafia w stosowaną obsługę błędów.

Używam 64-bitowego pakietu Office 2010 na 64-bitowym komputerze z systemem Windows 7. Nie uważam jednak, że jest to problem z platformą, ponieważ testowałem na wielu różnych platformach, systemach operacyjnych i permutacjach oprogramowania, a żadna inna maszyna nie ma tego błędu; tylko mój.

Utworzyłem przykładowy kod na wypadek, gdyby ktoś napotkał to wcześniej lub ma jakieś pomysły. Jedyne, co mogę wymyślić, to to, że mam coś zainstalowanego na mojej maszynie, które to powoduje. Ale po programowym oczyszczeniu i wielu ponownych uruchomieniach, nie jestem bliższy rozszyfrowania tego, co to może być.

Public Sub TestErrorHandler() 

    ' Suppress alerts 
    Application.DisplayAlerts = False 

    Dim strArray(1) As String 
    strArray(0) = "Hello" 
    strArray(1) = "World" 

    ' Set up error handler 
    On Error GoTo ErrHandler 

    For i = 0 To 3 
     MsgBox strArray(i) 
    Next 

    ' Strip the error handler 
    On Error GoTo 0 

    ' Unsuppress alerts 
    Application.DisplayAlerts = True 

    Exit Sub 

    ErrHandler: 

    MsgBox "Error: " & Err.Description 

    Resume Next 

End Sub 

Błąd jest generowany na trzecim wyliczenie for-loop (tak jak powinien). Typ błędu jest nieistotny, istotne jest to, że dostaję błąd i nigdy nie trafię w procedurę obsługi błędów.

Wszelkie sugestie lub pomoc w tym zakresie byłyby bardzo mile widziane.

Wielkie dzięki!

Odpowiedz

21

Naciśnij klawisz ALT + F11 z poziomu programu Excel, aby przejść do edytora VBA.

Przejdź do menu Narzędzia -> element opcji -> zakładka Ogólne.

Ustaw wychwytywanie błędów do „Break on nieobsłużonych błędów”

http://i.msdn.microsoft.com/Aa155729.vba200111pa_f_image004(en-us,office.10).jpg

+0

Pamiętam, że jeden, zajęło mi trochę czasu, aby zrozumieć to zbyt. –

+0

Dziękuję bardzo! Wiedziałem, że to było coś zabawnego, że przeoczyłem. To działało idealnie! Wielkie dzięki :-D –

+0

Dobra odpowiedź. screenshot ftw. –