无法从MS Access运行excel功能

时间:2013-10-25 13:53:42

标签: excel vba excel-vba ms-access

我们正在将MS Access 2003应用程序从Office 2003迁移到Office 2010(以及WinXP => Win7),并且在尝试从MS Access运行Excel Yield function时遇到问题。执行此操作的当前代码(适用于XP / Office 2003)如下所示:

Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
objExcel.RegisterXLL objExcel.Application.LibraryPath & "\ANALYSIS\ANALYS32.XLL"
dblYield = objExcel.Run("Yield", dteTDate, rstSec.Fields(2), dblRate / 100, dblPricePaid, rstSec.Fields(7), rstSec.Fields(4), rstSec.Fields(6))

最后一行的代码错误并给出以下错误:

运行时错误'1004': 无法运行宏'Yield'。宏可能在此工作簿中不可用,或者可能禁用所有宏。

我尝试了一些方法,包括使用以下代码专门添加和注册Analysis Toolpack:

objExcel.RegisterXLL "C:\Program Files (x86)\Microsoft Office\Office14\Library\Analysis\ATPVBAEN.XLA"

但我得到同样的错误。

我正在考虑问题可能是需要创建一个支持宏的工作簿,或者可能是我不熟悉的一些Win7 / Office 2010安全设置。

目前唯一可以提出的解决方案是创建一个COM互操作.net程序集,它包装一个暴露Yield函数的Excel实例。但是我更喜欢不同的解决方案,因为要进行COM互操作路由我必须获得管理员权限,然后部署我必须在最终用户机器上注册dll,此外我很可能遇到.net中与MS Access中相同的错误。

最后有一个.net项目来重新创建一些Excel financial functions in an F# assembly。不幸的是,Yield函数不是重新实现的函数之一。

我非常感谢你提出这方面的建议,

干杯,

杰米

1 个答案:

答案 0 :(得分:1)

如果有人遇到同样的问题,我解决(解决)的方式是使用外部工作簿,其中我在单元格中有yield公式,引用包含yield参数的一堆单元格。然后我通过我的Access vba函数替换参数,强制工作表重新计算公式并将其返回到我的Access数据库。