VBA调用RFC

xiaoxiao2021-02-28  34

创建sap.functions对象使用的是wdtfuncs.ocx文件(在gui的安装目录下也有)运行到createObject(sap.functions)报activex 429”不能创建对象的错误“,是因为用的是64位的excel,wdtfuncs.ocx文件是32位的,使用64位环境访问不到。可以换32位excel或通过修改注册表解决,后者比较麻烦,不推荐。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
转载请注明原文地址: https://www.6miu.com/read-2623373.html

最新回复(0)