使用RFC将Excel与SAP连接

使用RFC将Excel与SAP连接,excel,vba,saprfc,Excel,Vba,Saprfc,我需要知道如何使用RFC连接Excel和SAP。我还没有使用到目前为止找到的代码将任何SAP数据导入Excel 我希望能够从任何已知交易中导入数据(例如,交易CO03中的物料清单)。从这里,我将试图了解如何提取其他类型的表 我的目标是能够使用RFC在Excel电子表格上导入任何SAP数据。这将是一个良好的开端 我需要一个特殊的SAP帐户吗?如何验证我的帐户是否已启用以执行此类任务?无法远程调用任何标准事务,因为大多数事务都类似于遗留事务,不会直接返回任何内容。 有两种方法可以从任何事务中获取数据

我需要知道如何使用RFC连接Excel和SAP。我还没有使用到目前为止找到的代码将任何SAP数据导入Excel

我希望能够从任何已知交易中导入数据(例如,交易CO03中的物料清单)。从这里,我将试图了解如何提取其他类型的表

我的目标是能够使用RFC在Excel电子表格上导入任何SAP数据。这将是一个良好的开端


我需要一个特殊的SAP帐户吗?如何验证我的帐户是否已启用以执行此类任务?

无法远程调用任何标准事务,因为大多数事务都类似于遗留事务,不会直接返回任何内容。 有两种方法可以从任何事务中获取数据,但它们不在本问题的范围之内
将数据从SAP检索到Excel的最实用的方法是找到合适的BAPI或远程启用的FM(包括编写自己的包装器FM),这就是我将在这里介绍的方法

  • 您不需要特殊账户,您只需要拥有RFC呼叫的适当授权,主要包括
    S\u RFC

  • 如果使用BAPI,可以忽略这一点。如果您创建了自己的包装器,那么您必须确保它是正确的

  • 然后,您可以在VBA代码中调用FM,并将结果返回到Excel book。以下是示例代码:

     ' Logging in
    
       Dim retcd        As Boolean
       Dim SilentLogon  As Boolean
       Set LogonControl = CreateObject("SAP.LogonControl.1")
       Set objBAPIControl = CreateObject("SAP.Functions")
       Set R3Connection = LogonControl.NewConnection
       R3Connection.Client = "700"
       R3Connection.ApplicationServer = "server_address" 
       R3Connection.Language = "EN"
       R3Connection.User = "sap_user"
       R3Connection.Password = "sap_pass"
       R3Connection.System = "system_id"
       R3Connection.SystemNumber = "sys_num"
       R3Connection.UseSAPLogonIni = False
       retcd = R3Connection.Logon(0, SilentLogon)
       If retcd <> True Then MsgBox "Logon failed": Exit Sub
    
       ' Declaring FM interface
    
        objBAPIControl.Connection = R3Connection
        Set objgetaddress = objBAPIControl.Add("ZNM_GET_EMPLOYEE_DETAILS")
        Set objkunnr = objgetaddress.Tables("ET_KUNNR")
        Set objaddress = objgetaddress.Tables("ET_CUST_LIST")
    
        ' Filling select-options values table from sheet
    
        Dim sht As Worksheet
        Set sht = ThisWorkbook.ActiveSheet
        If sht.Cells(6, 2).Value <> " " Then
        objkunnr.Rows.Add
        objkunnr.Value(1, "SIGN") = sht.Cells(6, 2).Value
        objkunnr.Value(1, "OPTION") = sht.Cells(6, 3).Value
        objkunnr.Value(1, "LOW") = sht.Cells(6, 4).Value
        objkunnr.Value(1, "HIGH") = sht.Cells(6, 5).Value
        R3Connection.Logoff
    
    ”登录
    Dim retcd作为布尔值
    Dim SilentLogon作为布尔值
    设置LogonControl=CreateObject(“SAP.LogonControl.1”)
    设置objBAPIControl=CreateObject(“SAP.Functions”)
    设置R3Connection=LogonControl.NewConnection
    R3Connection.Client=“700”
    R3Connection.ApplicationServer=“服务器地址”
    R3Connection.Language=“EN”
    R3Connection.User=“sap\U用户”
    R3Connection.Password=“sap\u pass”
    R3Connection.System=“系统\u id”
    R3Connection.SystemNumber=“sys\u num”
    R3Connection.UseSAPLogonIni=False
    retcd=R3Connection.Logon(0,SilentLogon)
    如果retcd为True,则MsgBox“登录失败”:退出子系统
    '声明FM接口
    objBAPIControl.Connection=R3Connection
    设置objgetaddress=objBAPIControl.Add(“ZNM\u GET\u EMPLOYEE\u DETAILS”)
    Set objkunnr=objgetaddress.Tables(“ET_KUNNR”)
    Set objaddress=objgetaddress.Tables(“ET客户列表”)
    '填充从工作表中选择选项值表
    将sht变暗为工作表
    Set sht=thiswoolk.ActiveSheet
    如果短单元格(6,2)的值为“”,则
    objkunnr.Rows.Add
    objkunnr.Value(1,“符号”)=短单元格(6,2).Value
    objkunnr.Value(1,“选项”)=短单元格(6,3).Value
    objkunnr.Value(1,“低”)=短单元格(6,4).Value
    objkunnr.Value(1,“高”)=短单元格(6,5).Value
    连接。注销
    
  • 注意:要使所有这些在VBA项目中起作用,您应该添加对SAP ActiveX控件的引用,这些控件位于%ProgramFiles%\SAP\FronEnd\SAPgui目录中:

    • wdtaocxU.ocx
    • wdtfuncU.ocx
    • wdtlogU.ocx
    • wdobapiU.ocx
    所以VBA项目的引用列表应该如下所示


    除Excel解决方案外,您还可以尝试我很久以前创建并多次使用的开源MS Access应用程序:

    感谢Suncatcher花时间帮助我。我有三个问题想问你:BAPI和远程FM有什么区别?这些方法中的任何一种都可以从任何SAP事务读取数据吗?我工作的公司中的每位员工都可以访问特定的SAP事务,具体取决于员工角色,因此我需要请求访问开发人员事务。我需要访问哪些事务?请回答以下问题:1。在你的任务中-没有区别,在其他情况下阅读。2.不,仔细阅读我的介绍。3.不,仔细阅读我的介绍。您需要为每个员工的tcode找到等效的BAPI或编写自己的包装。虽然这可以从理论上回答问题,但请在此处包含答案的基本部分,并提供链接以供参考。