Im folgenden meine Funktion die eine Verbindung zu SAP aufbaut.
Diese Funktion rufe ich später auf.
Dim W_System
Function Attach_Session() As Boolean
Dim il, it
Dim W_conn, W_Sess
If W_System = "" Then
Attach_Session = False
Exit Function
End If
If Not objSess Is Nothing Then
If objSess.Info.SystemName & objSess.Info.Client = W_System Then
Attach_Session = True
Exit Function
End If
End If
If objGui Is Nothing Then
Set SapGuiAuto = GetObject("SAPGUI")
Set objGui = SapGuiAuto.GetScriptingEngine
End If
For il = 0 To objGui.Children.Count - 1
Set W_conn = objGui.Children(il + 0)
For it = 0 To W_conn.Children.Count - 1
Set W_Sess = W_conn.Children(it + 0)
If W_Sess.Info.SystemName & W_Sess.Info.Client = W_System Then
Set objConn = objGui.Children(il + 0)
Set objSess = objConn.Children(it + 0)
Exit For
End If
Next
Next
If objSess Is Nothing Then
MsgBox "No active session to system " + W_System + ", or scripting is not enabled.", vbCritical + vbOKOnly
Attach_Session = False
Exit Function
End If
If IsObject(WScript) Then
WScript.ConnectObject objSess, "on"
WScript.ConnectObject objGui, "on"
End If
Set objSBar = objSess.FindById("wnd[0]/sbar")
objSess.FindById("wnd[0]").Maximize
Attach_Session = True
End Function
So dann wird die Funktion aufgerufen und ein SAP Script teil ausgeführt.
Wie Folgt:
Public Sub BVsHolen()
W_System = "CXT801"
Dim W_Ret As Boolean
W_Ret = Attach_Session
If Not W_Ret Then
Exit Sub
End If
On Error GoTo myerr
selectedPfad = ThisWorkbook.Path
Application.ScreenUpdating = True
objSess.FindById("wnd[0]").Maximize
objSess.FindById("wnd[0]/tbar[0]/okcd").Text = "/nmb51"
objSess.FindById("wnd[0]/tbar[0]/btn[0]").Press
objSess.FindById("wnd[0]/usr/ctxtMATNR-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtMATNR-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtWERKS-LOW").Text = HausnummerStr
objSess.FindById("wnd[0]/usr/ctxtWERKS-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtLGORT-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtLGORT-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtCHARG-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtCHARG-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtLIFNR-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtLIFNR-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtKUNNR-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtKUNNR-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtBWART-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtBWART-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtBWART-HIGH").SetFocus
objSess.FindById("wnd[0]/usr/ctxtBWART-HIGH").CaretPosition = 0
objSess.FindById("wnd[0]/usr/btn%_BWART_%_APP_%-VALU_PUSH").Press
objSess.FindById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,0]").Text = "551"
objSess.FindById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,1]").Text = "552"
objSess.FindById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,2]").Text = "917"
objSess.FindById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,3]").Text = "918"
objSess.FindById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,4]").Text = "925"
objSess.FindById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,4]").SetFocus
objSess.FindById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,4]").CaretPosition = 3
objSess.FindById("wnd[1]/tbar[0]/btn[8]").Press
objSess.FindById("wnd[0]/usr/ctxtSOBKZ-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtSOBKZ-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/txtMAT_KDAU-LOW").Text = ""
objSess.FindById("wnd[0]/usr/txtMAT_KDAU-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/txtMAT_KDPO-LOW").Text = ""
objSess.FindById("wnd[0]/usr/txtMAT_KDPO-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtSAKTO-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtSAKTO-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtBUDAT-LOW").Text = meinDatum
objSess.FindById("wnd[0]/usr/ctxtBUDAT-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/txtUSNAM-LOW").Text = ""
objSess.FindById("wnd[0]/usr/txtUSNAM-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/ctxtVGART-LOW").Text = ""
objSess.FindById("wnd[0]/usr/ctxtVGART-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/txtXBLNR-LOW").Text = ""
objSess.FindById("wnd[0]/usr/txtXBLNR-HIGH").Text = ""
objSess.FindById("wnd[0]/usr/radRHIER_L").SetFocus
objSess.FindById("wnd[0]/usr/radRHIER_L").Select
objSess.FindById("wnd[0]/usr/radRFLAT_L").SetFocus
objSess.FindById("wnd[0]/usr/radRFLAT_L").Select
objSess.FindById("wnd[0]/usr/chkDATABASE").Selected = True
objSess.FindById("wnd[0]/usr/chkSHORTDOC").Selected = False
objSess.FindById("wnd[0]/usr/ctxtALV_DEF").Text = "BV TÄGLICH"
objSess.FindById("wnd[0]/usr/chkARCHIVE").SetFocus
objSess.FindById("wnd[0]/usr/chkARCHIVE").Selected = False
objSess.FindById("wnd[0]/usr/chkSHORTDOC").Selected = False
objSess.FindById("wnd[0]/usr/chkSHORTDOC").SetFocus
objSess.FindById("wnd[0]/tbar[1]/btn[8]").Press
objSess.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").SetCurrentCell 8, "MAKTX"
objSess.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectedRows = "8"
objSess.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").ContextMenu
objSess.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectContextMenuItem "&XXL"
objSess.FindById("wnd[1]/tbar[0]/btn[0]").Press
objSess.FindById("wnd[1]/usr/ctxtDY_PATH").Text = selectedPfad & "\"
objSess.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = "bvtaeglichms.xlsx"
objSess.FindById("wnd[1]/usr/ctxtDY_FILENAME").CaretPosition = 17
objSess.FindById("wnd[1]/tbar[0]/btn[11]").Press
'Attach_Session = False
' An dieser Stelle möchte ich die Verbindung trennen, bekomme es aber einfach nicht geregelt...
'Hoffe Ihr könnt helfen.
Exit Sub
myerr:
MsgBox "Error occured while retrieving data", vbCritical + vbOKOnly
End Sub
Gruß Sori