Как я могу использовать запрос Access, который использует функции, определенные Access-VBA в Word VBA? - PullRequest
3 голосов
/ 10 марта 2010

Состояние вопроса:

Я больше не думаю, что имеет отношение к тому, что я ссылаюсь на Excel или что запрос имеет параметры. Я думаю, что вопрос сводится к следующему: Как я могу использовать запрос Access, который использует функции, определенные Access-VBA в Word VBA?

Что я хочу сделать невозможно , как я могу заставить встроенную версию функции Acos работать с моим запросом, согласно ответу шахкальпеша ?


У меня есть функция в Access VBA:

Public Function Acos(radians As Double) As Double
     Acos = WorksheetFunction.Acos(radians)
End Function

WorksheetFunction исходит из ссылки на Excel (что я делаю просто потому, что она определяет функцию acos).

Я использую эту функцию в запросе, который имеет три параметра. Затем я запускаю этот запрос в Word VBA следующим образом:

Dim command As New ADODB.command
With command
    .ActiveConnection = connection
    .CommandText = "MyQueryName"
    .CommandType = adCmdStoredProc
    .Parameters.Append .CreateParameter( _
        "Param1", adDouble, adParamInput, , param1Value)
    .Parameters.Append .CreateParameter( _
        "Param2", adDouble, adParamInput, , param2Value)
    .Parameters.Append .CreateParameter( _
        "Param3", adDouble, adParamInput, , param3Value)
End With

Dim records As New ADODB.Recordset
records.Open command, , adOpenKeyset, adLockOptimistic

Я получаю сообщение об ошибке в Word VBA, что функция Acos не определена.

Идеи

UPDATE

В ответ на комментарий: Да, запрос отлично работает в Access.

Кроме того, просто заметка, это все Office 2007.

ОБНОВЛЕНИЕ 2

Мы переходим от Access к Word, потому что программа VBA уже есть в Word, но ей нужно кое-что обработать, что не очень удобно в VBA.

Переход к созданию объекта приложения Excel не оказывает никакого влияния, кроме резкого замедления запроса.

ОБНОВЛЕНИЕ 3

У меня есть ссылка на Excel как в Word, так и в Access. (Если есть лучший способ получить функцию acos, я, безусловно, открыт для нее.)

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Вместо того, чтобы использовать Excel, чтобы получить результат ACos, попробуйте это

Где X = поле, содержащее значение, которое будет передано Acos

SELECT X, IIF(X = 1, 0, Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1))
FROM myTable;

Вот страница , я ссылался на формулу ACos.

Попробуйте и сохраните вышеуказанный запрос.
В Access есть другие функции, такие как Atn и Sqr, которые могут помочь вам получить то, что необходимо для ACos. Следовательно, вам не нужно будет просить Excel рассчитать для вас вещи.

Примечание: вам придется выполнить обработку ошибок для значений, не поддерживаемых ACos.
например =ACOS(1.25) дает вам #NUM! (не число)

Аналогичным образом, если параметр для указанного выше запроса равен 1,25, он вернет ошибку.
Поэтому будьте внимательны и проверьте правильность ввода, чтобы убедиться, что запрос не завершился сбоем.

0 голосов
/ 10 марта 2010

За эту страницу:

http://bytes.com/topic/net/answers/124351-custom-function-vba-access-stored-query-called-asp-net

Я не думаю, что я хочу сделать это возможно. Если кто-нибудь может дать больше информации о том, как заставить ответ шахкальпеша работать, я возьму за него ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...