小爬日常利用VBA完成SAP GUI自动化时,经常被这个问题困扰:我们进入一个事务代码界面时,如FBL1N(供应商行项目显示),很多的 GuiTextField(文本框)对象、GuiCheckBox(复选框)对象都已经有值了。我们如果忘了对这些对象的值初始化,可能SAP执行后的结果并非我们预期的那样,如下图所示。

  针对这个问题,大部分童鞋很容易想到的方案是:把每个文本框的text属性设为空字符串,把每个复选框的勾选状态都设置为【不勾选】,具体代码如下:

session.findById("wnd[0]/usr/ctxtRACCT-LOW").text = "" '文本框初始化

session.findById("wnd[0]/usr/chkX_SHBV").selected = false 'checkBox值初始化

  该方法未尝不可,但是需要在SAP脚本录制阶段,对每个这类元素都初始化并记录后台脚本,属实麻烦,也容易产生遗漏。

  还有一个方法是,关闭SAP连接,要求用户重新登录后,再使用我们的脚本工具,此时SAP已经对会话界面的参数完成了初始化。可该方法如果站在用户角度来思考,难免让人觉得有些非人性化,就跟解决不了别人电脑问题,就让别人重启电脑试下的感觉,小爬总觉得它不应该成为我们的最优解。

  小爬翻阅了N多资料,苦心人天不负,总算总结出了更通用的方法:对会话元素层层往下穷举子元素,如果发现子元素为文本框,就将text属性置为"",如果发现子元素为复选项,就将其selected属性改为false即可。具体用VBA代码实现的话,还需要知道如何写递归函数,示例如下:

Sub SessionElementInitialization()

'对界面元素的值进行初始化,文本框值置为空,复选框状态改为【未勾选】
Dim UserArea As Object If Not IsObject(SAPApplication) 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 SAPApplication, "on"
End If
Set UserArea = session.findByID("wnd[0]/usr") Clear_Fields UserArea
MsgBox "已完成!" End Sub
'_______________________________ Sub Clear_Fields(Area As Object)
Set SAPApplication = GetObject("SAPGUI").GetScriptingEngine
Dim Obj As Object
Dim NextArea As Object
On Error Resume Next
For i = 0 To Area.Children.Count - 1
Set Obj = Area.Children(CInt(i))
If Obj.ContainerType = True Then
If Obj.Children.Count > 0 Then
Set NextArea = SAPApplication.findByID(Obj.ID)
Clear_Fields NextArea
End If
End If
If Obj.Type Like "*TextField*" And Obj.changeable = True Then
Obj.Text = ""
ElseIf Obj.Type = "GuiCheckBox" Then
Obj.Selected = False
End If
Next i
End Sub

  相信你们已经被这个问题困扰很久了,赶紧用上面的方法试下吧。对了,如果你是python爱好者,如何把上面这段VBA脚本转成python版本,相信你已经有自己的答案了(*^_^*)。

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

VBA驱动SAP GUI完成界面元素值初始化的更多相关文章

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

    小爬之前写过一系列Python驱动SAP GUI实现办公自动化的文章,其实如果我们的实际业务不是太复杂,且我们对VBA语法比较熟悉的话,我们完全可以借助Excel VBA来驱动SAP GUI做很多自动 ...

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

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

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

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

  4. selenium界面元素定位

    一.        Selenium界面元素定位 本文元素定位以das2为例 #导入包 from selenium import  webdriver #打开火狐驱动 driver=webdriver ...

  5. python驱动SAP完成数据导出(二)

    在上一篇 python驱动SAP完成数据导出(一)中,我们提到了数据导出前,SAP布局的重要性,如何识别当前布局模式,以及如何切换到想要的布局.本篇小爬将着重讲讲数据导出的注意事项. 我们可以通过如下 ...

  6. SAP GUI的配置文件

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

  7. 表现层的设计(二)——MVC如何处理复杂的界面元素

    需求描述 一个比较复杂的页面,界面中包含的元素数据来自于许多个有关联或者无关联的表,然后我们要做的就是将数据呈现在界面上. 10年前大概都是这么干的 直接写一个复杂的SQL语句,返回一个包含所需数据的 ...

  8. 创建SAP GUI快捷方式保存密码

    1.在注册表中创建GUI 快捷方式的子键 a.首先运行  微软标识键+R    b.窗口中输入sapshcut,如果有窗口跳出点击“确定” 2.维护子键下的键值 a.再次运行  微软标识键+R    ...

  9. SAP GUI SAPLOGON.INI

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

随机推荐

  1. 龙智被评估为CMMI [3] 级

    2022年3月,龙智宣布已被评估为CMMI研究所的能力成熟度模型集成(CMMI)的 [3] 级. CMMI 是一个能力改进框架,它为组织提供有效流程的基本要素,最终提高其绩效. 成熟度级别 3 的评估 ...

  2. HttpServletResponse & HttpServletRequest

    web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse: 如果要获取客户端请求过来的 ...

  3. Linux-centos8实现私有CA和证书申请

    创建CA相关目录,centos8不存在这些目录,需手动建立 [root@centos8-liyj ~]#mkdir -pv /etc/pki/CA/{certs,cr1,newcerts,privat ...

  4. 团队Arpha4

    队名:观光队 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 完成服务器连接数据库部分代码 展示GitHub当日代码/文档签入记录 接下来的计划 服务器网络 ...

  5. 为什么建议大家使用 Linux 开发?

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Linux 能用吗? 我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上. ...

  6. Ping原理详解

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Ping是排除设备访问故障的常见方法.它使用Internet控制消息协议ICMP(Int ...

  7. 5.文件共享总结中篇-Linux服务器文件共享

    今天我们来讨论Linux系统之间的文件共享,包含:SCP.FTP.rz / sz.wget 一.SCP 其实我在写SSH协议常见问题排错章节中已介绍其SCP用法. 现我把SCP常用语法格式,给大家说下 ...

  8. mybatis plus 的 ActiveRecord 模式

    实体类继承 Model public class Test extends Model<Test> implements Serializable {} 就可以 new Test().in ...

  9. 【系统】查看windows系统是否永久激活

    查看windows系统是否永久激活 查看激活时间 slmgr.vbs -xpr 查看激活详情 slmgr.vbs -dlv

  10. Spring Security OAuth正式终止维护,已从官网下架

    Spring Security团队正式宣布Spring Security OAuth终止维护. 目前官网的主页已经高亮提醒彻底停止维护. 旧的Spring Security OAuth项目终止到2.5 ...