2010-03-10 2 views
3

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

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

Что я хочу сделать is impossible, как я могу сделать встроенную версию функции Acos работать с моим запросом, согласно shahkalpesh's answer?


У меня есть функция в 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, что функция Экос не определена.

Идеи?

UPDATE

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

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

UPDATE 2

Мы идем от доступа к Слову, потому что программа VBA уже в Слове, но нужна сделать некоторые данные хруст что в VBA это не очень практично.

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

UPDATE 3

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

+1

Вы можете запускать запрос Access (который использует Acos) внутри Access без каких-либо ошибок? – shahkalpesh

+0

Да. См. Обновленный вопрос. –

+0

Я бы ожидал, что Set xl = CreateObject («Excel.Application») Acos = xl.WorksheetFunction.Acos (0.1) Обратите также внимание, что если вы подаете неправильное значение для радианов, вы получите сообщение об ошибке. – Fionnuala

ответ

1

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

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

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

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

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

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

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

+0

Это работает для замены функции Acos, но она по-прежнему не позволяет мне запускать запрос из VBA. Я попробую сделать это, но X, на котором я запускаю Acos, - это очень сложное выражение, так что это будет потрясающий беспорядок. –

+0

На самом деле выражение в моем разговоре с Acos настолько длинное, что Access не позволит мне встроить эту функцию ... –

+0

Есть ли способ, вы можете сбросить значение X в поле Y промежуточной таблицы и использовать поле Y как параметр к этому выражению? – shahkalpesh