VBA驱动SAP GUI实现办公自动化(一)

小攀写了一系列关于驱动SAP GUI实现办公自动化的文章。其实如果我们的实际业务不是太复杂,熟悉VBA语法的话,可以用Excel VBA驱动SAP GUI做很多事情。它是自动化的。无论是VBA驱动SAP,本质都是使用SAP对外开放的SAP GUI API。今天小攀带你揭开VBA驱动SAP的奥秘。

我们首先需要确保对应的SAP连接开启了【脚本录制和回放】功能,如下图:

如果此项为灰色,说明该功能已被SAP管理员出于各种原因禁用。我们需要联系公司的 SAP 后台支持团队,想办法启用这个功能。之后,我们就可以大方地录制脚本了。脚本(VBS文件)的具体存储路径可以从下图中清楚地看出:

因为生成的脚本默认是.vbs,而且VBS语法和VBA几乎一样,所以我们可以很方便的把这段代码复制到一个VBA模块中。小攀这里记录了一个SAP登录界面的操作。具体VBS代码如下:

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]/usr/txtRSYST-BNAME").text = "user001"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "********"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").setFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 7
session.findById("wnd[0]").sendVKey 0

相信作为新手的你一定已经迫不及待准备把这堆代码复制到VBA中了,如下图:

就在我们以为找到了办法,想大打出手的时候,直接点击【运行子进程】,你会发现这段代码无法编译:

图片[1]-VBA驱动SAP GUI实现办公自动化(一)-唐朝资源网

真的很烦!

其实我们完全不用慌,VBE不仅有错误提示,而且在代码中的word上仔细定位错误。如果你已经有一定的VBA基础,不难发现VBA中的保留字是指整个Excel应用实例。

要消除这个编译错误,其实方法超级简单。用另一个对象名来引用它,修改后的VBA代码如下:

Sub sapAutomation()
    '通过VBA连接SAP GUI实现自动化登录
    If Not IsObject(Application) Then
       Set SapGuiAuto = GetObject("SAPGUI")
       Set sapApplication = SapGuiAuto.GetScriptingEngine
    End If

图片[2]-VBA驱动SAP GUI实现办公自动化(一)-唐朝资源网

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 Application, "on" End If

图片[3]-VBA驱动SAP GUI实现办公自动化(一)-唐朝资源网

session.findById(
"wnd[0]").maximize session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "user001" session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "********" session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 7 session.findById("wnd[0]").sendVKey 0 End Sub

(●​​’◡’●) 你有没有发现程序员的工作实际上在某种程度上并不难?不如快点好好练习一下代码看看吧?

© 版权声明
THE END
喜欢就支持一下吧
点赞274 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片