小爬之前写过一系列Python驱动SAP GUI实现办公自动化的文章,其实如果我们的实际业务不是太复杂,且我们对VBA语法比较熟悉的话,我们完全可以借助Excel VBA来驱动SAP GUI做很多自动化操作了。而无论是python还是VBA来驱动SAP,本质都是利用SAP对外开放的SAP GUI Scripting API。今天,小爬就带大家揭开VBA驱动SAP的神秘面纱。

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

  如果该项为灰色,说明该功能出于各种考量,被SAP管理员禁用了,我们需要联系公司SAP后台支持团队想办法开通该功能,之后我们便可以大大方方进行脚本录制了,录制好的脚本(VBS文件)具体存放路径可以通过下图清晰看出:

由于生成的脚本默认是.vbs,而VBS语法跟VBA几乎如出一辙,我们可以毫不费力将这些代码拷贝到VBA的模块中。小爬这里录制了一段SAP Connection的登录界面的操作,具体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中了,如下所示:

  正当我们以为找准了路子想要大干一场时,刚点击【运行子过程】,就会发现这段代码编译都无法通过:

实在是闹心啊!

  其实我们完全没必要就此慌张,VBE不但有错误提示,且贴心将错误定位到了代码中Application这个单词上 。如果您已经有一定VBA基础就不难发现,VBA中的Application是保留字,它指的是整个Excel应用实例。

要消除这个编译错误,其实方法超简单,用别的对象名来指代它便是,修改后的VBA代码如下:

Sub sapAutomation()
'通过VBA连接SAP GUI实现自动化登录
If Not IsObject(Application) 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 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 End Sub

  (●'◡'●)是不是发现程序员的活儿其实某种程度上也没那么难?还不快快拿着代码愉快地实践一番,好好检验一下?

欢迎扫码关注我的公众号 获取更多爬虫、数据分析的知识!

VBA驱动SAP GUI实现办公自动化(一)的更多相关文章

  1. VBA驱动SAP GUI完成界面元素值初始化

    小爬日常利用VBA完成SAP GUI自动化时,经常被这个问题困扰:我们进入一个事务代码界面时,如FBL1N(供应商行项目显示),很多的 GuiTextField(文本框)对象.GuiCheckBox( ...

  2. python驱动SAP完成数据导出(一)

    写在前面 我们使用Python驱动SAP时,经常会需要导出一些SAP报表数据至本地Excel文件.这个看似简单的问题背后,其实暗藏玄机,今天小爬就带各位同学好好捋捋. 以事务代码FB03(凭证清单)为 ...

  3. SAP GUI的配置文件

    GUI是SAP系统最常用的客户端,在一台客户机上,利用GUI可以连接多套SAP系统(连接方法参见<客户端连接配置(SAP GUI 710)>),也可以设置多个快捷方式登录(参见<用快 ...

  4. SAP GUI SAPLOGON.INI

    GUI是SAP系统最常用的客户端,在一台客户机上,利用GUI可以连接多套SAP系统(连接方法参见<客户端连接配置(SAP GUI 710)>),也可以设置多个快捷方式登录(参见<用快 ...

  5. Mac OS X 中使用SAP GUI的方法

    下载sap gui for mac 730 解压后 安装之前需要去oracle 官网下载jdk 6 然后运行 安装完成后配置登陆端 新建连接时,只需要配置Advanced 页签:勾选Expert Mo ...

  6. SAP GUI 750 安装包 及 补丁3 共享

    SAP GUI 750 安装包 及 补丁3 共享 链接: https://pan.baidu.com/s/1hstkfUs%20 密码: ggbz -------------------------- ...

  7. SAP GUI个性化设置

    大概从GUI730开始,GUI品牌化一直不被默认支持,在GUI设置选项里处于灰色状态,如下图: 不过用户还是可以修改注册表的方式来进行修改,让它可以设置! 首先运行Regedit,在目录:HKEY_L ...

  8. 关闭 synactive guixt. 在sap gui的右上角一个标志里,将 active guixt 选项去掉即可。

    关闭 synactive guixt.  在sap gui的右上角一个标志里,将 active guixt 选项去掉即可.

  9. Python结合SAP GUI Script操作sap的简易教程

    众所周知,如果要用Python做一些桌面WIN32应用的自动化工作,就需要用到著名的pywin32尤其是其中的win32com.client模块,pywin32的安装不能直接通过pip install ...

随机推荐

  1. numpy教程06---ndarray的进阶操作

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  2. echarts饼图去除圈外指向横线

    series: [ { name: '实时人员信息', type: 'pie', radius: ['86%', '80%'], avoidLabelOverlap: false, label: { ...

  3. Hadoop安装部署

    Hadoop伪分布式搭建 1.准备Linux环境 ①开启网络,ifconfig指令查看ip ②修改主机名为自己名字(hadoop) vim /etc/sysconfig/network NETWORK ...

  4. uniapp-app 打开小程序

    plus.share.getServices(                            res => {                                let sw ...

  5. Linux中权限对于文件和目录的区别

    Linux系统中的权限对于文件和目录来说,是有一定区别的 下面先列举下普通文件对应的权限 1)可读r:表示具有读取.浏览文件内容的权限,例如,可以对文件执行 cat.more.less.head.ta ...

  6. Codeforces Round #719 (Div. 3) C. Not Adjacent Matrix

    地址 Problem - C - Codeforces 题意 每个格子,该格子和相邻的格子的值不能相同 题解 思维题, 先从1~n输出奇数,再输出偶数 代码 #include <iostream ...

  7. 比较爽的导航查询 功能 - SqlSugar ORM

    1.导航查询特点 作用:主要处理主对象里面有子对象这种层级关系查询 1.1 无外键开箱就用 其它ORM导航查询 需要 各种配置或者外键,而SqlSugar则开箱就用,无外键,只需配置特性和主键就能使用 ...

  8. Prometheus TSDB存储原理

    Prometheus 包含一个存储在本地磁盘的时间序列数据库,同时也支持与远程存储系统集成,比如grafana cloud 提供的免费云存储API,只需将remote_write接口信息填写在Prom ...

  9. Springmvc 如何配置一个MAVEN项目,eclipse视图详解

    1,首先主页创建一个maven project项目, 2-3,创建完成会报错因为缺少WEB-INF文件右键点击选取,会自动创建web.xml文件 4 ,调试版本 因为默认创建的maven版本不支持,所 ...

  10. 集合篇-ConcurrentHashMap

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. jdk1.7和jdk1.8中ConcurrentHashMap的区别? ...