【问题标题】:VBA 2010 - Hide all SAP windows using .iconifyVBA 2010 - 使用 .iconify 隐藏所有 SAP 窗口
【发布时间】:2016-12-07 05:19:02
【问题描述】:

以下是我在网上找到的用于登录 SAP 以使用 VBA 导出数据的代码。我已经对其进行了定制,以满足我的需要,并且效果很好。只是一个问题,我似乎无法弄清楚如何使用 .iconify 隐藏所有窗口(包括登录窗口)。

我基本上在整个代码中添加了Session.findById("wnd[0]").iconifySession.findById("wnd[1]").iconify;似乎过分了。大多数窗口会闪烁打开,然后隐藏,但也有一些不会。

如果有一种方法可以完全隐藏所有窗口,即使它们不会闪开,那就太好了。有什么想法吗?

此外,登录板保持打开状态,但我找到了使用一些 API 代码摆脱它的方法。有没有更好的方法来做到这一点?

Sub SAPextract()
Dim SAPGUI
Dim Applic
Dim connection
Dim Session
Dim WSHShell

Application.DisplayAlerts = False

Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbNormalFocus

Set WSHShell = CreateObject("WScript.Shell")
  Do Until WSHShell.AppActivate("SAP Logon ")
    Application.Wait Now + TimeValue("0:00:01")
  Loop

Set WSHShell = Nothing
Set SAPGUI = GetObject("SAPGUI")
Set Applic = SAPGUI.GetScriptingEngine
Set connection = Applic.OpenConnection("******", True)
Set Session = connection.Children(0)
  Session.findById("wnd[0]").iconify
  Session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "100"
  Session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = ******
  Session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = ******
  Session.findById("wnd[0]").sendVKey 0
'Session.findById("wnd[0]").maximize
Session.findById("wnd[0]").iconify
Session.findById("wnd[0]/tbar[0]/okcd").Text = "******"
Session.findById("wnd[0]").sendVKey 0

'Session.findById("wnd[0]").maximize
Session.findById("wnd[0]").iconify
Session.findById("wnd[0]/usr/btn[1]").press
Session.findById("wnd[1]").iconify
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,0]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,1]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,2]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,3]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,4]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,5]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,6]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,7]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,7]").SetFocus
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,7]").caretPosition = 5
Session.findById("wnd[1]/tbar[0]/btn[8]").press
Session.findById("wnd[0]").iconify
Session.findById("wnd[0]/usr/btn[17]").press
Session.findById("wnd[1]").iconify
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,0]").Text = "******"
Session.findById("wnd[1]").iconify
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,1]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,2]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,3]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,4]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,5]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,6]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,7]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE").verticalScrollbar.Position = 1
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,7]").Text = "******"
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE").verticalScrollbar.Position = 2
Session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssub/1/2/tblSAPLALDBSINGLE/ctxt[1,7]").Text = "******"
Session.findById("wnd[1]/tbar[0]/btn[8]").press    
Session.findById("wnd[0]").iconify
Session.findById("wnd[0]/usr/ctxt[48]").Text = "******"
Session.findById("wnd[0]/usr/txt[68]").Text = "******"
Session.findById("wnd[0]/tbar[1]/btn[8]").press
Session.findById("wnd[0]").iconify
Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "******"
Session.findById("wnd[0]/tbar[1]/btn[40]").press
Session.findById("wnd[0]").iconify

'Export
Session.findById("wnd[0]").iconify
Session.findById("wnd[0]").sendVKey 21
Session.findById("wnd[1]").iconify
Session.findById("wnd[1]/usr/rad[1]").Select
Session.findById("wnd[1]/usr/rad[0]").Select
Session.findById("wnd[1]").iconify
Session.findById("wnd[1]/tbar[0]/btn[0]").press
Session.findById("wnd[1]").iconify
Session.findById("wnd[1]/usr/ctxt[0]").Text = "******"
Session.findById("wnd[1]/usr/ctxt[1]").Text = "******"
Session.findById("wnd[1]/tbar[0]/btn[11]").press

Set Session = Nothing
  connection.CloseSession ("ses[0]")
Set connection = Nothing

提前致谢!

【问题讨论】:

  • 可能可以使用EnumChildWindowsShowWindow API 函数来执行此操作。您需要检查以确保您可以隐藏登录窗口(如果它是模态的)。我不记得了。
  • 谢谢共产国际,我会研究一下。

标签: excel sap vba


【解决方案1】:

我为此使用了一种解决方法。

 bWindowFound = Wshell.AppActivate("SAP Logon")
  if bWindowFound then
     Wshell.appActivate "SAP Logon"
     WScript.Sleep 200
     Wshell.sendkeys "%{F4}" 
     WScript.Sleep 200
  end if

窗口不会关闭,但会出现在任务列表中。

问候, 脚本人

【讨论】:

  • 感谢 Scriptman,这对 SAP 登录窗口非常有用。您对我使用 .iconify 的主要问题有什么想法吗?
  • 我很抱歉。我不知道如何隐藏 SAP GUI 脚本中的所有窗口。我想它根本不起作用。我只知道 Iconify。
  • 没关系,谢谢你的帮助!您提供的答案对于隐藏 SAP 登录窗口很有用。
猜你喜欢
  • 2013-06-14
  • 2013-09-06
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多