首页 > 解决方案 > 如何通过 VBA 在 excel 单元格中返回 SAP 错误消息?

问题描述

我编写了一个使用以下 SAP GUI 的自动化脚本:

objSess.findById("wnd[0]").Maximize
objSess.findById("wnd[0]/tbar[0]/okcd").Text = "flqaf"
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]").sendVKey 17
objSess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").CurrentCellColumn = "TEXT"
objSess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").SelectedRows = "0"
objSess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").DoubleClickCurrentCell
objSess.findById("wnd[0]/usr/ctxtS_BELNR-LOW").Text = W_BPNumber
objSess.findById("wnd[0]/usr/ctxtS_BELNR-LOW").SetFocus
objSess.findById("wnd[0]/usr/ctxtS_BELNR-LOW").caretPosition = 10
objSess.findById("wnd[0]").sendVKey 8
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]/tbar[0]/btn[3]").press

一切正常,但有时问题会在 SAP 中中止,而正是在发生这种情况时,我想通过将术语“错误”写入 excel 单元格来捕获它。

我尝试在 vba 中添加这一行

objSheet.Cells(iRow, 5) = GuiStatusbar.Text

objSheet.Cells(iRow, 5) = objSessFindById("wnd[0]/sbar").Text 

代码仍然运行良好,但我在第 5 列中的单元格仍然为空。任何想法如何解决这个问题?

标签: vbasap-gui

解决方案


如果您稍等片刻,它可能会有所帮助。

例如:

...
objSess.findById("wnd[0]").sendVKey 0

waitTill = Now() + TimeValue("00:00:01")
While Now() < waitTill
 DoEvents
Wend

if objSess.findById("wnd[0]/sbar").messageType = "E" then 'other types: W, I, S, A
 objSheet.Cells(iRow, 5) = objSessFindById("wnd[0]/sbar").Text 
end if

objSess.findById("wnd[0]/tbar[0]/btn[3]").press
...

问候, ScriptMan


推荐阅读