ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7102|回复: 13

[原创] 用VBA实现往SAP中批量录入数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-8-22 22:03 | 显示全部楼层 |阅读模式
本帖最后由 Will.li 于 2017-8-22 22:30 编辑

前言
论坛里前辈多,如有问题,敬请斧正!
这是我在自己的公众号【Excel轻松学】里面写的一篇文章,算是抛砖引玉吧!
我已经编写了多个批量录入或者更改SAP的程序,可以极大地节省工作时间,感兴趣的朋友可以一起互相学习、讨论。
后面我有时间再分享几个常用的方法,这个通过录制脚本是得不到的。

公众号原文
今天给大家介绍点“高大上”的东西。所谓“高大上”的东西嘛,有点标题党的嫌疑,但是在实际应用中还是属于偏小众的知识。
今天要介绍的知识就是用VBA控制SAP。玩儿Excel的公众号有很多,但是涉及到这个知识的Excel公众号,大概还没有,因为会VBA的人不一定会SAP,会SAP的人不一定会VBA,既会VBA又会SAP的人不一定开了公众号。如果有这方面的专业人士,请留言告诉我,我们也好交流一下。
SAP又是个什么东西?不知道的小伙伴请看以下百度出来的信息。
01 baidu.png

简单点概括一下,SAP就是最大的业务软件公司,大部分世界500强公司都在用,总之很NB~
用VBA控制SAP,这要得益于SAP支持VB Script。SAP可以将屏幕操作记录下来,转换成VB Script代码。如果重新执行一遍录制的脚本,就会将刚才录制的操作再重复操作一遍,就跟放电影似的。对于固定的、复杂的操作,我们可以录下来,下次只要双击脚本就可以自动执行了,不需要再一步一步地操作了。但是这也只能算是低阶玩儿法,因为大部分情况下,在往SAP录入内容时,具体内容都不一样。所以我们的目标是 -- 批量操作。
下面介绍的也算是入门知识,算是抛砖引玉吧!但是了解了这些之后,就可以开始尝试制作批量录入的程序了。

1录制脚本

点击以下菜单中的“Script Recording and Playback”。
02 menu.png

弹出一个像录音机一样的对话框,点击红色按钮就开始录制,点击方块按钮就结束录制,点击绿色三角按钮则运行录制的脚本,点击“More”按钮,则显示脚本保存的选项,比如保存路径等。
03 dialog.png

2将代码移植到Excel
使用记事本打开录制好的一个脚本文件,脚本开头通常显示如下。
04 script.png

把这段代码直接复制到Excel还不能使用,因为里面的application对象跟Excel对象名称Application重复了,我们需要稍加修改,将application替换成一个自定义的名称,比如applications、objSAP等等,自己定义一个就可以了。
下面这一句是在命令框中输入transaction code,比如下面输入/nmb51命令。
session.findById("wnd[0]/tbar[0]/okcd").text = "/nmb51"
下面是一个更改后的代码示例。
05 revised.png
注意以上代码可以放到模块中。关于这方面的基础知识,请戳以下链接。

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参与讨论。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-20 21:32 | 显示全部楼层
这个东西好。只是看了还是不懂。如果楼主能做一个实例或者动画。那就好了。已关注楼主公众号。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-21 11:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ja.son 发表于 2018-9-20 21:32
这个东西好。只是看了还是不懂。如果楼主能做一个实例或者动画。那就好了。已关注楼主公众号。

使用SAP的公司一般都有一些技术支持团队,可以做批量更改,但是通常流程都是提交ticket,然后有人来解决你的问题,比较麻烦,可能也比较费时间,不能及时处理。
用vba控制SAP就是解决这个痛点的,实测数据录入速度还可以令人接受,使用起来非常方便,我自己已经做了十几个这样的小程序了,很好用。
如果真是有大量数据需要批量更改的话,一般还是通过技术支持团队来更改比较合适。

TA的精华主题

TA的得分主题

发表于 2018-10-21 15:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
之前公司用的是AS400,也有同事为了方便操作写了对接代码。。不过一般IT部是不太愿意的。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-24 01:18 | 显示全部楼层
sonia_a 发表于 2018-10-21 15:53
之前公司用的是AS400,也有同事为了方便操作写了对接代码。。不过一般IT部是不太愿意的。。

一般要先在测试环境测试好,IT也是怕批量造成错误数据吧,不过实际上使用部门才是数据的负责人,需要保证数据录入、修改正确,IT部门只是技术上支持。

TA的精华主题

TA的得分主题

发表于 2018-10-24 08:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 土司空 于 2018-10-24 09:04 编辑

杯具了,我那个脚本录制的选项是灰色的...
sap.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-24 20:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
土司空 发表于 2018-10-24 08:59
杯具了,我那个脚本录制的选项是灰色的...

那你得先看看自己那里有没有禁用,然后再找管理员确认一下是不是禁用了。

TA的精华主题

TA的得分主题

发表于 2021-8-17 10:37 | 显示全部楼层
使用VBA是方便,速度不行,多的话还是SECATT比较快

TA的精华主题

TA的得分主题

发表于 2021-12-24 22:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-22 13:33 | 显示全部楼层
Will.li 发表于 2018-10-21 11:55
使用SAP的公司一般都有一些技术支持团队,可以做批量更改,但是通常流程都是提交ticket,然后有人来解决 ...

请教大神一下,我用SAP录制的脚本放到VBA里后有一句是这样的:
session.findById("wnd[0]/usr/tblSAPLCOVGTCTRL_0100/ctxtAFVGD-ARBPL[2,0]").Text = "G1047"
我要把[2,0]这句中的0设为变量[2 , k],k是变量,可是实际直接写成
session.findById("wnd[0]/usr/tblSAPLCOVGTCTRL_0100/ctxtAFVGD-ARBPL[2,k]").Text = "G1047" 时k不随变量变化,我应该怎么写才能随变量而变呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-11 10:47 , Processed in 0.039966 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表