Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SAP öffnen bei mehreren offenen Systemen

SAP öffnen bei mehreren offenen Systemen
30.10.2015 11:32:32
Patrick
Hallo,
ich nutze zwei verschiedene SAP Systeme die sich im Fenstername gut unterscheiden lassen. Jetzt möchte ich per VBA (oder VBS) ein Script ausführen, das entscheided, ob das richtige SAP Systme offen ist und gegebenenfalls ein Anmeldescript ausführt.
Das Anmeldescript habe ich mir entsprechend konfiguriert:

'***** Parameter für SAP - Anmeldung *****
PFAD = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
myConnection = "CAE - CSE - Production System Europe Central"
Name = "USER"
Passwort = "PASSW"
Mandant = "600"
'***** Auto-Start *****
set wshell = createObject("Wscript.Shell")
on error resume next
Number_Session = 0
Set SapGuiAuto = GetObject("SAPGUI")
Set SAP_Application = SapGuiAuto.GetScriptingEngine
Set SAP_Connection = SAP_Application.Children(0)
Set session = SAP_Connection.Children(0)
Number_Session = session.info.sessionnumber
on error goto 0
if Number_Session = 0 then
Number_Process = 0
Dim objWMIService, colItems, objItem, strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.InstancesOf("Win32_Process")
For Each objItem In colItems
'WScript.Echo objItem.ProcessId & ":" & objItem.Name
if right(objItem.Name,12)="saplogon.exe" then Number_Process = Number_Process + 1
Next
Set objWMIService = Nothing
Set colItems = Nothing
If Number_Process = 0 Then
do
wshell.run chr(34) & PFAD & chr(34)
wscript.sleep 4000
error = 0
On Error Resume Next
If Not IsObject(SAP_Application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SAP_Application = SapGuiAuto.GetScriptingEngine
End If
error = Err.Number
if error = 0 then exit do
Anzahl = Anzahl + 1
if Anzahl = 5 then exit do
On Error GoTo 0
loop
If error  0 Then
MsgBox "SAP Logon ist nicht installiert." , vbInformation
end if
end if
on error resume next
If Not IsObject(SAP_connection) Then
Set connection = SAP_Application.Children(0)
error = err.number
msgbox error
End If
If Not IsObject(session) Then
Set session = SAP_connection.Children(0)
error = err.number
msgbox error
End If
on error goto 0
if error  0 then
Set SAP_Connection = SAP_Application.openconnection(myConnection)
Set session = SAP_Connection.Children(0)
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = Mandant
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = Name
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = Passwort
session.findById("wnd[0]").sendVKey 0
wscript.sleep 2000
else
'	msgbox "Sie sind bereits im SAP angemeldet.", vbinformation, "SAP - Anmeldung"
end if
end if
Klar, das Script habe ich mir nicht selbst zusammengebastelt, es handelt sich auch schon um eine Übernahme von "Scriptman."
Mein Problem ist jetzt:
Bin ich bereits in einem anderen System angemeldet (z.B Name "CFR") schlagen alle if not is object Connection oder Session Prüfungen fehl, weil ja eben schon Verbindungen und Sessions offen sind, aber nicht die richtigen.
Aus lauter Verzweifelung habe ich schon probiert über Appactive und den Fensternamen Fehler zu provozieren, die ich dann auswerte und entscheide, ob die Anmelderoutine durchlaufen werden muss oder nicht.
Hat jemand eine gute Idee für mich?
Gruß,
Patrick

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SAP öffnen bei mehreren offenen Systemen
30.10.2015 18:54:21
Esmo
Moin Patrick,
Du kannst doch den Namen der Verbindung prüfen - siehe http://scn.sap.com/thread/3496707:
Set SAP_Application = SapGuiAuto.GetScriptingEngine
For i = 0 To SAP_Application.Connections.Count() - 1
Set Connection = Application.Children(i)
Conn = Connection.Description()
If Conn = "CAE" Then
Flag = True
Exit For
End If
Next

Falls Du nicht im richtigen System bist, baust Du dann eine Verbindung auf...
Schönes Wochenende
Ralph

Anzeige
AW: SAP öffnen bei mehreren offenen Systemen
02.11.2015 16:12:07
Patrick
Hallo Ralph,
Connection.Description() spuckt mir eine Zahl aus und nicht wie gehofft den Fenster-, oder Systemname.
Gibt es da vielleicht etwas anderes (so wie .name, oder .wasweißich)?
Gruß,
Patrick

AW: SAP öffnen bei mehreren offenen Systemen
02.11.2015 17:34:49
Patrick
Hallo,
ich bin jetzt schon ein gehöriges Stück weiter. VBA spuckt mir mit Hilfe folgenden Codes die Systemnamen aus:
Debug.Print SAPapplication.Connections(0).Children(0).info.systemname
Debug.Print SAPapplication.Connections(1).Children(0).info.systemname
For i = 0 To SAPapplication.Connections.Count
If SAPapplication.Connections(i).Children(0).info.systemname = "CSE" Then MsgBox "Juhuuu"
Next i
Aber warum geht die for-Schleife nicht, während das normale Durchnummerieren wunderbar funktioniert? Und ja, ich habe den Index geprüft (bei zwei Verbindungen ist er 0 bis 1).
Die Syntax .info.systemname habe ich im Internet gefunden. Gibt es eine Chance solche Methoden als Hilfe angedient zu bekommen, oder sind diese Programm spezifisch?
Gruß,
Patrick
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

SAP öffnen bei mehreren offenen Systemen


Schritt-für-Schritt-Anleitung

  1. VBA-Umgebung öffnen: Starte Excel und öffne den Visual Basic for Applications (VBA) Editor mit ALT + F11.

  2. Neues Modul erstellen: Rechtsklicke im Projekt-Explorer auf dein Projekt und wähle "Einfügen" > "Modul".

  3. Code eingeben: Kopiere den folgenden VBA-Code in das Modul:

    '***** Parameter für SAP - Anmeldung *****
    PFAD = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
    myConnection = "CAE - CSE - Production System Europe Central"
    Name = "USER"
    Passwort = "PASSW"
    Mandant = "600"
    
    '***** Auto-Start *****
    Set wshell = CreateObject("Wscript.Shell")
    On Error Resume Next
    Number_Session = 0
    Set SapGuiAuto = GetObject("SAPGUI")
    Set SAP_Application = SapGuiAuto.GetScriptingEngine
    Set SAP_Connection = SAP_Application.Children(0)
    Set session = SAP_Connection.Children(0)
    ...

    (Der vollständige Code kann wie im Forumthread beschrieben ergänzt werden.)

  4. Verbindung prüfen: Füge eine Logik hinzu, um zu überprüfen, ob das richtige SAP System bereits geöffnet ist, indem du die Verbindung und die Session überprüfst.

  5. Skript ausführen: Teste dein Skript, um sicherzustellen, dass es das SAP System korrekt öffnet oder schließt.


Häufige Fehler und Lösungen

  • Fehler: "SAP Logon ist nicht installiert."

    • Lösung: Stelle sicher, dass der Pfad zur saplogon.exe korrekt ist und SAP GUI installiert ist.
  • Fehler: "Connection.Description() gibt eine Zahl aus."

    • Lösung: Verwende stattdessen die Methode SAPapplication.Connections(i).Children(0).info.systemname, um den Systemnamen zu erhalten.
  • Fehler: Schleifen funktionieren nicht wie erwartet.

    • Lösung: Überprüfe die Schleifenbedingungen und stelle sicher, dass die Indizes korrekt gesetzt sind. Achte darauf, dass die Schleife den richtigen Bereich durchläuft.

Alternative Methoden

  • VBS anstelle von VBA: Du kannst auch ein VBS-Skript erstellen, um das SAP System zu steuern. Der Code würde ähnlich aussehen, jedoch ohne die Excel-spezifischen Teile.

  • SAP GUI Scripting API: Nutze die SAP GUI Scripting API, um direkt aus Excel heraus zu interagieren und das SAP System zu steuern.


Praktische Beispiele

  1. SAP System öffnen:

    If Not IsObject(session) Then
        Set SAP_Connection = SAP_Application.openconnection(myConnection)
        Set session = SAP_Connection.Children(0)
        session.findById("wnd[0]").maximize
    End If
  2. SAP Farbe ändern:

    session.findById("wnd[0]/usr").SetProperty "background", "255,0,0" ' Ändert die Hintergrundfarbe zu Rot
  3. SAP Logon Fenster schließen:

    session.findById("wnd[0]").Close

Tipps für Profis

  • Debugging mit Debug.Print: Nutze Debug.Print, um Informationen während der Ausführung zu protokollieren. So kannst du leichter Fehler finden.
  • Komplexe Bedingungen: Verwende komplexe Bedingungen, um sicherzustellen, dass nur das richtige SAP System geöffnet wird.
  • WMI-Objekte: Nutze Windows Management Instrumentation (WMI) zur Prozessüberwachung, um aktive SAP Logon Prozesse zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob ich im richtigen SAP System bin?
Du kannst die SAP_Application.Connections durchlaufen und die info.systemname abfragen, um sicherzustellen, dass du im richtigen System bist.

2. Was mache ich, wenn das SAP Logon Fenster nicht schließt?
Vergewissere dich, dass du die richtige Session referenzierst und dass das Fenster tatsächlich offen ist, bevor du versuchst, es zu schließen.

3. Kann ich das Skript anpassen, um mehrere SAP Systeme gleichzeitig zu öffnen?
Ja, du kannst mehrere Verbindungen im Skript definieren und entsprechend nach den Systemnamen suchen, um die gewünschten Systeme zu öffnen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige