首页 > 解决方案 > 如何处理间歇性弹出窗口

问题描述

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

预期的结果是平稳运行。实际结果是脚本运行良好,直到它在保存更改后显示弹出窗口未优化容器的订单上运行。运行时错误 619: The control could not found by id 是错误信息。

这是可能会或可能不会出现的弹出窗口

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

我之前在代码的最后一行尝试过Errhandler, On Error GoTo,但是当没有出现弹出窗口时,脚本总是会停在该行上。On Error Resume NextRange ("E" & i) = "uploaded"

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

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

我已经检查了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\10").Select
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT\10/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\10/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\10/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\10/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\10/ssubSUBSCREEN_BODY:SAPMV45A:4152/subSUBSCREEN_TEXT:SAPLV70T:2100/btnTP_DELETE").press
session.FindById("wnd[0]/usr/tabsTAXI_TABSTRIP_HEAD/tabpT\10/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\10/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

标签: vbapopupsap-gui

解决方案


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

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

推荐阅读