Мы переносим приложение 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 не является одной из повторно реализованных функций.
Я бы очень признателен за любые советы по этому вопросу,
Приветствия,
Джейми
"макрос отключен"? Каково имя файла? Попробуйте сохранить его как файл «.xlsm» (новый формат Excel с макросами) и убедитесь, что в разделе _File - Options - Trust Center - Настройки центра доверия ... - Параметры макроса_ вы включили макросы в этой книге , – Floris
Привет, Флорис, нет фактического файла Excel, только Excel.Application, созданного в памяти. Возможно, мне нужно использовать файл Excel, как вы описали, и заставить пользователей изменять настройки своих макросов в соответствии со следующими условиями: http://stackoverflow.com/questions/9421843/excel-vba-enabling-macro-settings – majjam
Ah - на самом деле это более интересный вопрос, чем я думал ... Имеет ли ваш файл доступа макросы? Почему вы используете макрос Excel, если нет файла Excel - почему бы не использовать макрос Access? Ссылка, которую вы дали, показывает уравнение - довольно просто реализовать непосредственно в Access. Вероятно, получите значительное повышение производительности из-за того, что вам не нужно открывать экземпляр Excel ... – Floris