ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] SAP录制的VBS脚本在VBA中运行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-9-9 12:59 | 显示全部楼层 |阅读模式
公司换了SAP系统,内置录制脚本和回放功能,生成的VBS代码,单独运行VBS能够执行,我想放到VBA中,后续做自定义变量去执行

现在原代码直接在VBA运行报错,如何修改才能在VBA能够运行。




  1. Sub 测试()


  2.     If Not IsObject(Application) Then
  3.         Set SapGuiAuto = GetObject("SAPGUI")
  4.         Set Application = SapGuiAuto.GetScriptingEngine
  5.     End If
  6.     If Not IsObject(Connection) Then
  7.         Set Connection = Application.Children(0)
  8.     End If
  9.     If Not IsObject(session) Then
  10.         Set session = Connection.Children(0)
  11.     End If
  12.     If IsObject(WScript) Then
  13.         WScript.ConnectObject session, "on"
  14.         WScript.ConnectObject Application, "on"
  15.     End If
  16.    
  17.     session.findById("wnd[0]").maximize
  18.     session.findById("wnd[0]/tbar[0]/okcd").Text = "/NZFI015"
  19.     session.findById("wnd[0]/tbar[0]/btn[0]").press
  20.     session.findById("wnd[0]/usr/ctxtP_COM").Text = "A018"
  21.     session.findById("wnd[0]/usr/ctxtS_KHINR-LOW").Text = "A4350"
  22.     session.findById("wnd[0]/usr/ctxtS_KHINR-HIGH").Text = "A4350"
  23.     session.findById("wnd[0]/usr/txtP_GJAHR").Text = "2016"
  24.     session.findById("wnd[0]/usr/ctxtS_CPUDT-LOW").Text = ""
  25.     session.findById("wnd[0]/usr/txtS_BELNR-LOW").Text = "3300000000"
  26.     session.findById("wnd[0]/usr/txtS_BELNR-HIGH").Text = "3300000000"
  27.     session.findById("wnd[0]/usr/txtS_BELNR-HIGH").SetFocus
  28.     session.findById("wnd[0]/usr/txtS_BELNR-HIGH").caretPosition = 10
  29.     session.findById("wnd[0]/tbar[1]/btn[8]").press
  30.     session.findById("wnd[0]/tbar[1]/btn[37]").press
  31.     session.findById("wnd[0]/tbar[1]/btn[39]").press
  32.     session.findById("wnd[1]/tbar[0]/btn[86]").press

  33. End Sub
复制代码








TA的精华主题

TA的得分主题

发表于 2016-9-9 14:17 | 显示全部楼层
这种貌似没法直接引用了,起码,你录制的代码里面APPLICATION和VBA里面的APPLICATION就完全不是同一个对象

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-9 14:46 | 显示全部楼层
应该是可以实现的,我在网上搜索到一篇博客,里面有讲可以宏运行

TA的精华主题

TA的得分主题

发表于 2016-9-10 23:45 | 显示全部楼层
你先学习一下vba语法,然后再搞比较好

TA的精华主题

TA的得分主题

发表于 2017-10-31 11:21 | 显示全部楼层
把Application 改成SAPApplication 不就行了

TA的精华主题

TA的得分主题

发表于 2017-10-31 13:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我在以前公司手工RUN标准成本的时候写过一个比较粗糙的;有几点需要注意:一个是我的运行环境是WIN7+SAP ECC6.0;只能有一个活动的SAP GUI;T-Code是CK11N的情况。如果你需要其他T-Code,你要自己录一个然后修改一个。
  1. Option Explicit
  2. Public SapGuiAuto As Object
  3. Public Applicat As Object
  4. Public Connection As Object
  5. Public Session As Object
  6. Public StaBar As Object
  7. Public SubTbar As Object
  8. Public subWindow As Object
  9. Public arr     '数据区域
  10. Function Attach() As Boolean              '是否调用SAPGUI
  11. On Error Resume Next
  12. Set SapGuiAuto = GetObject("SAPGUI")
  13. On Error GoTo 0
  14. If SapGuiAuto Is Nothing Then
  15.     Attach = False
  16.     Exit Function
  17. Else
  18.     Set Applicat = SapGuiAuto.GetScriptingEngine
  19.     On Error GoTo 0
  20. End If
  21. If Applicat Is Nothing Then
  22.     MsgBox "Scripting Disabled"
  23.     Attach = False
  24.     Exit Function
  25. End If
  26. If Applicat.Children.Count = 0 Then
  27.     Attach = False
  28.     Exit Function
  29. Else
  30.    Set Connection = Applicat.Children(0)
  31.    On Error GoTo 0
  32. End If
  33. Set Session = Connection.Children(0)
  34. On Error GoTo 0
  35. If Session.ActiveWindow.text = "SAP" Then
  36.     Attach = False
  37.     Exit Function
  38. End If
  39. Attach = True
  40. End Function

  41. '==========================================================================
  42. Sub CK11N()
  43. Dim i&, j&
  44. Dim arr
  45. Dim t
  46. t = Timer
  47. arr = Sheet1.UsedRange
  48. If Attach Then
  49.     'Stop
  50.     For i = 2 To UBound(arr)
  51.     On Error GoTo errLine
  52.         Session.findById("wnd[0]/tbar[0]/okcd").text = "ck11n"
  53.         Session.findById("wnd[0]").sendVKey 0
  54.         Call WaitMoment(2)
  55.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/subKOPF:SAPLCKDI:4620/ctxtCKI64A-MATNR").text = arr(i, 1)
  56.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/subKOPF:SAPLCKDI:4620/ctxtCKI64A-WERKS").text = arr(i, 2)
  57.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/tabsREITER/tabpALLG/ssubALLGEMEIN:SAPLCKDI:4612/ctxtCKI64A-KLVAR").text = arr(i, 3)
  58.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/tabsREITER/tabpALLG/ssubALLGEMEIN:SAPLCKDI:4612/ctxtCKI64A-TVERS").text = arr(i, 4)
  59.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/tabsREITER/tabpALLG/ssubALLGEMEIN:SAPLCKDI:4612/ctxtCKI64A-UEBID").text = arr(i, 5)
  60.         Session.findById("wnd[0]").sendVKey 0
  61.         Call WaitMoment(2)
  62.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/tabsREITER/tabpTERM/ssubTERM:SAPLCKDI:4614/ctxtCKI64A-KADAT").text = arr(i, 6)
  63.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/tabsREITER/tabpTERM/ssubTERM:SAPLCKDI:4614/ctxtCKI64A-BIDAT").text = arr(i, 7)
  64.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/tabsREITER/tabpTERM/ssubTERM:SAPLCKDI:4614/ctxtCKI64A-ALDAT").text = arr(i, 8)
  65.         Session.findById("wnd[0]/usr/subALL:SAPLCKDI:4611/tabsREITER/tabpTERM/ssubTERM:SAPLCKDI:4614/ctxtCKI64A-BWDAT").text = arr(i, 8)
  66.         Session.findById("wnd[0]").sendVKey 0
  67.         Call WaitMoment(2)
  68.         Session.findById("wnd[0]/tbar[0]/btn[11]").press
  69.         Session.findById("wnd[1]/tbar[0]/btn[0]").press
  70.         Call WaitMoment(2)
  71.         Session.findById("wnd[0]/tbar[0]/btn[3]").press
  72.         Session.findById("wnd[0]/tbar[0]/btn[3]").press
  73.         
  74.         Sheet1.Rows(i).Interior.ColorIndex = 33
  75.     Next i
  76. End If
  77.     MsgBox ("Done " & (Timer - t))
  78. Exit Sub
  79.       
  80. errLine:
  81.    MsgBox ("ERROR " & i)
  82. Stop
  83. End Sub

  84. Private Sub WaitMoment(rMoment!)
  85.     Dim rT!
  86.     rT = Timer
  87.     Do While Timer - rT < rMoment
  88.         DoEvents
  89.     Loop
  90. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2018-5-10 13:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-5-25 17:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-10-17 16:24 来自手机 | 显示全部楼层
YincyHe 发表于 2018-5-25 17:09
跟楼主有同样的报错问题,不知道楼主解决没有

你好,在sap和vba的帖子里面一直看到你,请问你的问题解决了吗?我目前也遇到了一些问题,能否交流一下?

TA的精华主题

TA的得分主题

发表于 2018-12-6 14:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lowlowjie8 发表于 2018-10-17 16:24
你好,在sap和vba的帖子里面一直看到你,请问你的问题解决了吗?我目前也遇到了一些问题,能否交流一下?

其实就是SAP必须要开启脚本录制和回放这个功能,否则连接的程序就会报错,无法连接
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 03:03 , Processed in 0.042417 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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