vba - 如何处理间歇性弹出窗口
问题描述
此宏的目标是在输入 Excel 文件的列中的每个订单的帐单备注中添加正确的车厢值。
预期的结果是平稳运行。实际结果是脚本运行良好,直到它在保存更改后显示弹出窗口未优化容器的订单上运行。运行时错误 619: The control could not found by id 是错误信息。
这个脚本是循环的。根据错误的位置,我假设脚本正在尝试再次运行循环,但由于此弹出窗口位于屏幕中间,因此无法前进。
我之前在代码的最后一行尝试过Errhandler
, On Error GoTo
,但是当没有出现弹出窗口时,脚本总是会停在该行上。On Error Resume Next
Range ("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
解决方案
这将检查弹出窗口是否出现。
If session.ActiveWindow.Name = "wnd[1]" Then
session.findById("wnd[1]/usr/btnZSPOP_PRIMARY-OPTION1").press
End If
推荐阅读
- javascript - 正则表达式:指组的交替
- sapui5 - SAPUI5 数据类型中的错误过滤不允许
- google-assistant-sdk - 与 IFTTT 集成后,Google 助理无法正常工作
- xml - VB.NET 4.7:尝试将选中的项目从 CheckedListBox 添加到 XML 元素中,但我得到了意外的输出
- kernel - [qemu]一直黑屏!我认为这个现象来自内核的配置文件
- javascript - JSON 加载器模型
- python - 尽可能快地散列 1000 个图像文件(2000x2000 加上分辨率)(Python)
- javascript - 在客户端 javascript 中使用 i18next 和 XHR 后端
- python - 为什么 Jupyter Notebook 不会加载模块?
- android - 从相机捕获和显示图像?