2016-12-07 1 views
0

Unten ist Code, den ich online gefunden habe, um sich bei SAP anzumelden, um Daten mit VBA zu exportieren. Ich habe es zugeschnitten, um für das zu arbeiten, wofür ich es brauche und es funktioniert großartig. Nur ein Problem, ich kann nicht herausfinden, wie alle Fenster (einschließlich des Anmeldefensters) mit .iconify ausgeblendet werden.VBA 2010 - Verstecke alle SAP Fenster mit .conify

Ich habe grundsätzlich Session.findById("wnd[0]").iconify oder Session.findById("wnd[1]").iconify im gesamten Code hinzugefügt; scheint übertrieben. Die meisten Fenster werden aufblinken und dann ausblenden, aber einige nicht.

Es wäre schön, wenn es eine Möglichkeit gäbe, ALLE Fenster komplett zu verstecken, sogar dort, wo sie nicht aufblitzen. Irgendwelche Ideen?

Auch das Logon-Pad bleibt offen, aber ich habe einen Weg gefunden, es mit einem API-Code loszuwerden. Gibt es einen besseren Weg, dies zu tun?

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 

Vielen Dank im Voraus!

+0

* vielleicht * in der Lage sein, dies zu tun mit dem [EnumChildWindows] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633494 (v = vs.85) .aspx) und [ShowWindow] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548 (v = vs.85) .aspx) API-Funktionen. Sie müssen überprüfen, ob Sie das Anmeldefenster ausblenden können, wenn es modal ist. Ich kann mich nicht ohne weiteres erinnern. – Comintern

+0

Danke Komintern, ich werde einen Blick darauf werfen. – jmeddy

Antwort

1

Ich verwende einen Workaround dafür.

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

Das Fenster wird nicht geschlossen, aber es wird in der Taskleiste landen.

Grüße, ScriptMan

+0

Danke Scriptman, das funktioniert super für das SAP Logon Fenster. Hast du irgendwelche Ideen für mein Hauptproblem mit .iconify? – jmeddy

+0

Es tut mir leid. Ich kann nicht alle Fenster in SAP GUI Scripting verstecken. Ich denke, es funktioniert überhaupt nicht. Iconify ist das Einzige, was ich weiß. – ScriptMan

+0

Das ist in Ordnung, danke für Ihre Hilfe! Die Antwort, die Sie zur Verfügung gestellt haben, ist nützlich, um das SAP Logon-Fenster auszublenden. – jmeddy