当前位置: 首页 > article >正文

告别重复劳动:用Excel VBA+SAP GUI脚本,5分钟搞定批量物料价格查询(CKM3N实战)

告别重复劳动用Excel VBASAP GUI脚本实现批量物料价格查询自动化1. 痛点场景与解决方案概述财务和成本会计人员每月都要面对一项耗时且容易出错的任务批量查询成百上千个物料的成本价格。传统手动操作SAP CKM3N事务码的方式每个物料需要重复执行登录、输入、查询、记录等步骤效率低下且容易出错。典型痛点表现每月需要处理500物料时手动操作耗时4-6小时人工输入容易导致数据错误或遗漏不同工厂/期间查询需要重复切换条件结果记录到Excel仍需二次手工整理我们开发的自动化解决方案整合了Excel VBA和SAP GUI Scripting技术实现端到端的流程自动化Excel作为操作界面和数据处理中心VBA控制整个流程逻辑SAP GUI Scripting实现与SAP系统的交互自动化的数据查询、抓取和回填2. 技术准备与环境配置2.1 SAP GUI脚本功能启用在开始前需确保SAP系统已启用脚本功能 检查SAP脚本是否可用 On Error Resume Next Set SapGuiAuto GetObject(SAPGUI) If Err.Number 0 Then MsgBox 请先安装SAP GUI并启用脚本功能, vbCritical Exit Sub End If启用步骤SAP登录后按AltF12打开脚本录制器点击更多→设置→勾选启用脚本保存设置后重启SAP GUI2.2 Excel VBA环境配置在Excel中启用开发工具和宏功能文件→选项→自定义功能区→勾选开发工具开发工具→宏安全性→启用所有宏按AltF11打开VBA编辑器添加对SAP脚本库的引用工具→引用→勾选SAP GUI Scripting API关键配置代码Sub EnableVBAEnvironment() Application.AutomationSecurity msoAutomationSecurityLow Application.TrustAccessToVBOM True End Sub3. 核心自动化流程实现3.1 主程序架构设计Sub Main_CKM3N_Query() 1. 初始化 Dim wb As Workbook, ws As Worksheet Set wb ThisWorkbook Set ws wb.Sheets(物料清单) 2. 连接SAP If Not ConnectToSAP() Then Exit Sub 3. 读取物料清单 Dim materialList As Variant materialList GetMaterialList(ws) 4. 批量查询 BatchQuerySAP materialList 5. 结果处理 ProcessResults ws End Sub3.2 SAP登录与会话控制智能登录函数Function ConnectToSAP() As Boolean On Error Resume Next Set SapGuiAuto GetObject(SAPGUI) Set application SapGuiAuto.GetScriptingEngine Set connection application.Children(0) Set session connection.Children(0) If session Is Nothing Then MsgBox SAP登录失败请检查连接状态, vbExclamation ConnectToSAP False Else session.findById(wnd[0]).maximize ConnectToSAP True End If End Function3.3 物料数据批量查询实现核心查询逻辑Sub QuerySingleMaterial(session As Object, plant As String, material As String, year As String, period As String) 输入事务码 session.findById(wnd[0]/tbar[0]/okcd).Text /nckm3n session.findById(wnd[0]).sendVKey 0 设置查询条件 session.findById(wnd[0]/usr/ctxtMLKEY-WERKS_ML_PRODUCTIVE).Text plant session.findById(wnd[0]/usr/ctxtMLKEY-MATNR).Text material session.findById(wnd[0]/usr/txtMLKEY-BDATJ).Text year session.findById(wnd[0]/usr/txtMLKEY-POPER).Text period 执行查询 session.findById(wnd[0]/tbar[1]/btn[13]).press 刷新按钮 获取结果数据 ExtractPriceData session End Sub3.4 价格数据提取技术多货币类型价格抓取Sub ExtractPriceData(session As Object) Dim priceData(1 To 5) As Variant 公司代码货币 session.findById(wnd[0]/usr/cmbMLKEY-CURTP).Key 10 priceData(1) session.findById(wnd[0]/usr/txtCKMLCR-STPRS).Text 标准价格 priceData(2) session.findById(wnd[0]/usr/txtCKMLCR-PEINH).Text 价格单位 集团公司货币 session.findById(wnd[0]/usr/cmbMLKEY-CURTP).Key 30 priceData(3) session.findById(wnd[0]/usr/txtCKMLCR-STPRS).Text 获取成本组件 priceData(4) GetCostComponents(session) 返回数据 Return priceData End Sub4. 高级功能实现4.1 多线程查询优化对于大批量查询可采用异步处理提升效率Sub AsyncBatchQuery(materialList As Variant) Dim i As Long, maxThread As Integer maxThread 4 根据电脑性能调整 For i LBound(materialList) To UBound(materialList) Step maxThread 创建多个SAP会话并行处理 Dim j As Integer For j 0 To maxThread - 1 If i j UBound(materialList) Then CreateNewSessionAndQuery materialList(i j) End If Next j 等待所有会话完成 WaitForCompletion Next i End Sub4.2 异常处理机制健壮的错误处理体系Sub SafeSAPOperation(session As Object, operation As String) On Error GoTo ErrorHandler Select Case operation Case login 登录逻辑 Case query 查询逻辑 Case logout 退出逻辑 End Select Exit Sub ErrorHandler: LogError 操作失败: operation , 错误: Err.Description ResetSAPSession session End Sub4.3 结果自动校验实现数据自动比对和异常标记Sub ValidateResults(ws As Worksheet) Dim lastRow As Long, i As Long lastRow ws.Cells(ws.Rows.Count, A).End(xlUp).Row For i 2 To lastRow 检查价格是否为零或异常值 If ws.Cells(i, G).Value 0 Or ws.Cells(i, G).Value 100000 Then ws.Cells(i, K).Value 异常价格 ws.Cells(i, K).Interior.Color RGB(255, 200, 200) End If 检查货币单位是否一致 If ws.Cells(i, H).Value CNY Then ws.Cells(i, L).Value 货币不符 End If Next i End Sub5. 实际应用案例5.1 月度成本核算自动化典型工作流程对比步骤传统方式自动化方案数据准备手动整理Excel清单自动读取ERP导出的原始数据价格查询每个物料3-5分钟每秒处理2-3个物料结果记录手工复制粘贴自动填充并格式化异常检查人工目视检查自动标记异常值总耗时4-6小时5-10分钟5.2 跨工厂价格比对分析实现多工厂数据自动聚合Sub CompareCrossPlantPrices() Dim plants As Variant, results As Collection plants Array(1000, 2000, 3000) 工厂列表 Set results New Collection 各工厂并行查询 Dim plant As Variant For Each plant In plants results.Add QueryPlantPrices(plant) Next 生成比对报告 GenerateComparisonReport results End Sub5.3 历史价格趋势分析自动获取多期间数据构建趋势Sub GetHistoricalPrices(material As String, periods As Variant) Dim historyData As Object Set historyData CreateObject(Scripting.Dictionary) Dim i As Long For i LBound(periods) To UBound(periods) Dim periodData As Variant periodData QueryMaterialPrice(material, periods(i)) historyData.Add periods(i), periodData Next i 绘制价格趋势图 PlotPriceTrend historyData End Sub6. 性能优化技巧6.1 查询速度提升方案实测性能对比优化措施查询速度(物料/分钟)内存占用(MB)基础版本6050禁用SAP界面更新12055多会话并行300150缓存复用会话350100关键优化代码 禁用界面刷新提升速度 session.findById(wnd[0]).setProperty visible, False 查询操作... 恢复界面显示 session.findById(wnd[0]).setProperty visible, True6.2 大规模数据处理百万级数据处理方案分块处理将物料清单拆分为每1000条一个批次中间存储每个批次结果保存为单独CSV文件内存管理定期清理对象释放内存断点续传记录已处理位置支持从中断处继续Sub ProcessLargeDataset(filePath As String) Const BATCH_SIZE As Long 1000 Dim batchCount As Long, i As Long 读取大文件 Dim allMaterials As Variant allMaterials ReadCSV(filePath) batchCount UBound(allMaterials, 1) \ BATCH_SIZE 分批处理 For i 0 To batchCount Dim startRow As Long, endRow As Long startRow i * BATCH_SIZE 1 endRow WorksheetFunction.Min((i 1) * BATCH_SIZE, UBound(allMaterials, 1)) ProcessMaterialBatch allMaterials, startRow, endRow SaveBatchResults i CleanMemory Next i End Sub7. 安全与维护建议7.1 脚本安全规范企业级安全措施认证加密所有脚本配置信息加密存储权限控制按角色分配不同查询权限操作审计记录所有自动化操作日志敏感数据处理自动脱敏关键价格信息安全连接示例Function SecureSAPConnection() As Boolean 使用加密凭证连接 Dim cred As Object Set cred GetSecureCredentials(SAP) 从安全存储获取 On Error Resume Next session.findById(wnd[0]/usr/txtRSYST-BNAME).Text cred.Username session.findById(wnd[0]/usr/pwdRSYST-BCODE).Text cred.Password ...其余登录逻辑 If Err.Number 0 Then SecureSAPConnection True Else SecureSAPConnection False End If End Function7.2 脚本维护策略版本控制方案使用Git管理脚本版本每次修改添加详细注释保留历史兼容接口模块化设计便于更新兼容性处理代码 适配不同SAP GUI版本 Function FindSAPElement(session As Object, idPattern As String) As Object Dim element As Object On Error Resume Next 尝试新版GUI元素ID Set element session.findById(idPattern _NEW) If element Is Nothing Then 回退到旧版ID Set element session.findById(idPattern) End If Set FindSAPElement element End Function8. 扩展应用场景8.1 其他SAP事务码集成常用事务自动化示例事务码功能自动化价值MM03物料主数据查询批量获取物料属性MB52库存查询多仓库库存汇总ME2N采购订单查询供应商交货分析FBL3N供应商行项目应付账款核对8.2 与Power BI集成自动化数据分析流程VBA定时执行SAP数据抓取自动清洗和转换数据格式生成Power BI可读取的CSV文件触发Power BI刷新数据模型Sub ExportForPowerBI(dataRange As Range) 导出为Power BI兼容格式 Dim exportPath As String exportPath ThisWorkbook.Path \SAP_Export_ Format(Now(), yyyymmdd) .csv 使用UTF-8编码保存 Dim fs As Object, ts As Object Set fs CreateObject(ADODB.Stream) fs.Type 2 文本类型 fs.Charset utf-8 fs.Open fs.WriteText RangeToCSV(dataRange) fs.SaveToFile exportPath, 2 fs.Close 更新Power BI数据源 UpdatePowerBIDatasource exportPath End Sub8.3 移动端应用集成企业微信/钉钉通知功能Sub SendWeChatNotification(message As String) Dim http As Object Set http CreateObject(MSXML2.XMLHTTP) 调用企业微信webhook Dim url As String url https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyYOUR_KEY Dim postData As String postData {msgtype:text,text:{content: message }} http.Open POST, url, False http.setRequestHeader Content-Type, application/json http.send postData If http.Status 200 Then LogError 通知发送失败: http.responseText End If End Sub

相关文章:

告别重复劳动:用Excel VBA+SAP GUI脚本,5分钟搞定批量物料价格查询(CKM3N实战)

告别重复劳动:用Excel VBASAP GUI脚本实现批量物料价格查询自动化 1. 痛点场景与解决方案概述 财务和成本会计人员每月都要面对一项耗时且容易出错的任务:批量查询成百上千个物料的成本价格。传统手动操作SAP CKM3N事务码的方式,每个物料需要…...

用Python脚本自动化AD9364 SPI配置:告别手动写寄存器,快速生成初始化代码

Python自动化AD9364 SPI配置:从寄存器黑盒到工程化工具链 在无线通信系统开发中,AD9364作为一款高性能射频收发器,其灵活配置能力往往伴随着复杂的寄存器操作。传统手动配置方式不仅效率低下,更成为快速迭代开发的瓶颈。本文将揭示…...

手把手教你调试DW9763马达驱动:从寄存器配置到Android上层适配全流程

深度解析DW9763马达驱动调试:从寄存器操作到Android HAL层适配实战 在摄像头模组开发中,自动对焦功能的稳定性和精确度直接影响用户体验。DW9763作为一款广泛应用于移动设备的音圈马达驱动芯片,其调试过程涉及硬件寄存器配置、电源管理、内核…...

Kotaemon快速上手体验:开箱即用的RAG系统搭建全流程

Kotaemon快速上手体验:开箱即用的RAG系统搭建全流程 1. 什么是Kotaemon? Kotaemon是由Cinnamon开发的开源RAG(检索增强生成)系统,专门为文档问答(DocQA)场景设计。它提供了一个直观的用户界面…...

构建高效JetBrains IDE评估重置机制的技术架构实现

构建高效JetBrains IDE评估重置机制的技术架构实现 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在JetBrains IDE开发环境中,ide-eval-resetter项目通过智能评估信息清理技术,为开发者提…...

从《原神》到Matlab:我是如何用TheColor工具箱自制一套67角色配色包的(附源码思路)

从游戏美学到科研绘图:用Matlab构建角色配色系统的全流程解析 当我在浏览《原神》角色立绘时,那些精心设计的色彩组合让我联想到一个有趣的问题:这些视觉艺术家精心调配的色板,能否转化为科研绘图中的实用工具?这个灵感…...

OpenMV的PWM控制舵机,从SG90到MG996R,这份参数调试与避坑指南请收好

OpenMV精准控制舵机全攻略:从参数调试到故障排查 引言 在机器人开发领域,舵机控制是构建机械臂、智能小车等项目的核心技术之一。OpenMV作为一款集成了图像处理能力的微控制器,其PWM输出功能常被开发者忽视。实际上,OpenMV的6个PW…...

力诺特玻亮相第139届广交会 展示中国耐热玻璃硬核实力

4月23日,第139届中国进出口商品交易会第二期“品质家居”主题展正式开幕。本届展会紧扣“新、绿、智”主线,聚焦新兴赛道与未来产业,深度对接全球采购新趋势。深耕高硼硅耐热玻璃30年,力诺特玻(301188.SZ)携…...

别再傻等30分钟!微信小程序security.mediaCheckAsync图片检测实战:云函数+消息推送极速方案

微信小程序图片安全检测实战:10秒级响应的云函数架构设计 在微信小程序开发中,图片内容安全检测是每个开发者必须面对的技术挑战。官方文档中"30分钟内返回结果"的说明让不少开发者望而却步,转而选择性能受限的旧版同步接口。但经过…...

开拓药业销售业绩超预期 核心脱发新药KX-826进入上市前关键期

近日,开拓药业(09939.HK)密集发布2026年以来经营及销售成果公告,公司在美妆电商、海外业务、创新原料等板块均实现爆发式增长,商业化能力得到全面验证。随着核心脱发新药KX-826进入上市阶段,这家创新药企正…...

5分钟掌握大气层系统:Nintendo Switch终极自定义实战指南

5分钟掌握大气层系统:Nintendo Switch终极自定义实战指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 你是否想过让你的Switch拥有无限可能?想象一下&#xff0c…...

WechatRealFriends:终极微信好友关系检测工具完整使用指南

WechatRealFriends:终极微信好友关系检测工具完整使用指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends…...

Roo-Code宣布停运-IDE插件赛道的黄昏与云端Agent的黎明

Roo Code 宣布停运:IDE 插件赛道的黄昏与云端 Agent 的黎明方向:AI工具 / 开发工具 / 趋势思考2026年4月22日晚间,一条消息在程序员群体里炸开了锅:Roo Code 将于2026年5月15日正式停运。 300万装机量,VS Code 插件市场…...

D3KeyHelper:暗黑破坏神3玩家的智能自动化伴侣,5分钟开启高效游戏之旅

D3KeyHelper:暗黑破坏神3玩家的智能自动化伴侣,5分钟开启高效游戏之旅 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 在暗黑…...

抖音下载器完整指南:三步轻松保存无水印视频和直播回放

抖音下载器完整指南:三步轻松保存无水印视频和直播回放 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

Vector-Graph-RAG-用一套向量库搞定多跳问答无需图数据库

用一套向量库搞定多跳问答:Vector Graph RAG 的工程哲学方向:AI / RAG工程 / 向量数据库做过 RAG 的工程师,大概都被"多跳问答"折磨过。 问一个简单问题——“二甲双胍适合哪类糖尿病患者?”——Naive RAG 能直接命中&a…...

STM32F103C8T6驱动MLX90614红外测温模块,OLED实时显示温度(附完整工程源码)

STM32F103C8T6与MLX90614红外测温模块的深度开发实践 红外测温技术在工业自动化、医疗设备、智能家居等领域有着广泛应用。今天我们将通过STM32F103C8T6这款经典的Cortex-M3内核微控制器,搭配MLX90614非接触式红外温度传感器,构建一个高精度的温度测量系…...

从雨刮器到座椅加热:聊聊汽车里那些‘不起眼’的LIN总线应用(附信号解码实战)

从雨刮器到座椅加热:汽车LIN总线的微观世界与信号解码实战 雨刮器在挡风玻璃上划出规律的弧线,座椅加热功能在寒冬里传递温暖——这些看似简单的汽车功能背后,都隐藏着一个低调的通信英雄:LIN总线。不同于CAN总线的"明星光环…...

ATT7022校表寄存器配置保姆级指南:以STM32 HAL库SPI驱动为例,搞定0xB9FE等关键值

ATT7022校表寄存器深度配置实战:从0xB9FE到精准计量的STM32 HAL库实现 在智能电表、能源监控等嵌入式系统中,ATT7022系列计量芯片凭借其高精度和丰富功能成为工程师的热门选择。但许多开发者在使用STM32通过SPI配置校表寄存器时,常常遇到数据…...

别再为ModelSim仿真头疼了!手把手教你用Quartus 13.0搭建VHDL七段译码器(附完整库文件配置)

Quartus 13.0与ModelSim仿真全攻略:从零搭建VHDL七段译码器 刚接触FPGA开发的朋友们,是否曾在Quartus和ModelSim的配合使用中遇到过各种"玄学"问题?明明代码编译通过了,仿真时却一片空白;或者波形文件加载了…...

W5500网络芯片的MAC地址怎么来?三种实战方案对比:STM32唯一ID生成 vs 向IEEE申请 vs 固定地址

W5500网络芯片的MAC地址生成策略:从原型开发到量产的合规实践 在物联网设备开发中,MAC地址如同设备的网络身份证,其唯一性和合规性直接影响设备联网的稳定性和商业部署的合法性。以W5500为代表的嵌入式网络芯片,其MAC地址设置往往…...

AIGC率太高怎么降?亲测实用降AI工具+免费降重方法指南

前阵子我把熬了三周写好的实验报告提交给导师,本以为能顺利通过,没想到等来的是打回通知和满页标红的AIGC检测报告。那时候我才明白,现在写论文光过查重不够,降AI已经成了毕业生必须闯的第二关。 为了把论文的AI率降到合格线&…...

C++26反射元编程错误码速查表,覆盖ISO/IEC 14882:2026 WD第17.8.4节全部约束违例场景

更多请点击: https://intelliparadigm.com 第一章:C26反射元编程错误码速查表概览 C26 正式引入标准化的反射(Reflection TS)支持,其核心机制依赖编译期元信息提取与类型内省。当反射操作失败时,编译器将…...

LFM2.5-VL-1.6B实操手册:如何用PIL调整输入图尺寸适配512x512分块要求

LFM2.5-VL-1.6B实操手册:如何用PIL调整输入图尺寸适配512x512分块要求 1. 模型概述 LFM2.5-VL-1.6B是由Liquid AI开发的轻量级多模态大模型,专为端侧和边缘设备设计。该模型结合了1.2B参数的语言模型和约400M参数的视觉模型,能够在低显存环…...

如何快速配置Wand-Enhancer:WeMod客户端终极增强工具使用指南

如何快速配置Wand-Enhancer:WeMod客户端终极增强工具使用指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款专为WeMod…...

【VSCode 2026日志分析插件开发权威指南】:20年实战专家亲授高并发日志解析架构设计与性能优化秘技

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026日志分析插件开发全景概览 VSCode 2026 版本引入了全新日志语义解析引擎(Log Semantic Engine, LSE),为第三方插件提供了结构化日志流注入、上下文感知高…...

Vecow EVS-3000边缘AI计算系统解析与应用指南

1. Vecow EVS-3000系列边缘AI计算系统概览在工业自动化和边缘计算领域,Vecow最新推出的EVS-3000系列AI计算系统引起了广泛关注。这套系统采用了第14代Intel Core处理器(Raptor Lake-S Refresh架构)和MXM规格独立显卡的组合,为边缘…...

NCM文件解密终极指南:快速免费转换网易云音乐加密格式

NCM文件解密终极指南:快速免费转换网易云音乐加密格式 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾遇到过从网易云音乐下载的歌曲只能在特定软件中播放的困扰?🤔 那些以.ncm为扩展名的…...

【2024最稀缺技术资产】:NVIDIA内部流出的CUDA 13 AI算子优化架构设计图(含Hopper H100专属GEMM融合路径)

第一章:CUDA 13 AI算子优化架构设计图的全局认知与技术定位CUDA 13 引入了面向AI工作负载深度定制的算子优化架构,其核心目标是弥合高层框架(如PyTorch、TensorFlow)与底层GPU硬件之间的语义鸿沟。该架构并非孤立的编译器升级&…...

保姆级教程:vCenter服务启动卡住?用这招删除.svcStats文件并重启服务(实测有效)

VMware vCenter服务启动卡住?深度解析.svcStats文件清理方案 遇到vCenter服务启动卡住的情况,很多管理员的第一反应是反复重启或检查硬件配置。但今天我要分享的这个解决方案,可能会颠覆你的认知——删除几个看似无关紧要的JSON文件就能解决问…...