如何在Excel VBA中使用RFC_GET_TABLE_ENTRIES?

2020-09-08 15:52发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨大师!

能请你帮我吗?

现在我正在编写excel vba以获取数据记录条目号。

我使用了RFC_GET_TABLE_ENTRIES,源代码如下。

此vba宏已编译,可以正常运行。

如果目标表的记录数很少,则此vba PGM可以获得正确的数据。

但是,如果目标表的记录数大于32768,则此vba PGM将获得错误的数据。

例如,如果表中有146448条记录,则此vba会获得15376号。

我认为这是因为abap和VBA之间的类型不同。

因为146448除以32768等于四,其余为15376。

数据类型INT2的范围是-32,768到32,767。 因此,我担心源代码行中的对象rfcFunc.imports(" NUMBER_OF_ENTRIES")已被系统替换为INT2。

您能教我如何在VBA PGM中正确修改吗?

公共函数FUNC_CALL(ApplicationServer,客户端,用户,系统,SystemNumber,密码,语言,I_Sheet)作为字符串
 '-------------------------------------------------  -------------
 '声明变量
 '-------------------------------------------------  -------------
 'R/3连接变量------------------
 昏暗的R3作为对象
 Dim rfcFunc作为变体

 将QUERY_TABLE变暗为对象'IMPORT1
 昏暗的DELIMITER作为对象'IMPORT2
 昏暗的NO_DATA作为对象'IMPORT3
 昏暗的ROWSKIPS作为对象'IMPORT4
 昏暗的ROWCOUNT作为对象'IMPORT5
 昏暗的USERNAME2作为对象

 昏暗选项作为对象'TABLES1
 昏暗的字段作为对象'TABLES2
 昏暗的数据作为对象'TABLES3

 结果变暗为布尔值'

 Dim iRow作为整数'
 Dim iColumn作为整数'

 昏暗的iField作为整数'
 Dim iStart as Integer'
 Dim iLength作为整数'
 Dim vField As Variant'
 点心桌

 昏暗的工作表

 昏暗的Destination_System为整数
 昏暗的objBAPIControl作为对象'功能控件(集体对象)
 Dim sapConnection作为对象'连接对象
 昏暗的objUserList作为对象
 昏暗的objUserDetail作为对象

 昏暗的returnfunc为布尔值

 昏暗的整数
 Dim j作为整数

 昏暗的WK_CNT作为对象

 昏暗的记录没有作为对象
 昏暗RecondNo_I
 '-------------------------------------------------  --------------
 '连接R3
 '-------------------------------------------------  --------------
 设置R3 = CreateObject(" SAP.Functions")
 R3.Connection.ApplicationServer =应用程序服务器
 R3.Connection.Client =客户端
 R3.Connection.User =用户
 R3.Connection.System =系统
 R3.Connection.SystemNumber =系统编号
 R3.Connection.Password =密码
 R3.Connection.Language =语言
 FUNC_CALL = 0

 ' 登录
 如果R3.Connection.Logon(0,True)<> True然后
     MsgBox" R/3登录失败"
     FUNC_CALL = 1
     退出功能
 万一
 '-------------------------------------------------  --------------
 '致电RFC_GET_TABLE_ENTRIES
 '-------------------------------------------------  --------------
 设置rfcFunc = R3.Add(" RFC_GET_TABLE_ENTRIES")

 设置MAX_ROW = rfcFunc.exports(" MAX_ENTRIES")
 设置TableName = rfcFunc.exports(" TABLE_NAME")

 设置RecordNo = rfcFunc.imports(" NUMBER_OF_ENTRIES")

 MAX_ROW.Value =" 1"
 TableName.Value =" TSP01"

 结果= rfcFunc.Call

 如果结果= True,则

 其他
     MsgBox rfcFunc.Exception
     R3.Connection.Logoff
     退出功能
 万一
 '
  LastRow2 = Sheets(" SPOOL")。Cells(Rows.Count,1).End(xlUp).Row
  wk_end2 = LastRow2
 '
  WK_CNT2 = wk_end2 +1
 '
  Sheets(" SPOOL")。Cells(WK_CNT2,1).Value = I_Sheet
  Sheets(" SPOOL")。Cells(WK_CNT2,2).Value = RecordNo.Value

 R3.Connection.Logoff

 结束功能


 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨大师!

能请你帮我吗?

现在我正在编写excel vba以获取数据记录条目号。

我使用了RFC_GET_TABLE_ENTRIES,源代码如下。

此vba宏已编译,可以正常运行。

如果目标表的记录数很少,则此vba PGM可以获得正确的数据。

但是,如果目标表的记录数大于32768,则此vba PGM将获得错误的数据。

例如,如果表中有146448条记录,则此vba会获得15376号。

我认为这是因为abap和VBA之间的类型不同。

因为146448除以32768等于四,其余为15376。

数据类型INT2的范围是-32,768到32,767。 因此,我担心源代码行中的对象rfcFunc.imports(" NUMBER_OF_ENTRIES")已被系统替换为INT2。

您能教我如何在VBA PGM中正确修改吗?

公共函数FUNC_CALL(ApplicationServer,客户端,用户,系统,SystemNumber,密码,语言,I_Sheet)作为字符串
 '-------------------------------------------------  -------------
 '声明变量
 '-------------------------------------------------  -------------
 'R/3连接变量------------------
 昏暗的R3作为对象
 Dim rfcFunc作为变体

 将QUERY_TABLE变暗为对象'IMPORT1
 昏暗的DELIMITER作为对象'IMPORT2
 昏暗的NO_DATA作为对象'IMPORT3
 昏暗的ROWSKIPS作为对象'IMPORT4
 昏暗的ROWCOUNT作为对象'IMPORT5
 昏暗的USERNAME2作为对象

 昏暗选项作为对象'TABLES1
 昏暗的字段作为对象'TABLES2
 昏暗的数据作为对象'TABLES3

 结果变暗为布尔值'

 Dim iRow作为整数'
 Dim iColumn作为整数'

 昏暗的iField作为整数'
 Dim iStart as Integer'
 Dim iLength作为整数'
 Dim vField As Variant'
 点心桌

 昏暗的工作表

 昏暗的Destination_System为整数
 昏暗的objBAPIControl作为对象'功能控件(集体对象)
 Dim sapConnection作为对象'连接对象
 昏暗的objUserList作为对象
 昏暗的objUserDetail作为对象

 昏暗的returnfunc为布尔值

 昏暗的整数
 Dim j作为整数

 昏暗的WK_CNT作为对象

 昏暗的记录没有作为对象
 昏暗RecondNo_I
 '-------------------------------------------------  --------------
 '连接R3
 '-------------------------------------------------  --------------
 设置R3 = CreateObject(" SAP.Functions")
 R3.Connection.ApplicationServer =应用程序服务器
 R3.Connection.Client =客户端
 R3.Connection.User =用户
 R3.Connection.System =系统
 R3.Connection.SystemNumber =系统编号
 R3.Connection.Password =密码
 R3.Connection.Language =语言
 FUNC_CALL = 0

 ' 登录
 如果R3.Connection.Logon(0,True)<> True然后
     MsgBox" R/3登录失败"
     FUNC_CALL = 1
     退出功能
 万一
 '-------------------------------------------------  --------------
 '致电RFC_GET_TABLE_ENTRIES
 '-------------------------------------------------  --------------
 设置rfcFunc = R3.Add(" RFC_GET_TABLE_ENTRIES")

 设置MAX_ROW = rfcFunc.exports(" MAX_ENTRIES")
 设置TableName = rfcFunc.exports(" TABLE_NAME")

 设置RecordNo = rfcFunc.imports(" NUMBER_OF_ENTRIES")

 MAX_ROW.Value =" 1"
 TableName.Value =" TSP01"

 结果= rfcFunc.Call

 如果结果= True,则

 其他
     MsgBox rfcFunc.Exception
     R3.Connection.Logoff
     退出功能
 万一
 '
  LastRow2 = Sheets(" SPOOL")。Cells(Rows.Count,1).End(xlUp).Row
  wk_end2 = LastRow2
 '
  WK_CNT2 = wk_end2 +1
 '
  Sheets(" SPOOL")。Cells(WK_CNT2,1).Value = I_Sheet
  Sheets(" SPOOL")。Cells(WK_CNT2,2).Value = RecordNo.Value

 R3.Connection.Logoff

 结束功能


 
付费偷看设置
发送
1条回答
zhangjiyang1323
1楼 · 2020-09-08 16:13.采纳回答

我自己解决了这个问题。

" RFC_GET_TABLE_ENTRIES"的状态为"未发布"。

因此,此模块无法获得SAP支持。

因此,我复制了" RFC_GET_TABLE_ENTRIES"并新建了另一个功能模块。 然后将NUMBER_OF_ENTRIES的类型从INT4更改为char 20,那么我可以得到正确的数字。

谢谢。

一周热门 更多>