Problem z On Error

0

Cześć,
mam następujący problem dotyczący VBA i On error. Mianowicie mam kod makra, który łączy się z sap wykonuje jakieś czynności i gdy natyka error ma się przenieść do odpowiedniego miejsca w kodzie przez on error goto XXX. Problem polega na tym, że o ile 1 błąd jest przechwytywany i przenosi się do miejsca np. XXX o tyle następne on error już nie przechwytują błędu tylko wyrzucają debuga.
Próbowałem resetować on error przez Err.Clear oraz On Error GoTo 0 ale to się nie sprawdza. Co ciekawe jeśli pominąć by 1 on error i zacząć kod od tego 2 to wtedy nie wyrzuca debuga i działa poprawnie przy 2 błędzie ale w kolejnych występuje ten sam problem i znowu pojawia się błąd.

Wklejam kawałek kodu poniżej. Może ktoś byłby wstanie zdiagnozować gdzie leży problem.

On Error GoTo NoInfoHeader
info_header = session.findById("wnd[1]/usr/txtMESSTXT1").caretPosition
If info_header = "" Then GoTo NoInfoHeader
session.findById("wnd[1]/tbar[0]/btn[0]").press


NoInfoHeader:
Err.Clear
On Error GoTo 0

On Error GoTo NoInfoCheck
session.findById("wnd[0]/usr/subSUB0:SAPLMEDCMV:0100/cntlDCMGRIDCONTROL1/shellcont/shell").pressToolbarButton "&MEDCMCOMPLETE"
0

Takie skakanie nie ma sensu, jak programujesz w taki sposób to już lepiej samemu obsługiwać błędy:

On Error Resume Next
info_header = session.findById("wnd[1]/usr/txtMESSTXT1").caretPosition
If info_header <> "" Then
    session.findById("wnd[1]/tbar[0]/btn[0]").press
End if
If err.number <> 0 then
     Err.Clear
      'kod do obsługi błędu
End If
 
0

@Panczo:
Dzięki za odpowiedź. Jednak problem polega głównie na tym, że nawet jeśli napisze to w formie on error resume next to dla 1 błędu zadziała ale dla kolejnego on error resume next wyrzuci debug.

Przykładowo:

On Error Resume Next
info_header = session.findById("wnd[1]/usr/txtMESSTXT1").caretPosition
If info_header <> "" Then
    session.findById("wnd[1]/tbar[0]/btn[0]").press
End if
If err.number <> 0 then
     Err.Clear
      On Error Resume next
        'w tym miejscu pojawia się debug
      session.findById("wnd[0]/usr/subSUB0:SAPLMEDCMV:0100/cntlDCMGRIDCONTROL1/shellcont/shell").pressToolbarButton "&MEDCMCOMPLETE" 
         
End If
 
0

Ale on error resume Next piszesz raz na początku...

1 użytkowników online, w tym zalogowanych: 0, gości: 1