本帖最后由 Will.li 于 2017-8-22 22:30 编辑
前言
论坛里前辈多,如有问题,敬请斧正!
这是我在自己的公众号【Excel轻松学】里面写的一篇文章,算是抛砖引玉吧!
我已经编写了多个批量录入或者更改SAP的程序,可以极大地节省工作时间,感兴趣的朋友可以一起互相学习、讨论。
后面我有时间再分享几个常用的方法,这个通过录制脚本是得不到的。
公众号原文
今天给大家介绍点“高大上”的东西。所谓“高大上”的东西嘛,有点标题党的嫌疑,但是在实际应用中还是属于偏小众的知识。 今天要介绍的知识就是用VBA控制SAP。玩儿Excel的公众号有很多,但是涉及到这个知识的Excel公众号,大概还没有,因为会VBA的人不一定会SAP,会SAP的人不一定会VBA,既会VBA又会SAP的人不一定开了公众号。如果有这方面的专业人士,请留言告诉我,我们也好交流一下。 SAP又是个什么东西?不知道的小伙伴请看以下百度出来的信息。
简单点概括一下,SAP就是最大的业务软件公司,大部分世界500强公司都在用,总之很NB~ 用VBA控制SAP,这要得益于SAP支持VB Script。SAP可以将屏幕操作记录下来,转换成VB Script代码。如果重新执行一遍录制的脚本,就会将刚才录制的操作再重复操作一遍,就跟放电影似的。对于固定的、复杂的操作,我们可以录下来,下次只要双击脚本就可以自动执行了,不需要再一步一步地操作了。但是这也只能算是低阶玩儿法,因为大部分情况下,在往SAP录入内容时,具体内容都不一样。所以我们的目标是 -- 批量操作。 下面介绍的也算是入门知识,算是抛砖引玉吧!但是了解了这些之后,就可以开始尝试制作批量录入的程序了。
1录制脚本
点击以下菜单中的“Script Recording and Playback”。
弹出一个像录音机一样的对话框,点击红色按钮就开始录制,点击方块按钮就结束录制,点击绿色三角按钮则运行录制的脚本,点击“More”按钮,则显示脚本保存的选项,比如保存路径等。
2将代码移植到Excel
使用记事本打开录制好的一个脚本文件,脚本开头通常显示如下。
把这段代码直接复制到Excel还不能使用,因为里面的application对象跟Excel对象名称Application重复了,我们需要稍加修改,将application替换成一个自定义的名称,比如applications、objSAP等等,自己定义一个就可以了。
下面这一句是在命令框中输入transaction code,比如下面输入/nmb51命令。 session.findById("wnd[0]/tbar[0]/okcd").text = "/nmb51" 下面是一个更改后的代码示例。 注意以上代码可以放到模块中。关于这方面的基础知识,请戳以下链接。
3按回车键
录制代码中常见的这句sendVkey 0就表示按回车键。 session.findById("wnd[0]").sendVKey 0
4获取状态栏消息
下面这句可以获取状态栏的消息文本
session.ActiveWindow.findByName("sbar", "GuiStatusbar").Text 下面这句可以获取状态栏的消息类型
session.ActiveWindow.findByName("sbar", "GuiStatusbar").MessageType MessageType的值如下。 Value | Description | S | Success | W | Warning | E | Error | A | Abort | I | Information |
以上语句都可以赋值给一个变量。在循环处理过程中,可能会遇到意料之外的情况,这时我们就可以通过系统消息来做一个判断。 5在输入框中填入内容
录制代码中类似如下文本表示在文本框中填入内容。 session.findById("wnd[0]/usr/ctxtMSEG-MATNR").Text = "具体内容" session.findById("wnd[0]/usr/txtMSEG-ERFMG").Text="具体内容"
6通过循环实现批量录入
了解了以上代码的含义,我们可以在VBA中通过For... Next循环等获取Excel表格的内容并操作SAP。我相信能看到这里的人大概也懂一些VBA,并且也是SAP用户,所以具体实现方法我就不再举例赘述。 感兴趣的小伙伴就快试一试吧!SAP用户进来留个言吧! --End-- 欢迎加入QQ群9735376参与讨论。
|