引用依赖:
VBA 调用 SAP API的RFC函数:RFC_READ_TABLE
Sub A()
'查询SAP表数据并输出到EXCEL,VBA中不区分大小写(保存后会自动把代码、变量转换大小写)
Dim iData As Integer
Dim nField As Integer
Dim nData As Integer
Dim Result As Boolean
Dim vRow As Variant
MsgBox "程序开始"
'初始化登陆信息
Set SAP = CreateObject("SAP.functions.unicode") '使用SAP.FUNCTIONS时会出现中文字符从RFC传过来之后乱码的问题(变成#),使用SAP.FUNCTIONS.UNICODE就可以解决
SAP.Connection.System = "" '此处为系统标示
SAP.Connection.SystemNumber = "" '系统(实例)编号
SAP.Connection.client = "" '客户端
SAP.Connection.User = "" '用户名
SAP.Connection.Password = "" '密码
SAP.Connection.Language = "" '语言
SAP.Connection.ApplicationServer = "" '服务器地址
SAP.Connection.SAPRouter = "" '外网连接的SAP路由
'连接SAP
If SAP.Connection.logon(0, True) = True Then
MsgBox "连接成功"
Else
MsgBox "连接失败"
End If
'call function
Set RFC = SAP.Add("RFC_READ_TABLE")
Set it_fields = RFC.Tables("FIELDS") '查询字段(输入FIELDNAME),字段名(输出FIELDTEXT)
Set it_options = RFC.Tables("OPTIONS") '查询条件
Set it_data = RFC.Tables("DATA") '输出表
'查询表名
RFC.exports("QUERY_TABLE").Value = "MAKT" '
'输出字段名
it_fields.Rows.Add.Value(1, 1) = "MATNR" '初始行列
it_fields.Rows.Add.Value("FIELDNAME") = "MAKTX"
it_fields.Rows.Add.Value("FIELDNAME") = "SPRAS"
'选择条件
it_options.Rows.Add.Value("TEXT") = "MATNR = 'CM-MLFL-KM-VXX'"
'输出字段分隔符
RFC.exports("DELIMITER").Value = ","
'call RFC
Result = RFC.Call
nFields = it_fields.RowCount
nData = it_data.RowCount
For iField = 1 To nFields
Cells(1, iField) = it_fields.Rows(iField).Value("FIELDTEXT") '字段名
Next
For iData = 1 To nData '字段值
vRow = Split(it_data(iData, 1), ",")
Cells(iData + 1, 1) = vRow(0)
Cells(iData + 1, 2) = vRow(1)
Cells(iData + 1, 3) = vRow(2)
Next
MsgBox "程序结束"
End Sub