Запрос с UDF работает в Access, но дает неопределенную функцию в выражении (ошибка 3085) в Excel - PullRequest
1 голос
/ 13 мая 2010

У меня есть таблица доступа с полем даты / времени. Я хотел создать составное поле Key из поля даты / времени и 3 других текстовых поля в том же формате, что и соответствующее поле Key в другой базе данных.

Итак, я объединил 3 текстовых поля и написал определяемую пользователем функцию в модуле, чтобы вывести поле даты в виде строки в формате «ГГГГММДД».

Public Function YYYYMMDD(dteDate As Date) As String
    YYYYMMDD = Format(dteDate, "YYYYMMDD")
End Function

После этого я могу успешно выполнить свои запросы в Access, и все работает нормально.

Но когда я настраиваю некоторый код DAO в Excel и пытаюсь запустить запрос, который прекрасно работает в Access ...

db.Execute "qryMake_tblValsDailyAccount"

... Excel выдает ошибку «Неопределенная функция в выражении. (Ошибка 3085)».

Для меня это ошибка в Excel и / или Access, потому что клиенту (Excel) не нужно ничего знать о внутренних вычислениях, которые обычно происходят идеально на сервере (Access), когда он изолирован.

Excel должен отправить запрос на определение (имя без параметров) серверу, позволить серверу выполнить свою работу, а затем получить ответы. Почему нужно подключиться к внутренней функции сервера?

Кто-нибудь знает способ обойти это?

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Access использует Jet, а комбинация Access и Jet понимает функции VBA. DAO - это общий уровень доступа к данным, который не понимает функции VBA.

Когда вы используете DAO, вы не автоматизируете Access, а просто используете этот мост для доступа к данным.

Несмотря на то, что некоторые версии Access используют DAO для связи с Jet внутри, способность понимать VBA запрограммирована в Access, а не в DAO.

Я думаю, что ваш обходной путь - лучшее, что вы можете сделать.

1 голос
/ 13 мая 2010

Хорошо, я взломал исправление, заменив функцию VBA запросом, который присоединяется к исходной таблице данных через ее первичный ключ ValsDaily_ID

SELECT tblValsDaily.ValsDaily_ID, 
Format(Year(tblValsDaily.BusinessDate))+
Format(Month(tblValsDaily.BusinessDate),"00")+
Format(Day(tblValsDaily.BusinessDate),"00") AS YYYYMMDD
FROM tblValsDaily;

но это действительно неубедительно, и я до сих пор не знаю, почему не работает версия VBA ...

...