Hallo SAP-Claudi,
wie sollte ich da stehen, wenn ich nach dieser Ankündigung von dir passen müsste? Unvorstellbar! ;-)
1. Ich hätte gerne, dass sich das Skript "dunkel" anmeldet, d.h. die Zwischendynpros nicht sichtbar sind.
Das geht im SAP GUI Scripting nicht 100%-ig auf. Ein kurzeitiges Aufflackern ist nicht ganz zu vermeiden. Die SAP-Session wird einfach in die Taskleiste geschickt. Statt maximize oder überhaupt muss iconify verwendet werden.
2. Wie realisiere ich, dass bei schon angemeldetem Benutzer nicht nochmal das Anmeldefenster durchlaufen wird ?
In dem man sich an einer richtigen Stelle im Script/ VBA davon überzeugt.
Deine VBA-Anmeldung funktioniert nur, wenn das SAP Logon - Fenster (saplogon.exe) bereits aktiv ist. Ist das nicht der Fall, erscheint bei dir ein Fehler. Daher kommt an dieser Stelle auch noch eine zusätzliche Erweiterung von mir, sozusagen als Bonus. :-)
Sub SapGui()
Dim oSapGui As Object
Dim oApp As SAPFEWSELib.GuiApplication
Dim oConn As SAPFEWSELib.GuiConnection
Dim oSession As SAPFEWSELib.GuiSession
Set wshell = CreateObject("Wscript.Shell")
On Error Resume Next
Set oSapGui = GetObject("SAPGUI")
Set oApp = oSapGui.GetScriptingEngine
myError = Err.Number
On Error GoTo 0
If myError <> 0 Then
wshell.Run Chr(34) & "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe" & Chr(34), 6, False
Application.Wait (Now + TimeValue("00:00:04"))
myError = 0
On Error Resume Next
Set oSapGui = GetObject("SAPGUI")
Set oApp = oSapGui.GetScriptingEngine
myError = Err.Number
On Error GoTo 0
If myError <> 0 Then
MsgBox "SAP Logon ist nicht installiert.", vbInformation
End If
End If
On Error Resume Next
Set oConn = oApp.Children(0)
myError = Err.Number
' 1. Session der Connection
Set oSession = oConn.Children(0)
myError = Err.Number
On Error GoTo 0
If myError <> 0 Then
Set oConn = oApp.OpenConnection("...", False)
Set oSession = oConn.Children(0)
oSession.findById("wnd[0]").iconify
'oSession.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "..."
oSession.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "..."
oSession.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "..."
oSession.findById("wnd[0]").SendVKey 0
oSession.StartTransaction ("SM35")
Else
MsgBox "Sie sind bereits in SAP angemeldet.", vbInformation, "SAP - Anmeldung"
End If
Set oSession = Nothing
Set oConn = Nothing
Set oApp = Nothing
Set oSapGui = Nothing
End Sub
Grüße,
ScriptMan