SAP Scripting Tracker基本使用技巧 - VBA 示例

SAP Scripting Tracker 的基本介绍和 Python 代码示例参见上一篇:SAP Scripting Tracker基本使用技巧。本篇提供 基于 VBA 的代码示例。

引用 sapfewse.ocx 控件。

在 VBA 中使用 SAP Scritpting 需要引用 sapfewse.ocx,安装 SAP GUI 之后,在系统中能找到。Windows 下面的位置:C:\Program Files (x86)\SAP\FrontEnd\SapGui

Frame 代码

以下代码来自 Tracker.pdf 帮助文档中的文档进行改下。

'  获取 SAP Session
Public Function GetSession() As Object
    Dim SapGuiAuto As Object
    Dim app As SAPFEWSELib.GuiApplication
    Dim connection As SAPFEWSELib.GuiConnection
    Dim session As SAPFEWSELib.GuiSession
    
    If app Is Nothing Then
        Set SapGuiAuto = GetObject("SAPGUI")
        Set app = SapGuiAuto.GetScriptingEngine
    End If
    
    If connection Is Nothing Then
        Set connection = app.Children(0)
    End If
    
    If session Is Nothing Then
        Set session = connection.Children(0)
    End If
    
    Set GetSession = session
End Function

' 返回 Easy Access 界面
Public Sub returnEasyAccess(sess As Object)
    sess.FindById("wnd[0]/tbar[0]/okcd").Text = "/n"
    sess.FindById("wnd[0]").SendVKey (0)
End Sub

使用 Tracker 实现批量开发票

下面的代码实现基于交货单调用 VF01 进行开票。在 Excel 中,数据有 4 列,其中前面 3 列用于提供导入的数据,第 4 列获取系统返回值。

以下就是调用 VF01 代码,非常直观:

Option Explicit

Public Sub ExecuteVF01()
    Dim session As Object
    Set session = GetSession
    
    Call returnEasyAccess(session)
    
    ' 运行VF01
    Dim i As Long
    For i = 2 To Sheet1.UsedRange.Rows.Count
        If Sheet1.Range("A" & i).Value = "EOF" Then Exit Sub
        
        ' 每次先回到Easy Access 界面
        Call returnEasyAccess(session)
        Dim leftCell As Range
        Set leftCell = Sheet1.Range("A" & i)
        
        session.FindById("wnd[0]/tbar[0]/okcd").Text = "VF01"
        session.FindById("wnd[0]").SendVKey (0)
        session.FindById("wnd[0]/usr/cmbRV60A-FKART").Key = leftCell.Offset(0, 1).Value   '发票类型
        session.FindById("wnd[0]/usr/ctxtRV60A-FKDAT").Text = leftCell.Offset(0, 2).Value '日期
        session.FindById("wnd[0]/usr/tblSAPMV60ATCTRL_ERF_FAKT/ctxtKOMFK-VBELN[0,0]").Text = leftCell.Value '交货单
        session.FindById("wnd[0]/usr/tblSAPMV60ATCTRL_ERF_FAKT/ctxtKOMFK-VBELN[0,0]").CaretPosition = 8
        session.FindById("wnd[0]").SendVKey (0)
        session.FindById("wnd[0]/tbar[0]/btn[11]").Press
        
        ' 读取SAP返回消息
        leftCell.Offset(0, 3).Value = session.FindById("wnd[0]/sbar").Text    
    Next
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值