1. 开启脚本和录制回放功能

a.输入事务RZ11,回车进入对应事务
b.参数名称输入:sapgui/user_scripting,点击显示进入设置页面
c.点击更改值,新值输入:True,点击保存
  1. 录制脚本

a.点击设置按钮,确认脚本录制和回放(P)...

b.点击后出现以下录制按钮

c.点击红色录制案件,录制操作,录制完成后,点击红色方框按钮。

d.点击更多,查看脚本文件

举例:将输入RZ11,回车,输入sapgui/user_scripting,点击显示的操作录制后的vbs脚本。

e.打开Excel,开发工具,插入按钮

f.点击新建

g.将刚才的vbs内容复制到Excel中

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
session.findById("wnd[0]/tbar[0]/okcd").text = "RZ11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").text = "sapgui/user_scripting"
session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").caretPosition = 21
session.findById("wnd[0]/usr/btnPANZEIGEN_1000").press

h.将变量Application重命名为sapApplication,如果不重命名,执行时会出现以下错误。

重命名后可以行代码

Sub 按钮1_Click()
    If Not IsObject(SapApplication) Then
       Set SapGuiAuto = GetObject("SAPGUI")
       Set SapApplication = SapGuiAuto.GetScriptingEngine
    End If
    If Not IsObject(Connection) Then
       Set Connection = SapApplication.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 SapApplication, "on"
    End If
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").Text = "RZ11"
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").Text = "sapgui/user_scripting"
    session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").caretPosition = 21
    session.findById("wnd[0]/usr/btnPANZEIGEN_1000").press
End Sub

i.回到Excel,点击执行按钮,弹出Sap的确认按钮,点击确定即可执行刚才的脚本。

  1. 实现自动填写Remark脚本

执行以下代码,进入ME21N的T-Code画面

   'TCode
    session.findById("wnd[0]/tbar[0]/okcd").Text = "ME21N"
    session.findById("wnd[0]").sendVKey 0

点击订单菜单按钮

 ' 其他采购订单
  session.findById("wnd[0]/tbar[1]/btn[17]").press

打开选择凭证画面,输入采购订单,点击其他凭证

' 采购订单
session.findById("wnd[1]/usr/subSUB0:SAPLMEGUI:0003/ctxtMEPO_SELECT-EBELN").Text = "4500015239"
session.findById("wnd[1]").sendVKey 0

点击文本

' 选择文本
 session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14").Select

选择第一个“项目文本”F01

 ' 选择项目文本
 session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/cntlTEXT_TYPES_0200/shell").selectedNode = "F01"

获取文本的字符串内容

' 获取字符串
 srcTxt = session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").Text

选择"Remark1"F08,将项目文本的内容黏贴到Remark1处

        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/cntlTEXT_TYPES_0200/shell").selectedNode = "F12"
        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/cntlTEXT_TYPES_0200/shell").topNode = "F08"
        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").Text = remarkStr + vbCr + ""
        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").setSelectionIndexes 3, 3

获取下拉框的值

nextValue = session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").Value

4.问题排错

执行过程中,出现错误窗口的。

 //查找预想窗口的ID
 If Not session.findById(真实的ID, False) Is Nothing Then
 // 如果存在
 Else
 // 如果不存在
 End if

例如,执行PR采购申请时,提出物料不存在的错误,中止操作,否则获取单号

错误的时候,获取错误窗口

成功的时候,获取左小角的文本编号

实际运行的代码

 //查找预想窗口的ID
 If Not session.findById("wnd[1]/usr/lbl[7,4]", False) Is Nothing Then
    // 中止操作
    Exit Sub
 Else
    // 把单号回填到Excel
    Range(“A1”).Value = GetNum(session.findById("wnd[0]/sbar").Text)
 End if

Logo

一站式 AI 云服务平台

更多推荐