SAP GUI 脚本循环遍历警告消息

SAP GUI script loop though warning messages

下面是用于删除源列表中特定行的 SAP 脚本。 输入 material 号码和工厂后,可能会出现警告消息(待废弃,需要豁免)- 要继续下一步,需要输入 session.findById("wnd[0]").sendVKey 0 一次、两次甚至 3 次。同样,它取决于 material.

上警告消息的数量

在下面的示例中,我有 Enter 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"