2013-10-25 67 views
1

我們正在將Office 2003中的MS Access 2003應用程序遷移到Office 2010(並且WinXP => Win7),並且遇到了試圖從MS Access運行Excel Yield function的問題。當前的代碼來做到這一點(這在XP下運行/ Office 2003中)看起來是這樣的:無法從MS Access運行Excel函數

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 ': 無法運行宏'收益'。該宏可能無法在此工作簿中使用,或者可能會禁用所有宏。

我已經嘗試了一些東西,包括專門添加和使用下面的代碼註冊的分析工具包:

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

,但我得到了同樣的錯誤。

我在考慮這個問題,可能需要創建一個啓用宏的工作簿,或者這可能是我不熟悉的一些Win7/Office 2010安全設置。

我現在想出的唯一潛在解決方案是創建一個COM interop .net程序集,它包裝一個暴露Yield函數的Excel實例。然而,我更喜歡不同的解決方案,因爲去COM互操作路線,我必須得到管理員權限,然後部署我必須在最終用戶計算機上註冊DLL,另外我很可能會遇到.net中的錯誤與MS Access中的錯誤相同。

最後還有一個.net項目可以重新創建一個Excel financial functions in an F# assembly。不幸的是,Yield函數不是重新實現的函數之一。

我倒是很欣賞這個任何建議,

乾杯,

傑米

+1

「macros disabled」?文件的名稱是什麼?嘗試將其保存爲「.xlsm」文件(帶有宏的新Excel格式),並確保在_File - 選項 - 信任中心 - 信任中心設置... - 宏設置下_已啓用此工作簿中的宏運行。 – Floris

+0

Hi Floris,沒有實際的Excel文件,只有在內存中創建的Excel.Application。也許我必須按照您的描述實際使用Excel文件,並強制用戶根據以下內容更改其宏設置:http://stackoverflow.com/questions/9421843/excel-vba-enabling-macro-settings – majjam

+0

啊! - 這實際上是一個比我想象的更有趣的問題...您的Access文件是否啓用了宏?如果沒有Excel文件,爲什麼使用Excel宏?爲什麼不使用Access宏?您給出的鏈接顯示了等式 - 在Access中直接實現它非常簡單。由於不必打開一個Excel實例,可能會顯着提高性能... – Floris

回答

1

如果任何人有同樣的問題,我解決的方式(工作圍繞)是使用一個外部工作簿,其中我在單元格中有產量公式,引用包含yield參數的一組單元格。然後我通過Access vba函數替換參數,強制工作表重新計算公式並將其返回到Access數據庫。