jueves, 16 de febrero de 2012

Conectar excel con SAP

A continuacion una macro con la que desde excel se conecta a sap a una funcion z
la cual tiene que estar marcada en atrubibutos como RFC, en este ejemplo nomandamos parametros solo obtenemos los 10 primeros registros de la tabla KNA1 y los mostramos en el excel.



Sub Conectar()


Dim R3 As Object

Dim MyFunc As Object

' Parametros para exportar a la función RFC

Dim PI_CODIGO As Object

' Tablas para exportar a la función RFC

Dim PT_TABLA As Object

' Tablas para importar de la función RFC

Dim PT_OUTPUT As Object

' Resultado de la conexión con SAP

Dim Result As Boolean

' Otras variables

Dim iRow, iRowAux As Integer

'************************************************************************

' Flujo de proceso

'************************************************************************

' Establecer la conexión con los SAP add-ins

Set R3 = CreateObject("SAP.Functions")

' Ejecutar la función RFC en modo visible (te saldrá el popup de SAP GUI para poner usuario y contraseña

If R3.Connection.logon(0, False) <> True Then

MsgBox ("Error conectando al sistema")

End

Else

' Indicar la función RFC

Set MyFunc = R3.Add("ZTESTKNA1")

' Cargar parametros a ser enviados a la RFC – EXPORTING

' Set PI_CODIGO = MyFunc.exports("PI_CODIGO")

' PI_CODIGO.Value = Range("A1").Value

' Cargar tablas a ser enviadas a la RFC – TABLES

' Set PT_TABLA = MyFunc.Tables("I_KNA1")

' PT_TABLA.Rows.Add

' PT_TABLA.Value(1, "NAME1") = Range("B1").Value

' PT_TABLA.Value(1, "CAMPO2") = Range("B2").Value

' PT_TABLA.Value(2, "CAMPO1") = Range("C1").Value

' PT_TABLA.Value(2, " CAMPO2") = Range("C2").Value

' Llamar a la función RFC y guardar el resultado

Result = MyFunc.CALL

If Result = False Then

MsgBox ("Error llamando a la función")

Else

' Recuperar las tablas de salida – TABLES

Set PT_OUTPUT = MyFunc.Tables("I_KNA1")

For iRow = 1 To PT_OUTPUT.RowCount

ActiveCell.Offset(iRow, 0) = PT_OUTPUT(iRow, "NAME1")


Next

' Salir del sistema SAP

R3.Connection.logoff

End If

End If

End Sub