如何处理间歇性弹出 window

How to handle intermittent pop-up window

此宏的目标是在输入 Excel 文件的一列中的每个订单的账单备注中添加正确的运输值。

预期的结果是顺利的运行。实际结果是脚本 运行 一直运行良好,直到它处理一个订单,该订单在保存更改后显示弹出 window 未优化容器。 运行-time error 619: The control could not be found by id 是错误信息。

此脚本已循环。根据错误的位置,我假设脚本正在尝试 运行 再次循环,但由于此弹出窗口 window 位于屏幕中间,因此无法前进。

我在Range ("E" & i) = "uploaded"之前的代码的最后一行尝试了ErrhandlerOn Error GoToOn Error Resume Next但是当弹出时脚本总是停在该行上-up 没有出现。

这是我的代码,以粗体显示我认为可以解决弹出窗口问题的行。我不知道,我也不能应用一个策略,如果弹出窗口没有出现,允许宏忽略这一行。

所以,简而言之,如果没有显示未优化的容器,我该如何让脚本忽略这一行,如果显示了则执行单击是?

我检查过https://answers.sap.com/questions/3285089/check-for-popup-within-script.html

'step 2 - VA02

Dim concat As String
concat = Range("D2")
Dim cell As String
Dim i As String

i = 2
cell = Range("B" & i)
concat = Range("D" & i)

session.FindById("wnd[0]").maximize
session.FindById("wnd[0]/tbar[0]/btn[15]").press
session.FindById("wnd[0]/tbar[0]/btn[15]").press
session.FindById("wnd[0]/tbar[0]/okcd").Text = "VA02"
session.FindById("wnd[0]").sendVKey 0

Do While cell <> ""
cell = Range("B" & i)
concat = Range("D" & i)

session.FindById("wnd[0]/usr/ctxtVBAK-VBELN").Text = cell
session.FindById("wnd[0]").sendVKey 0
session.FindById("wnd[0]").sendVKey 0
**'session.findById("wnd[1]/tbar[0]/btn[0]").press**
session.FindById("wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV45A:4021/btnBT_HEAD").press
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT").Select
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/cntlSPLITTER_CONTAINER/shellcont/shellcont/shell/shellcont[0]/shell").selectItem "ZZ05", "Column1"
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/cntlSPLITTER_CONTAINER/shellcont/shellcont/shell/shellcont[0]/shell").ensureVisibleHorizontalItem "ZZ05", "Column1"
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/cntlSPLITTER_CONTAINER/shellcont/shellcont/shell/shellcont[0]/shell").doubleClickItem "ZZ05", "Column1"
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/cntlSPLITTER_CONTAINER/shellcont/shellcont/shell/shellcont[1]/shell").setSelectionIndexes 0, 100
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/btnTP_DELETE").press
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/cntlSPLITTER_CONTAINER/shellcont/shellcont/shell/shellcont[1]/shell").Text = concat
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/cntlSPLITTER_CONTAINER/shellcont/shellcont/shell/shellcont[1]/shell").setSelectionIndexes 47, 47
session.FindById("wnd[0]/tbar[0]/btn[11]").press
**'session.findById("wnd[1]/usr/btnZSPOP_PRIMARY-OPTION1").press**

Range("E" & i) = "uploaded"

i = i + 1
    
Loop

MsgBox ("Done")
    
End Sub

这将检查弹出窗口是否出现。

If session.ActiveWindow.Name = "wnd[1]" Then
    session.findById("wnd[1]/usr/btnZSPOP_PRIMARY-OPTION1").press
End If