如何处理另存为对话框?

2020-09-16 18:50发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我是脚本专家,特别是将S...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我是脚本专家,特别是将SAP GUI脚本复制到excel VBA,但是SAP会弹出-save as-窗口,该窗口未记录在脚本记录器中:这可能是我不知道的窗口弹出窗口: 如何自动输入路径和文件名,而不必在该弹出窗口中按SAVE?

我也想重写此文件,因为我将此任务重复使用。 我看到有关该主题的一些聊天,但无法获取正确的VBA代码。 tx

以下是SAP GUI中的典型脚本:

  1. session.findById(" wnd [0]")。maximize
  2. session.findById(" wnd [0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont [0]/shell")。doubleClickNode" F00007"
  3. session.findById(" wnd [0]/usr/ctxtCHARG-LOW")。Text =" 4552872B"
  4. session.findById(" wnd [0]/usr/ctxtBWART-LOW")。Text =" 101"
  5. session.findById(" wnd [0]/usr/txtMJAHR-LOW")。Text =" 2000"
  6. session.findById(" wnd [0]/usr/txtMJAHR-HIGH")。Text =" 2015"
  7. session.findById(" wnd [0]/usr/ctxtALV_DEF")。Text ="/img/CPS"
  8. session.findById(" wnd [0]/usr/ctxtALV_DEF")。SetFocus
  9. session.findById(" wnd [0]/usr/ctxtALV_DEF")。caretPosition = 4
  10. session.findById(" wnd [0]/tbar [1]/btn [8]")。按
5条回答
spaceman01
2020-09-16 19:16

嗨,

不确定是否仍然需要提示,无论如何让我分享我自己如何解决对话框问题。

要求是从发票的其中一个输出中创建发票的附件(大多数输出​​已配置为存档模式,但由于某些原因,其中一些没有,并且没有更快的方法每月添加100个以上附件 大约,直到此问题解决为止)。 输出到假脱机,从那里将其作为PDF导出到临时位置,然后从那里作为发票附件上载。

在此代码之前的
'会处理输出并进入假脱机-在这里我们在命中之前就结束了
 '"导出为pdf"按钮
 session.findById(" wnd [0]/usr/chk [1,3]")。selected = true
 session.findById(" wnd [0]/usr/chk [1,3]")。setFocus

 在这里,我在后台启动另一个脚本来处理对话框:
 设置Wshell = CreateObject(" WScript.Shell")
 Wshell.run" C:\ tmp \ script_dialog.vbs",1,否

 '现在您运行"导出为pdf"
 session.findById(" wnd [0]/mbar/menu [0]/menu [2]/menu [2]")。select
 session.findById(" wnd [0]/tbar [0]/okcd")。text ="/img/nvf02"
 session.findById(" wnd [0]")。sendVKey 0
 session.findById(" wnd [0]/usr/ctxtVBRK-VBELN")。text = yourVariable

 睡眠是可选的,我需要它,因为我的实例花了很长时间来处理一些文档
 WScript.Sleep 2 * 1000

 session.findById(" wnd [0]")。sendVKey 0

 '再次运行后台脚本(最后一个脚本在处理对话框结束时停止运行),这次是为了
 '文件上传

 设置Wshell = CreateObject(" WScript.Shell")
 Wshell.run" C:\ tmp \ script_dialog.vbs",1,否

 "以及上传对话框完成后的其他代码

 session.findById(" wnd [0]/titl/shellcont/shell")。pressContextButton"%GOS_TOOLBOX"
 session.findById(" wnd [0]/titl/shellcont/shell")。selectContextMenuItem"%GOS_PCATTA_CREA"
 session.findById(" wnd [0]/tbar [0]/btn [11]")。按
 session.findById(" wnd [0]/tbar [0]/btn [3]")。按
 

这是背景脚本:

'我正在使用excel存储我的变量-如果要覆盖文件,则可能不需要
 昏暗的objExcel
 昏暗的objSheet,intRow,我
 设置objExcel = GetObject(," Excel.Application")
 设置objSheet = objExcel.ActiveWorkbook.ActiveSheet

 docName = objSheet.Cells(2,3).Value
 FileName = docName&"。pdf"

 设置Wshell = CreateObject(" WScript.Shell")
 做
  bWindowFound = Wshell.AppActivate("另存为")
  wscript.sleep 1000
  cWindowFound = Wshell.AppActivate("导入文件")
  wscript.sleep 1000
 循环直到bWindowFound或cWindowFound

 ",这可能是最不优雅的解决方案-使用标签上的sendkey访问必需的输入字段。
 标签页的数量取决于您要访问的内容-您可能会有所不同。 建议反复试验;)

 如果(bWindowFound)然后

 Wshell.appActivate"另存为"
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys文件名
 WScript.Sleep 100
 Wshell.SendKeys" {ENTER}"
 万一

 如果(cWindowFound)然后

 Wshell.appActivate"导入文件"
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys" {TAB}"
 WScript.Sleep 100
 Wshell.SendKeys文件名
 WScript.Sleep 1000
 Wshell.SendKeys" {ENTER}"
 万一
 

希望这会有所帮助。 如果您有任何问题,请告诉我。

干杯

迈克

一周热门 更多>