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


      小爬之前写过一系列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
    复制代码

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

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

     

  • 相关阅读:
    【python随笔】-深入理解装饰器
    Win10+Anaconda+tensorflow VS Win10+CPU+Pytorch
    浅析:OMS和ERP、WMS、TMS之间的关系?
    浅谈估值模型:估值幻觉
    Docker入门
    JavaScript -- 三种循环语句的介绍及示例代码
    PMP考试提分必刷题
    chrome浏览器关闭百度热搜——AdBlock插件
    【Docker】docker安装nacos
    ffmeg 中fftools/Makefile 分析
  • 原文地址:https://www.cnblogs.com/new-june/p/16372559.html