You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SAP VBScript实现批量读取Excel多行列数据循环执行MM02操作

批量更新SAP物料数据的VBScript循环实现方案

核心实现思路

  1. 打开指定Excel文件,定位到目标工作表
  2. 从数据起始行(默认第2行,第1行作为表头)开始循环,直到A列单元格为空时停止
  3. 逐行读取A列的物料编码和B列的批量大小
  4. 针对每一行数据,调用SAP事务码MM02,完成物料数据更新并保存
  5. 循环结束后释放Excel和SAP对象资源

修改后的完整脚本

' 配置参数
strExcelPath = "C:\YourData.xlsx" ' 替换为你的Excel文件路径
intStartRow = 2 ' 数据起始行(跳过表头)

' 初始化SAP对象
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
Set connection = application.Children(0)
Set session = connection.Children(0)

' 初始化Excel对象
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False ' 后台运行Excel,不显示界面
Set objWorkbook = objExcel.Workbooks.Open(strExcelPath)
Set objSheet = objWorkbook.Sheets("Sheet1") ' 替换为你的工作表名称

' 开始循环读取数据
iRow = intStartRow
Do Until IsEmpty(objSheet.Cells(iRow, 1))
    ' 读取当前行的物料编码和批量大小
    strMaterial = Trim(objSheet.Cells(iRow, 1).Value)
    strBatchSize = Trim(objSheet.Cells(iRow, 2).Value)
    
    ' 跳过空数据行
    If strMaterial = "" Or strBatchSize = "" Then
        iRow = iRow + 1
        Continue Do
    End If
    
    ' 执行SAP MM02事务码更新物料
    session.StartTransaction "MM02"
    
    ' 输入物料编码
    session.findById("RMMG1-MATNR").Text = strMaterial
    session.findById("tbar[0]/btn[0]").press ' 回车确认
    
    ' 选择需要更新的视图(示例:基本数据1,根据实际需求调整视图代码)
    session.findById("SAPLMGMM_0600-VIEW[0,0]").Selected = True
    session.findById("tbar[0]/btn[0]").press ' 进入视图
    
    ' 填入批量大小(字段名根据你的SAP系统调整,示例为[MR1P-BESTM])
    session.findById("MR1P-BESTM").Text = strBatchSize
    
    ' 保存修改
    session.findById("tbar[0]/btn[11]").press ' 保存按钮
    
    ' 处理可能的弹窗(比如警告信息,根据实际情况调整)
    On Error Resume Next
    If session.findById("wnd[1]/usr/btnSPOP-OPTION1", False) Is Nothing Then
        ' 无弹窗,继续
    Else
        session.findById("wnd[1]/usr/btnSPOP-OPTION1").press ' 确认弹窗
    End If
    On Error GoTo 0
    
    ' 行数自增,处理下一条数据
    iRow = iRow + 1
Loop

' 释放资源
objWorkbook.Close False ' 关闭Excel文件,不保存修改
objExcel.Quit
Set objSheet = Nothing
Set objWorkbook = Nothing
Set objExcel = Nothing
Set session = Nothing
Set connection = Nothing
Set application = Nothing
Set SapGuiAuto = Nothing

MsgBox "批量更新完成!"

关键代码说明

  • 循环逻辑:用Do Until IsEmpty(objSheet.Cells(iRow, 1))判断是否还有物料数据,确保读取所有非空行
  • SAP字段定位:session.findById("字段ID")中的字段ID需要根据你的SAP系统实际情况调整,可以通过SAP脚本录制功能获取准确的字段标识
  • 错误处理:加入On Error Resume Next处理保存时的警告弹窗,避免脚本中断
  • 资源释放:循环结束后必须关闭Excel并释放所有对象,防止进程残留

内容的提问来源于stack exchange,提问作者Alexandru Paun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:01:15