设为首页收藏本站

 找回密码
 立即注册
搜索
查看: 72|回复: 9

VBA自动登录SAP查询工单并导出结果

[复制链接]
累计签到:2 天
连续签到:1 天
灌水成绩
3
31
75
主题
帖子
积分

等级头衔 ID : 868
用户组 : 注册会员

积分成就 测量币 : 75
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 2019-6-28 14:57:00 来自手机 | 显示全部楼层 |阅读模式 IP:北京
为了使用VBA定时查询工单BOM信息,从论坛和网上找了很多资料,最终整理出结果和大家分享。
1.可以实现自动登录SAP,使用script录制代码执行指定操作,本例使用COOIS查询工单BOM。
2.工单号预先放入Excel表格,SAP完成操作后退出登录。
3.操作过程无需点击,全部自动完成。注意SAP系统配置参考下图。

图片上传巨慢,文字描述代替吧。在SAP GUI选项设置中找到“Scripting”--“User Setting”--勾选"Enable Scripting",取消勾选下面的2个“Notify ……”.

Option Explicit
Public Connection
Public Session


Sub GetSAP_WO()
Dim usern, passw, dir, fname As String
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim SAPguiApp
With ThisWorkbook.Worksheets("SET")
    usern = .Cells(1, "B").Value
    passw = .Cells(2, "B").Value
    dir = .Cells(3, "B").Value
    fname = .Cells(4, "B").Value
End With
With ThisWorkbook.Worksheets(1)
    .Range(Cells(3, "B"), Cells(.Range("b65536").End(xlUp).Row, "B")).Copy
End With
'调用SAP logon窗口

If Not IsObject(SAPguiApp) Then
    Set SAPguiApp = CreateObject("Sapgui.ScriptingCtrl.1")
End If
If Not IsObject(Connection) Then
    Set Connection = SAPguiApp.OpenConnection("XXXX)", True)    'SAP连接设置
End If
If Not IsObject(Session) Then
    Set Session = Connection.Children(0)
End If
'设置SAP登录信息

Session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "360"
Session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = usern
Session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = passw
Session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "EN"
Session.findById("wnd[0]/usr/txtRSYST-LANGU").SetFocus
Session.findById("wnd[0]/usr/txtRSYST-LANGU").caretPosition = 2
Session.findById("wnd[0]").sendVKey 0
'MsgBox "登录成功"

With Session

'SAP操作录制的代码

.findById("wnd[0]/tbar[0]/okcd").Text = "/ncoois"
.findById("wnd[0]").sendVKey 0
.findById("wnd[0]/usr/ssub%_SUBSCREEN_TOPBLOCK:PPIO_ENTRY:1100/cmbPPIO_ENTRY_SC1100-PPIO_LISTTYP").Key = "PPIOM000"
.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/btn%_S_AUFNR_%_APP_%-VALU_PUSH").press
.findById("wnd[1]/tbar[0]/btn[24]").press
.findById("wnd[1]/tbar[0]/btn[8]").press
.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_WERKS-LOW").Text = "cn01"
.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_WERKS-LOW").SetFocus
.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_WERKS-LOW").caretPosition = 4
.findById("wnd[0]/tbar[1]/btn[8]").press
.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").pressToolbarButton "&NAVIGATION_PROFILE_TOOLBAR_EXPAND"
.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").selectContextMenuItem "&PC"
.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").Select
.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").SetFocus
.findById("wnd[1]/tbar[0]/btn[0]").press
.findById("wnd[1]/usr/ctxtDY_PATH").Text = dir
.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = fname
.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 7
.findById("wnd[1]").sendVKey 0
.findById("wnd[1]/tbar[0]/btn[11]").press

End With

Set Session = Nothing
Connection.CloseSession ("ses[0]")
Set Connection = Nothing
Set SAPguiApp = Nothing

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
测量协会论坛免责声明
重要声明:以上内容仅代表该作者观点,不代表本站测量协会论坛立场。
如有涉及侵权请尽快告知,我们将会在第一时间处理。作者原创内容未经允许不得转载!
站长联系邮箱:1339305021@qq.com
站长联系微信:dddnnbbb
累计签到:2 天
连续签到:1 天
灌水成绩
1
24
36
主题
帖子
积分

等级头衔 ID : 899
用户组 : 新手上路

积分成就 测量币 : 36
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-24

勋章

活跃会员最佳新人

联系方式

发表于 2019-6-28 17:35:00 | 显示全部楼层 IP:北京
自己顶,需要的朋友也来支持一下
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
灌水成绩
1
22
22
主题
帖子
积分

等级头衔 ID : 893
用户组 : 新手上路

积分成就 测量币 : 22
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 2019-11-4 11:07:00 | 显示全部楼层 IP:北京
这个要顶一下,有空学习一下哈。
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
灌水成绩
3
23
78
主题
帖子
积分

等级头衔 ID : 839
用户组 : 注册会员

积分成就 测量币 : 78
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 2019-11-4 16:55:00 | 显示全部楼层 IP:北京
请教楼主,SAPguiApp.OpenConnection("XXXX)", True),这个是如何填写,比如ip是服务器的地址是10.2.99.100,组服务器是PT6 这个代码是如何填写,请赐教,谢谢。
回复

使用道具 举报

累计签到:3 天
连续签到:2 天
灌水成绩
2
24
57
主题
帖子
积分

等级头衔 ID : 808
用户组 : 注册会员

积分成就 测量币 : 57
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 2019-11-4 17:30:00 | 显示全部楼层 IP:北京
图片上传巨慢,文字描述代替吧。在SAP GUI选项设置中找到“Scripting”--“User Setting”--勾选"Enable Scripting",取消勾选下面的2个“Notify ……”.-------------这里是灰色的,不能进行勾选,有什么办法?
回复

使用道具 举报

累计签到:2 天
连续签到:2 天
灌水成绩
0
23
35
主题
帖子
积分

等级头衔 ID : 875
用户组 : 新手上路

积分成就 测量币 : 35
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 2019-11-22 10:45:00 | 显示全部楼层 IP:北京
我的不能录制, 但可以连接sap对象,
不能录制, 看不到代码, 不知道findById后面的要怎么写, 是不是要看RFC文档?
回复

使用道具 举报

尚未签到

灌水成绩
0
15
0
主题
帖子
积分

等级头衔 ID : 861
用户组 : 新手上路

积分成就 测量币 : 0
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-24

勋章

活跃会员最佳新人

联系方式

发表于 2019-12-24 17:31:00 | 显示全部楼层 IP:北京
学习了,作为内部顾问,还没有接触过这类东西呢
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
灌水成绩
3
31
75
主题
帖子
积分

等级头衔 ID : 868
用户组 : 注册会员

积分成就 测量币 : 75
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

 楼主| 发表于 2020-4-7 10:52:00 | 显示全部楼层 IP:北京
MARK,这个不错。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
灌水成绩
2
10
56
主题
帖子
积分

等级头衔 ID : 809
用户组 : 注册会员

积分成就 测量币 : 56
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 2020-5-10 22:12:00 | 显示全部楼层 IP:北京
这个必须学习下,想做些分析,结果提取数据就要花很多时间
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
灌水成绩
3
31
75
主题
帖子
积分

等级头衔 ID : 868
用户组 : 注册会员

积分成就 测量币 : 75
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

 楼主| 发表于 2023-4-22 13:35:00 | 显示全部楼层 IP:北京
请教大神一下,我用SAP录制的脚本放到VBA里后有一句是这样的:
session.findById("wnd[0]/usr/tblSAPLCOVGTCTRL_0100/ctxtAFVGD-ARBPL[2,0]").Text = "G1047"
我要把[2,0]这句中的0设为变量[2 , k],k是变量,可是实际直接写成
session.findById("wnd[0]/usr/tblSAPLCOVGTCTRL_0100/ctxtAFVGD-ARBPL[2,k]").Text = "G1047" 时k不随变量变化,我应该怎么写才能随变量而变呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|测量协会 ( 桂ICP备2026007449号-1 )|网站地图

GMT+8, 2026-4-26 01:43 , Processed in 0.117029 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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