如何使用在Word VBA中使用Access-VBA定义的函数的Access查询?

时间:2010-03-10 13:23:34

标签: ms-access vba ms-office ado word-vba

问题的状态:

我不再认为我引用Excel或查询有参数是相关的。我认为问题归结为:我如何使用在Word VBA中使用Access-VBA定义函数的Access查询?

我想要做什么is impossible,如何根据shahkalpesh's answer将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。

想法?

更新

回复评论:是的,该查询在Access中完美运行。

另外,只需注意,这就是Office 2007。

更新2

我们将从Access转到Word,因为VBA程序已经在Word中,但需要进行一些数据处理,这在VBA中实际上并不实际。

除了大大减慢查询速度之外,更改为创建Excel应用程序对象没有任何效果。

更新3

我在Word和Access中都引用了Excel。 (如果有更好的方法来获得acos功能,我当然愿意接受它。)

2 个答案:

答案 0 :(得分:1)

不要使用Excel来获取ACos的结果,请尝试使用

其中X =包含将传递给Acos

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

以下是page,我提到了ACos公式。

尝试&保存上述查询 Access中还包含其他功能,例如AtnSqr,可以帮助您获得ACos所需的功能。因此,您无需要求Excel为您计算内容。

注意:您必须对ACos不支持的值执行错误处理 例如=ACOS(1.25)为您提供#NUM!(不是数字)

以类似的方式,如果上述查询的参数是1.25,它将返回错误 因此,请小心并验证输入以确保查询不会崩溃。

答案 1 :(得分:0)

根据此页面:

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

我不认为我想要做什么是可能的。如果有人能提供更多关于如何使shahkalpesh的答案工作的信息,我会在那里给出答案。