1

我想从 Excel VBA 宏中调用 ABAP 函数。有什么方法我可以遵循来实现这一点。

请帮助我解决这个问题。

4

1 回答 1

2
Dim sapConn As Object 'Declare connection object
Set sapConn = CreateObject("SAP.Functions") 'Create ActiveX object

sapConn.Connection.user = "user"         'Specify user
sapConn.Connection.Password = ""                'Then password
sapConn.Connection.client = "001"               'Client
sapConn.Connection.ApplicationServer = "server" 'Target server address
sapConn.Connection.Language = "PT"              'Language code

'Finally, try to logon to the specified system and check if the connection established
If sapConn.Connection.Logon(0, True) <> True Then
  MsgBox "Cannot Log on to SAP" 'Issue message if cannot logon
Else
  MsgBox "Logged on to SAP!"
End If


Dim rfcAcctDocCheck As Object
Dim oAcctHeader As Object
Dim otAcctAR, otAcctGL, otAcctAP, otAcctAMT, otReturn As Object

Set rfcAcctDocCheck = sapConn.Add("BAPI_ACC_DOCUMENT_CHECK")
Set oAcctHeader = rfcAcctDocCheck.Exports("DOCUMENTHEADER")

Set otAcctGL = rfcAcctDocCheck.Tables("ACCOUNTGL")
Set otAcctAR = rfcAcctDocCheck.Tables("ACCOUNTRECEIVABLE")
Set otAcctAP = rfcAcctDocCheck.Tables("ACCOUNTPAYABLE")
Set otAcctAMT = rfcAcctDocCheck.Tables("CURRENCYAMOUNT")
Set otReturn = rfcAcctDocCheck.Tables("RETURN")

Dim qtLegs As Integer

Dim dt, comp, tpDoc, docRef, tpAcct, acct, customer, vendor, _
    curr, val, spLedger, ccenter, order As String
Dim curLine As Integer

For lin = 1 To UBound(reg)
    id = Format(tbPost.Cells(reg(lin).lin_ini, K_COL_ID), "0000000000")
    dt = getDate(tbPost.Cells(reg(lin).lin_ini, K_COL_DT))
    comp = getCompanyCode(tbPost.Cells(reg(lin).lin_ini, K_COL_EMPR))
    tpDoc = getDocumentType(tbPost.Cells(reg(lin).lin_ini, K_COL_TP_DOC))
    docRef = tbPost.Cells(reg(lin).lin_ini, K_COL_DOC_REF)

    otAcctGL.freeTable
    otAcctAR.freeTable
    otAcctAP.freeTable
    otAcctAMT.freeTable

oAcctHeader("USERNAME") = sapConn.Connection.user
oAcctHeader("HEADER_TXT") = "Lancado via Excel"
oAcctHeader("COMP_CODE") = comp
oAcctHeader("DOC_DATE") = dt
oAcctHeader("PSTNG_DATE") = dt
oAcctHeader("DOC_TYPE") = tpDoc
oAcctHeader("REF_DOC_NO") = docRef

otAcctAMT.Rows.Add
otAcctAMT(otAcctAMT.Rows.Count, "ITEMNO_ACC") = Format(leg, "0000000000")
otAcctAMT(otAcctAMT.Rows.Count, "CURRENCY") = curr
otAcctAMT(otAcctAMT.Rows.Count, "AMT_BASE") = val
Next

If rfcAcctDocCheck.Call = False Then
    MsgBox rfcAcctDocCheck.Exception
End If
于 2013-07-23T03:18:16.520 回答