VBA 2010 - 使用.iconify隐藏所有SAP窗口

时间:2016-12-07 05:19:02

标签: excel-vba sap vba excel

下面是我在网上找到的用于登录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

提前致谢!

1 个答案:

答案 0 :(得分: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