【发布时间】:2016-12-07 05:19:02
【问题描述】:
以下是我在网上找到的用于登录 SAP 以使用 VBA 导出数据的代码。我已经对其进行了定制,以满足我的需要,并且效果很好。只是一个问题,我似乎无法弄清楚如何使用 .iconify 隐藏所有窗口(包括登录窗口)。
我基本上在整个代码中添加了Session.findById("wnd[0]").iconify或Session.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
提前致谢!
【问题讨论】:
-
您可能可以使用EnumChildWindows 和ShowWindow API 函数来执行此操作。您需要检查以确保您可以隐藏登录窗口(如果它是模态的)。我不记得了。
-
谢谢共产国际,我会研究一下。