0

有没有办法在 VBA for Excel 2010 中引用 ACCPAC?

我想知道是否可以通过在 Excel 中运行宏以编程方式将电子表格中的信息输入到我们的会计数据库中。我刚刚研究了在 ACCPAC 的测试数据库中输入新客户时记录的宏。我们的运营中心将信息存储在电子表格中,我希望能够在不重新键入数据的情况下进入数据库。

我也对看到 ACCPAC 从电子表格获取数据而不是电子表格宏创建 ACCPAC 连接和对象的解决方案持开放态度。

这不是一个超级参与的项目——我们只是想要一些东西来减少冗余。

4

1 回答 1

5

有两种方法可以在不走导入路线的情况下完成您正在寻找的事情。两者都涉及 VBA 编程。Sage ERP 300(或我们都知道的 Accpac)可以通过 COM 控制。这意味着您可以在 Accpac 中记录您想要自动化或控制的过程的宏,您将获得 VBA 代码,这将为您提供一个良好的起点。然后,您可以将该代码带入 Excel 工作簿中的 VBA 代码。但是,您将丢失一份。当您从 Excel 中启动 Accpac 时,您需要创建一个新会话;告诉 Accpac 您的用户 ID、密码、您要连接的公司和会话日期。使用该 AccpacSession COM 对象,您可以使用记录的 VBA 代码自动化 Accpac 并将您在 Excel 工作簿中的信息推送到 Accpac。

下面是一个如何创建 AccpacSession 对象的示例:

Public AccSession As AccpacSession
Public AccSessMgr As AccpacSessionMgr
Public AccDBLink As AccpacDBLink
Private mlSessionID As Long
Private mstrObjectHandle As String
'-----------------------------------------------------------

Public Function OpenAccpacSession(Optional sCompany As String) As Boolean

    OpenAccpacSession = False
    mstrServerName = ""
    If AccSessMgr Is Nothing Then
        Set AccSessMgr = CreateObject("Accpac.SessionMgr")

        With AccSessMgr
            .AppID = "XY"
            .AppVersion = "61A"
            .ProgramName = "XY0001"

            .ServerName = mstrServerName
        End With  ' mSessMgr
    End If

    If AccSession Is Nothing Then
        AccSessMgr.CreateSession mstrObjectHandle, mlSessionID, AccSession
    End If

    If AccSession Is Nothing Then
        OpenAccpacSession = False  ' user couldn't sign on
    Else
        OpenAccpacSession = AccSession.IsOpened
    End If

    If OpenAccpacSession = True Then
        Set AccDBLink = AccSession.OpenDBLink(DBLINK_COMPANY, DBLINK_FLG_READWRITE)
    End If

End Function

现在您将能够使用 AccDBLink 对象打开视图以将数据导入 Accpac。

另一种方法是采用您在 Accpac 中记录的 VBA 宏并添加代码来控制 Excel。

导入模板可以正常工作,但正确设置它们可能是一个挑战,如果在导入过程中出现验证问题,有时可能很难找出问题所在和问题所在。通过走 VBA 路线,您可以自己验证数据,结合您自己的业务规则,并能够向用户提供更多信息性错误消息。

编辑:从 Excel 的 VBA 环境中,您将添加引用。本部分所需的所有 Accpac com 对象都以“ACCPAC”为前缀。具体来说,您需要 ACCPAC COM API Object 1.0 和 ACCPAC Session Manager 1.0。

于 2013-08-29T13:54:33.953 回答