2013-10-25 3 views
1

Мы переносим приложение MS Access 2003 из Office 2003 в Office 2010 (и WinXP => Win7) и столкнулись с проблемой, пытающейся запустить Excel Yield function из MS Access. Текущий код, чтобы сделать это (который работает на XP/Office 2003) выглядит следующим образом:Не удается запустить функцию excel из MS Access

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 ': Не удается запустить макрос «Выход». Макрос может быть недоступен в этой книге или все макросы могут быть отключены.

Я попробовал несколько вещей, в том числе специально добавления и регистрации Анализ Toolpack, используя следующий код:

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

Но я получаю ту же ошибку.

В настоящее время я думаю, что проблема может быть невозможной, возможно, для создания рабочей книги с поддержкой макроса, или, возможно, это параметр безопасности Win7/Office 2010, с которым я не знаком.

Единственное возможное решение, которое я могу предложить на данный момент, - создать сборку COM interop .net, которая обертывает экземпляр Excel, выставляя функцию Yield. Тем не менее, я бы предпочел другое решение, потому что, чтобы перейти на COM-interop-маршрут, мне пришлось бы получить права администратора, а затем для развертывания мне пришлось бы регистрировать dll на компьютере конечных пользователей, кроме того, я, скорее всего, столкнулся бы с та же ошибка в .net, что и в MS Access.

Наконец-то существует проект .net, чтобы воссоздать номер Excel financial functions in an F# assembly. К сожалению, функция Yield не является одной из повторно реализованных функций.

Я бы очень признателен за любые советы по этому вопросу,

Приветствия,

Джейми

+1

"макрос отключен"? Каково имя файла? Попробуйте сохранить его как файл «.xlsm» (новый формат Excel с макросами) и убедитесь, что в разделе _File - Options - Trust Center - Настройки центра доверия ... - Параметры макроса_ вы включили макросы в этой книге , – Floris

+0

Привет, Флорис, нет фактического файла Excel, только Excel.Application, созданного в памяти. Возможно, мне нужно использовать файл Excel, как вы описали, и заставить пользователей изменять настройки своих макросов в соответствии со следующими условиями: http://stackoverflow.com/questions/9421843/excel-vba-enabling-macro-settings – majjam

+0

Ah - на самом деле это более интересный вопрос, чем я думал ... Имеет ли ваш файл доступа макросы? Почему вы используете макрос Excel, если нет файла Excel - почему бы не использовать макрос Access? Ссылка, которую вы дали, показывает уравнение - довольно просто реализовать непосредственно в Access. Вероятно, получите значительное повышение производительности из-за того, что вам не нужно открывать экземпляр Excel ... – Floris

ответ

1

Если кто-то имеет такую ​​же проблему, как я решена (работал вокруг) он должен был использовать внешняя книга, в которой у меня была формула доходности в ячейке, ссылаясь на кучу ячеек, содержащих параметры выхода. Затем я заменяю параметры через мою функцию доступа vba, заставляя рабочий лист пересчитывать формулу и возвращать ее в мою базу данных Access.

Смежные вопросы