Макро-цикл IBM iSeries AS400 VBscript не завершается, несмотря на выполнение условия выхода
Я создал макрос в VBA для нашей среды IBM iSeries / AS400 / green screen, который находит номера позиций в заказах на покупку, а затем изменяет их цену и выходит из заказа на покупку. Внутри макроса есть цикл, используемый для анализа каждой строки заказа на покупку, а затем перехода на следующую страницу строк, если номер не найден на первой странице. Вот код для цикла:
'ItemNum and Price are entered by the user within Excel
Do Until IBMItemNum = ItemNum
If NumRow = 11 Then
'There are ten lines within purchase orders, after which one must page down
'to see the rest of the purchase order. This is where the problem occurs
autECLSession.autECLPS.SendKeys "[pagedn]"
NumRow = 1
End If
IBMItemNum = autECLSession.autECLPS.GetText(NumRow, 2, 5)
If IBMItemNum = ItemNum Then
autECLSession.autECLPS.SetCursorPos NumRow, 66
autECLSession.autECLPS.SendKeys Price
autECLSession.autECLPS.SendKeys "[field+]"
autECLSession.autECLPS.SendKeys "[enter]"
'After the item has been found and the price entered, the macro exits the PO
'Entering PageDown after the PO has been exited crashes the AS400 session
Exit Do
Else
'Check the next row
NumRow = NumRow + 1
End If
Loop
Этот макрос может успешно читать каждое число на первой странице заказа на покупку подряд, если и только если я удаляю команду PageDown SendKeys из цикла. Однако, даже если ItemNum является первым IBMItemNum в PO, макрос не выйдет из цикла и переместится вниз (что также означает, что цикл повторяется более 10 раз). В моем коде чего-то не хватает для условия выхода?
1 ответ
Вам нужно будет задержать после autECLSession.autECLPS.SendKeys "[enter]"
, Это даст экрану время для обновления.
Sleep API идеален Sleep 250
остановит ваш код на 500 миллисекунд (1/2 секунды).
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Самый простой способ - использовать большую задержку. В качестве альтернативы, вы можете использовать меньшие задержки и использовать GetText
чтобы увидеть, обновился ли экран.
'ItemNum and Price are entered by the user within Excel
Do
If NumRow = 11 Then
'There are ten lines within purchase orders, after which one must page down
'to see the rest of the purchase order. This is where the problem occurs
autECLSession.autECLPS.SendKeys "[pagedn]"
NumRow = 1
End If
IBMItemNum = autECLSession.autECLPS.GetText(NumRow, 2, 5)
If IBMItemNum = ItemNum Then
autECLSession.autECLPS.SetCursorPos NumRow, 66
autECLSession.autECLPS.SendKeys Price
autECLSession.autECLPS.SendKeys "[field+]"
autECLSession.autECLPS.SendKeys "[enter]"
Sleep 500
'After the item has been found and the price entered, the macro exits the PO
'Entering PageDown after the PO has been exited crashes the AS400 session
Exit Do 'Not needed
Else
'Check the next row
NumRow = NumRow + 1
End If
DoEvents
Loop Until IBMItemNum = ItemNum