VBA+SAP+Excel办公自动化学习笔记-总览

  • 学习效果

利用SAP自带脚本记录工具实现自动化办公如:

自动登录SAP;

一键导出数据至指定文件夹;

批量修改创建SAP事务如批量修改WBS;

  • 基本原理
    • SAP脚本记录工具实现SAP操作宏功能

    利用SAP脚本录制工具,记录SAP一系列操作形成VB脚本语言.

  • EXCELVBA语言修改SAP脚本实现SAP自动化操作

    然后利用EXCEL开发工具修改VB语言,将事务代码,导出地址,查询条件等等日常操作设置为变量,增加循环语句实现日常工作的自动化操作.

  • 基础知识及软件配置准备
    • VBA基础知识:能读懂其他人写的代码,会修改变量,能够进行简单的调试工作

    如何使用开发模式,VBA语音的基础应用如变量,对象,excel单元格,sheet,worksheet,workbook对象的引用,for循环语句等.

  • SAP脚本录制及回放的使用

    脚本录制和回访菜单及界面如下图,生成的脚本文件为VBS文件,可以用记事本打开查看记录形成的VB代码.

    SAP脚本记录示例:

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]/tbar[0]/okcd").text = "cj20n"

session.findById("wnd[0]/tbar[0]/btn[0]").press

session.findById("wnd[0]/shellcont/shellcont/shell/shellcont[1]/shell/shellcont[1]/shell").topNode = " 23"

session.findById("wnd[0]/shellcont/shellcont/shell/shellcont[0]/shell/shellcont[0]/shell").pressButton "OPEN"

session.findById("wnd[1]/usr/ctxtCNPB_W_ADD_OBJ_DYN-PRPS_EXT").text = "E.3060.K220017070101"

session.findById("wnd[1]/usr/ctxtCNPB_W_ADD_OBJ_DYN-PRPS_EXT").setFocus

session.findById("wnd[1]/usr/ctxtCNPB_W_ADD_OBJ_DYN-PRPS_EXT").caretPosition = 20

session.findById("wnd[1]/tbar[0]/btn[0]").press

session.findById("wnd[0]/tbar[1]/btn[13]").press

session.findById("wnd[0]/tbar[1]/btn[13]").press

session.findById("wnd[0]/usr/subDETAIL_AREA:SAPLCNPB_M:1010/subIDENTIFICATION:SAPLCJWB:3991/txtPRPS-POST1").text = "基于AI技术的电子档案单套制管理系统研发—差旅费-自筹"

session.findById("wnd[0]/usr/subDETAIL_AREA:SAPLCNPB_M:1010/subVIEW_AREA:SAPLCJWB:3899/subSUBSCR1:SAPLCSCR:0100/tabsTSTRIP100/tabpTAB01/ssubINCLUDE_SUB:SAPLCSCR:0200/subSUB1:SAPLCJWB:1210/ctxtPRPS-FKSTL").text = "Y3060933"

session.findById("wnd[0]/usr/subDETAIL_AREA:SAPLCNPB_M:1010/subIDENTIFICATION:SAPLCJWB:3991/txtPRPS-POST1").setFocus

session.findById("wnd[0]/usr/subDETAIL_AREA:SAPLCNPB_M:1010/subIDENTIFICATION:SAPLCJWB:3991/txtPRPS-POST1").caretPosition = 56

session.findById("wnd[0]/tbar[0]/btn[11]").press

session.findById("wnd[0]/shellcont/shellcont/shell/shellcont[1]/shell/shellcont[1]/shell").topNode = " 23"

   

学习网址:使用 SAP Script Recording 在 SAP 中录制宏 <https://simpleexcelvba.com/record-macro-in-sap-using-sap-script-recording/>

   

  • SAP脚本代码学习(需要反复对照脚本及实际操作熟悉)

学习网址:SAP session.findbyid – 10 行你可以识别的代码行来自 <https://simpleexcelvba.com/sap-session-findbyid-10-code-lines-you-can-identify/>

详细学习文件:可以参考SAPGUI脚本帮助文件,里面有所有对象的详细描述.

当我第一次看到记录的 SAP 代码时,我感觉就像在 Matrix 中一样。大量的行,我只认出我在录制过程中手动填写 SAP 的内容。

但过了一段时间,我意识到其中一些密码行的含义。多亏了这一点,我可以在不重新录制的情况下修改我的代码。它使我可以减少我的代码,删除不必要的行或将我自己的变量放入 SAP 代码中。

我想为你缩短整个漫长的旅程体验并加快速度。为了更好地了解 SAP session.findbyid背后隐藏的内容。

SAP 代码行及其描述

1. SAP 主窗口。

session.findById("wnd[0]")

您可能会注意到缩写wnd来自单词window。数字零开始对 SAP 窗口进行编号,而不仅仅是它们。您会在代码中找到更多窗口,例如wnd[1]或wnd[2]。

2.最小化和最大化SAP窗口。

session.findById("wnd[0]").iconify
session.findById("wnd[0]").maximize

您可以隐藏 SAP 窗口 ( .iconify ) 看不到主舞台wnd[0]上的任何操作或最大化 ( .maximize ) 到全屏。

3.确认

session.findById("wnd[0]").sendVKey 0

上面的线代表确认。换句话说,它是经典的ENTER按钮。所以每次你在录制过程中点击它你都会得到这条线。

4.事务代码名称

session.findById("wnd[0]/tbar[0]/okcd").Text ="transaction name"

这次我们来看看结构。首先是窗口及其索引 - wnd[0],然后是工具栏 - tbar[0]和它上面的事务/命令窗口 - okcd。还有.Text,这意味着您正在填充此文本框。在这里您可以传递交易名称或字符串变量。

5.按钮

session.findById("wnd[0]/usr/btn[1]").press

在这里,您可以在结构中看到第二项 - usr。我不确定,但它代表userform。旁边是按钮 nr 1 – btn[1]。每次您单击按钮时,该操作将被记录为.press。

6.光标位置

session.findById("wnd[0]/usr/ctxt[73]").caretPosition =4

如果您曾经见过.caretPosition,则表示您的光标已就位,在我们的例子中,它是在该文本容器中的第 4 次登录之后 - ctxt。在大多数情况下,它是完全不需要的行,因此您可以删除它以使您的 SAP 代码更加透明。

7.专注

session.findById("wnd[0]/usr/ctxt[73]").SetFocus

在我看来,这是第二个不必要的 SAP 代码行。它负责选择窗口或文本。也可以随意删除它,它不会影响任何东西。

8.复选框

session.findById("wnd[0]/usr/chk[2]").Selected =True

如果您的交易中有任何复选框,它将在代码中显示为chk及其.Selected状态——在我们的例子中它是True。

9.《红十字》

session.findById("wnd[0]/tbar[0]/btn[12]").press

我想你知道我在你的主工具栏上说"红十字"是什么意思。经过几次录音后,我意识到代码行代表取消按钮。使用它返回 SAP。

10.结束

session.findById("wnd[0]").Close
session.findById("wnd[1]/usr/btn[0]").press

最后,我为您获得了关闭 SAP 的代码行。关闭行还会弹出确认信息,即下一个窗口wnd[1]和是按钮btn[0]。

就是这样!

那是我的 10 行代码,它们通常在 SAP 中的 session.findbyid 之后。意识到它们的含义和代表的含义使我能够更好地控制代码并对其进行优化。我希望它也会有所帮助。

SAP 主要窗口对象类型

   

  • EXCEL VBA开发环境的配置

    为了实现excel调用SAP对象的功能,需要再VBA开发界面工具_引用配置好SAP GUI API程序,不然excel编写的VBA程序无法执行.

       

    确保VBA引用了以下文件:SAP GUI Scripting API,文件地址:如下图,文件名字:sapfews.ocx

       

       

       

       

       

       

 

 

posted @ 2022-03-27 20:19  TOD南哥  阅读(338)  评论(0)    收藏  举报