如何为调用SAP提取报表的Excel VBA脚本添加逐行循环功能
解决方案
你只需将参数读取、SAP报表生成导出的逻辑放到循环结构中即可,SAP连接初始化、固定参数(存储路径、输出布局)无需重复执行,放在循环外即可,修改后的完整代码如下:
'声明过程变量 Option Explicit Public SapGuiAuto, WScript, msgcol Public objGui As GuiApplication Public objConn As GuiConnection Public session As GuiSession Sub SAPCustomerReport() '连接SAP会话,仅执行一次 Set SapGuiAuto = GetObject("SAPGUI") Set objGui = SapGuiAuto.GetScriptingEngine Set objConn = objGui.Children(0) Set session = objConn.Children(0) Dim Vendor As String Dim CoCo As String Dim FolderPath As String Dim SAPOutputLayout As String Dim i As Long '循环行号变量 '读取固定参数,仅执行一次 FolderPath = ActiveWorkbook.ActiveSheet.Range("B3").Value SAPOutputLayout = ActiveWorkbook.ActiveSheet.Range("B4").Value i = 10 '参数起始行号 '循环处理所有参数,直到A列对应行为空 Do '读取当前行的参数 Vendor = ActiveWorkbook.ActiveSheet.Cells(i, "A").Value CoCo = ActiveWorkbook.ActiveSheet.Cells(i, "B").Value 'SAP操作逻辑 session.FindById("wnd[0]").Maximize session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nFBL1N" session.FindById("wnd[0]").SendVKey 0 session.FindById("wnd[0]/usr/chkX_SHBV").Selected = True session.FindById("wnd[0]/usr/chkX_MERK").Selected = True session.FindById("wnd[0]/usr/chkX_PARK").Selected = True session.FindById("wnd[0]/usr/ctxtKD_LIFNR-LOW").Text = Vendor session.FindById("wnd[0]/usr/ctxtKD_BUKRS-LOW").Text = CoCo session.FindById("wnd[0]/usr/ctxtPA_VARI").Text = SAPOutputLayout session.FindById("wnd[0]/usr/ctxtPA_VARI").SetFocus session.FindById("wnd[0]/usr/ctxtPA_VARI").CaretPosition = 12 session.FindById("wnd[0]/tbar[1]/btn[8]").Press session.FindById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select session.FindById("wnd[1]/usr/ctxtDY_PATH").Text = FolderPath session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = Vendor & CoCo & ".XLSX" session.FindById("wnd[1]/usr/ctxtDY_FILENAME").CaretPosition = 4 session.FindById("wnd[1]/tbar[0]/btn[11]").Press i = i + 1 '行号下移,处理下一组参数 Loop Until ActiveWorkbook.ActiveSheet.Cells(i, "A").Value = "" '终止条件:A列当前行为空 MsgBox "所有报表已导出完成。" End Sub
补充说明
- 该写法比直接使用
ActiveCell的方式更稳定,不会因为运行过程中误操作选中其他单元格导致参数读取错误,完全符合你要求的遇到空值停止的逻辑 - 运行脚本前请确保SAP已经正常登录到对应客户端,且Excel参数页为当前激活的工作表
- 若遇到文件重名覆盖提示,可自行添加对应弹窗处理逻辑,或提前在SAP中设置默认覆盖同路径文件


内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

