当前位置:网站首页>VBA调用SAP RFC实现数据读取&写入
VBA调用SAP RFC实现数据读取&写入
2022-04-23 06:29:00 【Willie Y】
1、RFC结构
RFC属性配置:
RFC输入参数:
ZSCE_MAT×表结构:
RFC输出参数:
2、VBA代码
Public Const StartRow% = 2 '数据起始行
Public Const EndRow% = 3 '数据结束行
Public Const DataSheetName$ = "Data"
Public SAP As Object
'******************************************************************************
'* Function Desc:VBA调用SAP RFC
'* Author:
'* Param:
'* Returns:
'******************************************************************************
Sub InputData()
Dim WrtDataResult As String
Dim IMATNR$, ZYIELD$
If ContectSAP = False Then
MsgBox "连接SAP失败"
Exit Sub
End If
If MsgBox("连接SAP成功!是否将表" & DataSheetName & "中数据导入SAP?", vbYesNo, "警告") = vbNo Then
Exit Sub
End If
Call OperationPrompts("写入数据到SAP,请稍候……")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
With ThisWorkbook.Sheets(DataSheetName)
For i = StartRow To EndRow
IMATNR = .Cells(i, 1).Value
ZYIELD = .Cells(i, 2).Value
WrtDataResult = CallRFC(IMATNR, ZYIELD)
.Cells(i, 3).Value = WrtDataResult
Next i
'注销登录
SAP.Connection.LOGOFF
Call OperationPrompts("已断开SAP……")
UF_Prompt.Label1.Caption = "【程序运行结束】"
ThisWorkbook.Save
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
调用RFC核心代码:
'******************************************************************************
'* Function Desc:VBA调用SAP RFC
'* Author:
'* Param:
'* MATNR_No:
'* ZYIELD_value:
'* Returns:
'******************************************************************************
Public Function CallRFC(MATNR_No$, ZYIELD_Value$) As String
Dim LogFlag As Boolean
Dim Result As String
Dim InputTable As Object
Dim Result1 As Object
Dim Result2 As Object
Set RFC = SAP.Add("RFC_Z_SCE_CHANGEMATERIAL")
Set InputTable = RFC.Tables("ZSCE_MAT_GDPW")
'rfc参数表赋值
With InputTable
.Rows.Add
.Value(.RowCount, "MATNR") = MATNR_No
'.Value(.ROWCOUNT, "VOLUM") = VOLUM_Value
.Value(.RowCount, "ZYIELD") = ZYIELD_Value
End With
'call RFC
LogFlag = RFC.Call
If LogFlag = True Then
'设置返回参数
Set Result1 = RFC.Imports("ZMSGNO")
Set Result2 = RFC.Imports("ZMESSG")
CallRFC = MATNR_No & "," & Result1.Value & "," & Result2.Value
Else
CallRFC = "RFC调用失败!"
End If
InputTable.FreeTable
Set InputTable = Nothing
Set Result1 = Nothing
Set Result2 = Nothing
Set RFC = Nothing
End Function
代码中RFC表结构赋值需要一行一行赋值。Exports参数传参和Imports参数类似。
RFC的调用中,Exports表示输入RFC的参数,Imports表示RFC返回的调用结果。
总结:
日常工作中,VBA读取SAP表,或者调用RFC还是比较方便的,不需要在SAP使用ABAP开发并传输搭配生产系统,基本上改改上述代码就可用。
更多信息请参考:ExcelVBA与SAPRFC接口调用实例 - 豆丁网
版权声明
本文为[Willie Y]所创,转载请带上原文链接,感谢
https://blog.csdn.net/willieyuan/article/details/124326876
边栏推荐
- Weblux file upload and download
- Protobuf 使用
- .NET 5 的新功能 What‘s new in .NET 5
- Game assisted script development journey
- Page dynamic display time (upgraded version)
- Read and modify the JSON file under the resource folder
- 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
- IT高薪者所具备的人格魅力
- Protobuf use
- Understanding the role of individual units in a deep neural networks
猜你喜欢
对复杂字典Dictionary<T1,T2>排序问题
How does Apache Hudi accelerate traditional batch mode?
Online Safe Trajectory Generation For Quadrotors Using Fast Marching Method and Bernstein Basis Poly
'NPM' is not an internal or external command, nor is it a runnable program or batch file
移动端布局(3D转换、动画)
Custom time format (yyyy-mm-dd HH: mm: SS week x)
对js中argumens的简单理解
Django uses MySQL database to solve error reporting
Apache Hudi 如何加速传统的批处理模式?
基于NLP的软件安全研究(二)
随机推荐
Django uses MySQL database to solve error reporting
Unable to process jar entry [module info. Class]
C#控制相机,旋转,拖拽观察脚本(类似Scenes观察方式)
防抖和节流
Ogldev reading notes
Unity 获取一个资源被那些资源引用
Simple random roll call lottery (written under JS)
Teach-Repeat-Replan: A Complete and Robust System for Aggressive Flight in Complex Environments
事件管理之一
webflux文件上传下载
快速排序
对js中argumens的简单理解
颜色转换公式大全及转换表格(31种)
系统与软件安全研究(四)
Dropping Pixels for Adversarial Robustness
【NLP笔记】CRF原理初探
Dictionary & lt; T1,T2> Sorting problem
SampleCameraFilter
js之函数的两种声明方式
ES6使用递归实现深拷贝