有没有办法在VBA for Excel 2010中引用ACCPAC?
我想知道是否可以通过在Excel中运行宏来以编程方式将电子表格中的信息输入到我们的会计数据库中。我刚刚在ACCPAC的测试数据库中输入新客户时,一直在研究我记录的宏。我们的运营中心将信息存储在我希望能够进入数据库的电子表格中,而无需重新输入数据。
我也是开放式的解决方案,看到ACCPAC从电子表格中获取数据,而不是创建ACCPAC连接和对象的电子表格宏。
这不是一个超级参与的项目 - 我们只想减少冗余。
答案 0 :(得分: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对象1.0和ACCPAC会话管理器1.0。