首页 > 解决方案 > 无法使用脚本访问 SAP GUI 中的“本地文件”导出

问题描述

我对 Stack Overflow 和 VBA 很陌生,所以请原谅我的问题中的任何错误。我们正在尝试使用脚本从 SAP GUI 界面将表格下载到 .txt 文件中

每当我们尝试运行代码时,我们都会收到错误“无法通过 id 找到控件”。

我们试图按下的按钮截图#1

我们尝试过的事情:

  1. 我们尝试使用发送键,但我们对它不是很有信心。这将是我们最后的手段。
  2. 当我们将 FindAllByName 与“shell”一起使用时,它会单击其下方表格中的“导出”按钮截图#2

据我所知

  1. 脚本中的数字(代码中的斜体或用**标记)不断变化。因此,我们猜测 SAP 中存储的脚本编号与我们尝试运行的 excel 中的存储脚本编号之间存在冲突

  2. 我们尝试交互的表格仅在我们加载总和部件号并点击“开始”时出现。当我们最初打开 GUI 时它不会出现。

        Public Declare Function SetForegroundWindow _
    Lib "user32" (ByVal hwnd As Long) As Long
    
    Sub SA_Dump()
    
    Dim App, Connection, session As Object
    Set SapGuiAuto = GetObject("SAPGUI")
    Dim setFocus As Long
    Set App = SapGuiAuto.GetScriptingEngine
    Set Connection = App.Children(0)
    Set session = Connection.Children(0)
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    Dim sCestaGrid As String
    
    Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Copy
    
    setFocus = session.ActiveWindow.Handle
    SetForegroundWindow setFocus
    
    Application.Wait (Now + TimeValue("0:00:05"))
    
    'Reset fields
    session.findById("wnd[0]").resizeWorkingPane 147, 25, False
    session.findById("wnd[0]/usr/subSUB01:/SCF/SG/CA_110SPPDRPSB1:1005/subSUB01:/SCF/SG/CA_110SPPDRPSB1:1001/btnRESETSIMPLESEL").press
    
    'hit selection window
    session.findById("wnd[0]/usr/subSUB01:/SCF/SG/CA_110SPPDRPSB1:1005/subSUB02:/SCF/SG/CA_110SPPDRPSB1:1002/btnSGNT_0000034-MATNR_V").press
    
    'hit copy from clipboard
    session.findById("wnd[1]/tbar[0]/btn[24]").press
    
    'hit Check entries mark
    session.findById("wnd[1]/tbar[0]/btn[0]").press
    
    'hit Copy button
    session.findById("wnd[1]/tbar[0]/btn[8]").press
    
    'hit Go button
    session.findById("wnd[0]/usr/subSUB01:/SCF/SG/CA_110SPPDRPSB1:1005/subSUB01:/SCF/SG/CA_110SPPDRPSB1:1001/btnBUTTON01").press
    
    'Clear clipboard to avoid pop-up at end to close Excel sheets
    Application.CutCopyMode = False
    
    'hit export (ERROR HAPPENS HERE!!!)
    session.findById("wnd[0]/usr/subSUB02:/SCF/SG/CA_110SPPDRPSB1:*2119*/subSUB03:/SCF/SG/CA_110SPPDRPSB1:*2141*/cntlCONTAINER_7/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
    session.findById("wnd[0]/usr/subSUB02:/SCF/SG/CA_110SPPDRPSB1:*2119*/subSUB03:/SCF/SG/CA_110SPPDRPSB1:*2141*/cntlCONTAINER_7/shellcont/shell").selectContextMenuItem "&PC"
    
    'hit Tick button
    session.findById("wnd[1]/tbar[0]/btn[0]").press
    
    'For rename
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "Rel_mvmnt.txt"
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 10
    
    'Hit replace button
    session.findById("wnd[1]/tbar[0]/btn[11]").press
    
    End Sub
    

标签: excelvbascriptingsap-gui

解决方案


我使用这种方式,它的工作原理:

session.findById("wnd[0]/tbar[0]/okcd").text = "%pc"

让我知道它是否对您有用。


推荐阅读