Состояние вопроса:Как я могу использовать запрос 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, я, конечно, открыты для него.)
Вы можете запускать запрос Access (который использует Acos) внутри Access без каких-либо ошибок? – shahkalpesh
Да. См. Обновленный вопрос. –
Я бы ожидал, что Set xl = CreateObject («Excel.Application») Acos = xl.WorksheetFunction.Acos (0.1) Обратите также внимание, что если вы подаете неправильное значение для радианов, вы получите сообщение об ошибке. – Fionnuala