如何解决SAP GUI 脚本循环虽然警告消息
以下是用于删除源列表中特定行的 SAP 脚本。
输入材料编号和工厂后,可能会出现警告消息(待定废弃,需要豁免)- 要继续下一步,需要输入 session.findById("wnd[0]").sendVKey 0
一次、两次甚至 3 次。同样,它取决于材料上警告消息的数量。
在下面的示例中,我输入了 3 次,但不是默认使用 Enter 3 次,而是希望它更具动态性。如果或只要有警告消息,就应该使用 Enter 否则移动到脚本中的下一步。
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session,"on"
WScript.ConnectObject application,"on"
End If
session.findById("wnd[0]").maximize
Dim objExcel
Dim objSheet,intRow,i
Set objExcel = GetObject(,"Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet
For i = 2 to objSheet.UsedRange.Rows.Count
If IsEmpty(objSheet.Cells(i,4)) Then
COL1 = Trim(CStr(objSheet.Cells(i,1).Value)) 'Column1
COL2 = Trim(CStr(objSheet.Cells(i,2).Value)) 'Column2
COL3 = Trim(CStr(objSheet.Cells(i,3).Value)) 'Column3
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/nme01"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtEORD-MATNR").text = COL1 'Material number
session.findById("wnd[0]/usr/ctxtEORD-WERKS").text = COL2 'Plant
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPLMEORTC_0205").getAbsoluteRow(COL3-1).selected = true 'Row to delete in SL
session.findById("wnd[0]/usr/tblSAPLMEORTC_0205/ctxtEORD-VDATU[0,6]").setFocus
session.findById("wnd[0]/usr/tblSAPLMEORTC_0205/ctxtEORD-VDATU[0,6]").caretPosition = 0
session.findById("wnd[0]/tbar[1]/btn[14]").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
session.findById("wnd[0]/tbar[0]/btn[11]").press
objSheet.Cells(i,4) = "Deleted"
aux=COL1 & " " & COL2 & " " & COL3
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >> C:\SCRIPT\PlOrCreationLog.txt")
End If
next
msgbox "Process Completed"
解决方法
试试这个代码
Do While session.findById("wnd[0]/sbar").messageType = "W"
session.findById("wnd[0]").sendVKey 0
Loop
完整的代码应该是这样的
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session,"on"
WScript.ConnectObject application,"on"
End If
session.findById("wnd[0]").maximize
Dim objExcel
Dim objSheet,intRow,i
Set objExcel = GetObject(,"Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet
For i = 2 to objSheet.UsedRange.Rows.Count
If IsEmpty(objSheet.Cells(i,4)) Then
COL1 = Trim(CStr(objSheet.Cells(i,1).Value)) 'Column1
COL2 = Trim(CStr(objSheet.Cells(i,2).Value)) 'Column2
COL3 = Trim(CStr(objSheet.Cells(i,3).Value)) 'Column3
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/nme01"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtEORD-MATNR").text = COL1 'Material number
session.findById("wnd[0]/usr/ctxtEORD-WERKS").text = COL2 'Plant
session.findById("wnd[0]").sendVKey 0 ' <= You need to press Enter at least once before you check for a warning in the statu bar
Do While session.findById("wnd[0]/sbar").messageType = "W"
session.findById("wnd[0]").sendVKey 0
Loop
session.findById("wnd[0]/usr/tblSAPLMEORTC_0205").getAbsoluteRow(COL3-1).selected = true 'Row to delete in SL
session.findById("wnd[0]/usr/tblSAPLMEORTC_0205/ctxtEORD-VDATU[0,6]").setFocus
session.findById("wnd[0]/usr/tblSAPLMEORTC_0205/ctxtEORD-VDATU[0,6]").caretPosition = 0
session.findById("wnd[0]/tbar[1]/btn[14]").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
session.findById("wnd[0]/tbar[0]/btn[11]").press
objSheet.Cells(i,4) = "Deleted"
aux=COL1 & " " & COL2 & " " & COL3
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >> C:\SCRIPT\PlOrCreationLog.txt")
End If
next
msgbox "Process Completed"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。