У меня есть фрагмент кода, который loops
через мой rows
в Excel, и нахожу первый character
из string
в конкретном column
.Хотя это прекрасно работает с i = i + 1
, когда первый condition
пройден, он затем выполнит другое действие.Внутри действия иногда происходит errors
, поэтому я помещаю On error Handlers
, чтобы перейти к следующему row
.Вот код, который у меня есть.
On Error GoTo errHandler
Check:
While Cells(7 + i, 1).Value <> ""
firstChar = Left(Cells(7 + i, 6).Value, 1)
If firstChar = "A" Then
.findById("wnd[0]/tbar[0]/okcd").Text = "/nmm02"
.findById("wnd[0]").sendVKey 0
.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = ""
.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = Cells(7 + i, 2)
.findById("wnd[0]").sendVKey 0
.findById("wnd[1]/tbar[0]/btn[0]").press
.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").Text = "AN1"
.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").SetFocus
.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").caretPosition = 3
.findById("wnd[1]/tbar[0]/btn[0]").press
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP21/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2731/ctxtMLGN-PLKPT").Text = "AN1"
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP21/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2733/ctxtMLGN-LTKZA").Text = "AN1"
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP21/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2733/ctxtMLGN-LTKZE").Text = "AN1"
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP21/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2733/ctxtMLGN-LTKZE").SetFocus
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP21/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2733/ctxtMLGN-LTKZE").caretPosition = 3
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22").Select
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2734/ctxtMLGT-LGPLA").Text = Cells(7 + i, 6)
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2734/ctxtMLGT-LGPLA").SetFocus
.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2734/ctxtMLGT-LGPLA").caretPosition = 8
.findById("wnd[0]/tbar[0]/btn[11]").press
.findById("wnd[0]/tbar[0]/okcd").Text = "/N"
.findById("wnd[0]").sendVKey 0
ElseIf firstChar = "B" Then
#another action
ElseIf firstChar = "C" Then
#another action
Else:
End If
i = i + 1
errHandler:
Cells(7 + i, 9).Value = "Error"
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[12]").press
session.findById("wnd[0]/tbar[0]/okcd").Text = "/n"
GoTo Check
В принципе, если между действиями нет ошибок, loop
работает нормально и переходит к другому rows
, если есть error
, errHandler
действие будет выполнено, но оно вернется к check:
и снова выполнит тот же row
.Также просто, чтобы все знали, что firstChar
, который я ищу, не существует в каждом row
, он может быть на row 10
, а следующий будет 55th
.Кроме того, я протестировал, добавив i = i + 1
к errHandler
, и да, первый error
был успешно исключен путем перехода к следующему row
.Однако, если он встречает другой error
, то же самое происходит снова, выполняя тот же row
.Это как-то связано с поиском char
'A'
, 'B'
, 'C'
?