VBA调用RFC

 
  
  1. 创建sap.functions对象使用的是wdtfuncs.ocx文件(在gui的安装目录下也有)
  2. 运行到createObject(sap.functions)报activex 429”不能创建对象的错误“,是因为用的是64位的excel,wdtfuncs.ocx文件是32位的,使用64位环境访问不到。可以换32位excel或通过修改注册表解决,后者比较麻烦,不推荐。
  3. rfc.call 返回 true表示调用成功,返回false表示调用失败,如果失败了,可以查看rfc.exception。exception “system_fialure”表示RFC运行时错误,可以用ST22查看错误。有时直接执行RFC没有问题,但远程调用却可能出错,比如RFC中调用了屏幕。

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 = "ED1" '此处为系统标示
SAP.Connection.SystemNumber = "00" '系统(实例)编号
SAP.Connection.client = "999" '客户端
SAP.Connection.User = "CHENYL" '用户名(不知道为什么CHENYLO1连不上)
SAP.Connection.Password = "110110" '密码
SAP.Connection.Language = "ZH" '语言
SAP.Connection.ApplicationServer = "16.1.1.10" '服务器地址
'连接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" ' my table in SAP
'输出字段名
'it_fields.Rows.Add.Value("FIELDNAME") = "MATNR" '
it_fields.Rows.Add.Value(1, 1) = "MATNR"
it_fields.Rows.Add.Value("FIELDNAME") = "MAKTX"
'选择条件
'it_options.Rows.Add.Value("TEXT") = "MATNR = '300000255'"
'输出字段分隔符
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)
Next
 
MsgBox "程序结束"
End Sub

你可能感兴趣的:(SAP接口技术)