设为首页收藏本站

 找回密码
 立即注册

只需一步,快速开始

搜索
查看: 157|回复: 9

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

[复制链接]
累计签到:28 天
连续签到:1 天
灌水成绩
5
190
3757
主题
帖子
积分

等级头衔

ID : 868

助理工程师

积分成就 测量币 : 3757
在线时间 : 0 小时
注册时间 : 2026-2-5
最后登录 : 2026-6-25

勋章
UID勋章测量学徒测量员
发表于 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
累计签到:33 天
连续签到:1 天
灌水成绩
1
213
3641
主题
帖子
积分

等级头衔

ID : 899

助理工程师

积分成就 测量币 : 3641
在线时间 : 0 小时
注册时间 : 2025-9-6
最后登录 : 2026-6-28

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

使用道具 举报

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

等级头衔

ID : 893

助理工程师

积分成就 测量币 : 3537
在线时间 : 0 小时
注册时间 : 2025-12-18
最后登录 : 2026-7-3

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

使用道具 举报

累计签到:32 天
连续签到:1 天
灌水成绩
4
209
4390
主题
帖子
积分

等级头衔

ID : 839

助理工程师

积分成就 测量币 : 4390
在线时间 : 0 小时
注册时间 : 2025-10-3
最后登录 : 2026-7-7

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

使用道具 举报

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

等级头衔

ID : 808

高级技术员

积分成就 测量币 : 2950
在线时间 : 0 小时
注册时间 : 2026-2-2
最后登录 : 2026-6-14

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

使用道具 举报

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

等级头衔

ID : 875

助理工程师

积分成就 测量币 : 3947
在线时间 : 0 小时
注册时间 : 2025-9-7
最后登录 : 2026-7-2

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

使用道具 举报

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

等级头衔

ID : 861

助理工程师

积分成就 测量币 : 3236
在线时间 : 0 小时
注册时间 : 2026-1-21
最后登录 : 2026-7-2

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

使用道具 举报

累计签到:28 天
连续签到:1 天
灌水成绩
5
190
3757
主题
帖子
积分

等级头衔

ID : 868

助理工程师

积分成就 测量币 : 3757
在线时间 : 0 小时
注册时间 : 2026-2-5
最后登录 : 2026-6-25

勋章
UID勋章测量学徒测量员
 楼主| 发表于 2020-4-7 10:52:00 | 显示全部楼层 IP:北京
MARK,这个不错。
回复

使用道具 举报

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

等级头衔

ID : 809

助理工程师

积分成就 测量币 : 3885
在线时间 : 0 小时
注册时间 : 2025-10-30
最后登录 : 2026-6-14

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

使用道具 举报

累计签到:28 天
连续签到:1 天
灌水成绩
5
190
3757
主题
帖子
积分

等级头衔

ID : 868

助理工程师

积分成就 测量币 : 3757
在线时间 : 0 小时
注册时间 : 2026-2-5
最后登录 : 2026-6-25

勋章
UID勋章测量学徒测量员
 楼主| 发表于 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-7-7 19:40 , Processed in 0.151138 second(s), 55 queries .

Powered by 精密测量技术论坛

© 2025-2026 联系站长

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