excel - 无法使用脚本访问 SAP GUI 中的“本地文件”导出
问题描述
我对 Stack Overflow 和 VBA 很陌生,所以请原谅我的问题中的任何错误。我们正在尝试使用脚本从 SAP GUI 界面将表格下载到 .txt 文件中
每当我们尝试运行代码时,我们都会收到错误“无法通过 id 找到控件”。
我们试图按下的按钮
我们尝试过的事情:
- 我们尝试使用发送键,但我们对它不是很有信心。这将是我们最后的手段。
- 当我们将 FindAllByName 与“shell”一起使用时,它会单击其下方表格中的“导出”按钮
据我所知
脚本中的数字(代码中的斜体或用**标记)不断变化。因此,我们猜测 SAP 中存储的脚本编号与我们尝试运行的 excel 中的存储脚本编号之间存在冲突
我们尝试交互的表格仅在我们加载总和部件号并点击“开始”时出现。当我们最初打开 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
解决方案
我使用这种方式,它的工作原理:
session.findById("wnd[0]/tbar[0]/okcd").text = "%pc"
让我知道它是否对您有用。
推荐阅读
- java - 如何检查 AWSMobileClient.getInstance().tokens.refreshToken.tokenString 是否有效
- apache-spark - Spark-Hive-Sqoop:使用 Spark 将数据保存在配置单元表中,显示带有 Sqoop 导出的垃圾字符
- spring - 如何在非spring托管类的单元测试类中获取ApplicationContext
- excel - [powershell]从Excel粘贴表格到Word,自动调整表格
- android - Android:BLE蓝牙无法连接到设备
- javascript - HTML 显示密码
- android - 用于获取评分和安装的 Google Play API
- sql - EF Core 3.1 中的 RawSQL 和自动生成的密钥
- java - 如何从 mongodb 检索 datetime?通过将数据与 jDateChosser Java 进行比较
- airflow - 即使 max_active_runs_per_dag=1,气流也会运行手动和计划的 Dag