ich soll Aufträge aus einer Exceldatei über den o.g. BAPI im SAP anlegen.
Leider funktioniert das nicht.
Hier mein VBA-Coding:
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- Option Explicit
- Dim functionCtrl As Object 'Function Control (Sammelobjekt: Container)
- Dim sapConnection As Object 'Verbindungsobjekt
- Dim theFunc As Object 'Function Objekt
- Dim die_exception As Object
- Dim bWeiter As Boolean
- Dim i As Integer
- Dim sType As String
- Dim iStartPos As Integer
- Dim returnFunc As Boolean
- Sub Testauftrag()
- Worksheets(1).Select
- 'Erstellen eines Funktionsobjektes
- Set functionCtrl = CreateObject("SAP.Functions")
- Set sapConnection = functionCtrl.Connection
- 'Logon mit Initialwerten
- sapConnection.Client = "800"
- sapConnection.Language = "DE"
- If sapConnection.Logon(0, False) <> True Then
- MsgBox "Keine Verbindung zum R/3!", vbCritical
- Call Finish(functionCtrl, sapConnection)
- Exit Sub 'Programm beenden
- End If
- 'Referenz auf Funktionsobjekt "BAPI_SALESDOCU_CREATEWITHDIA"
- Set theFunc = functionCtrl.Add("BAPI_SALESDOCU_CREATEWITHDIA")
- ' Ab der 4. Zeile stehen die Benutzerdaten
- i = 4
- '************************************************************
- ' Schleife über alle Aufträge
- '************************************************************
- While i < 5 ' Testweise
- Dim Sammler As Object
- Dim Auftraggeber As Object
- Dim Pos As Object
- ' Kontraktart
- Call FillInterface(theFunc, Sammler, "SALES_HEADER_IN", i)
- ' Auftraggeber
- Call FillInterface(theFunc, Auftraggeber, "SALES_PARTNERS", i)
- 'Positionen
- Call FillInterface(theFunc, Pos, "SALES_ITEMS_IN", i)
- ' Aufruf der BAPI-Funktion
- Call BAPIFunction(theFunc)
- i = i + 1
- Wend
- '************************************************************
- ' Ende der Schleife über Aufträge
- '************************************************************
- ' Abmelden
- Call Finish(functionCtrl, sapConnection)
- MsgBox "Programm beendet!", vbOKOnly, "Beenden"
- End Sub
- ' ************************************************************
- ' Prozedur: Finish
- '
- ' Aufgabe : Aufräumarbeiten: Abmelden beim SAP-System, Zurücksetzten
- ' von Referenzvariablen
- ' ************************************************************
- Sub Finish(ByRef functionCtrl As Object, ByRef sapConnection As Object)
- ' Abmelden vom SAP-System, falls die Anmeldung vorher erfolgt ist
- If Not IsNull(functionCtrl.Connection) Then
- 'Vebindung zum R/3 beenden !
- functionCtrl.Connection.logoff
- End If
- '
- 'Objekte und damit Speicherplatz freigeben
- Set sapConnection = Nothing
- Set functionCtrl = Nothing
- End Sub
- ' ************************************************************
- ' Prozedur: FillInterface
- '
- ' Aufgabe : Füllen der Schnittstelle der BAPI's.
- '' ************************************************************
- Sub FillInterface(ByRef theFunc As Object, ByRef ObjectName As Object, sParamName As String, iRow As Integer)
- Select Case sParamName
- Case "SALES_HEADER_IN"
- Set ObjectName = theFunc.exports(sParamName)
- ObjectName.Value("DOC_TYPE") = Cells(iRow, 1)
- ObjectName.Value("SALES_ORG") = Cells(iRow, 2)
- ObjectName.Value("DISTR_CHAN") = Cells(iRow, 3)
- ObjectName.Value("DIVISION") = Cells(iRow, 4)
- ObjectName.Value("DATE_TYPE") = Cells(iRow, 5)
- Case "SALES_PARTNERS"
- Set ObjectName = theFunc.tables.Item(sParamName)
- ObjectName.AppendRow
- For Each ObjectName In ObjectName.Rows
- ObjectName("PARTN_ROLE") = Cells(iRow, 6)
- ObjectName("PARTN_NUMB") = Cells(iRow, 7)
- Next
- Case "SALES_ITEMS_IN"
- Set ObjectName = theFunc.tables.Item(sParamName)
- ObjectName.AppendRow
- For Each ObjectName In ObjectName.Rows
- ObjectName("MATERIAL") = Cells(iRow, 8)
- ObjectName("TARGET_QTY") = Cells(iRow, 9)
- Next
- Case "DEFAULTS"
- Set ObjectName = theFunc.exports(sParamName)
- MsgBox sParamName
- End Select
- End Sub
- ' ************************************************************
- ' Prozedur: BAPIFunction
- '
- ' Aufgabe : ruft das BAPI auf und analysiert die Tab mit den Rückgabewe.
- ' Die Rückgabewerte werden in die Exceltab in die jeweilige Zeile
- ' geschrieben.
- '
- ' ***********************************************************
- Sub BAPIFunction(ByRef theFunc As Object)
- 'Aufruf des Bapi
- returnFunc = theFunc.Call
- MsgBox "Fehler beim Zugriff auf Funktion im R/3 ! ", vbCritical
- End If
- End Sub
- GeSHi ©
Ich habe ein ABAP-Programm mit den gleichen Übergabewerten geschrieben und dort funktionierts. Beim VBA-Progamm tritt bei returnFunc = theFunc.Call ein Fehler auf.
Keine Ahnung warum.
Kann mir jemand helfen?
Gruß
Mrs. Hilflos