1

我们正在将 MS Access 2003 应用程序从 Office 2003 迁移到 Office 2010(和 WinXP => Win7),并且在尝试从 MS Access运行Excel Yield 函数时遇到了问题。当前执行此操作的代码(适用于 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”。该工作簿中的宏可能不可用,或者所有宏都可能被禁用。

我尝试了一些事情,包括使用以下代码专门添加和注册分析工具包:

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

但我得到同样的错误。

我目前在想问题可能归结为可能需要创建启用宏的工作簿,或者可能是我不熟悉的一些 Win7 / Office 2010 安全设置。

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

最后还有一个 .net 项目,用于在 F# 程序集中重新创建许多 Excel 财务函数。不幸的是,Yield 函数不是重新实现的函数之一。

我非常感谢对此的任何建议,

干杯,

杰米

4

1 回答 1

1

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

于 2013-11-18T09:59:30.243 回答