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

Ms access 如何使用在Word VBA中使用Access VBA定义函数的Access查询?,ms-access,vba,ms-office,ado,ms-word,Ms Access,Vba,Ms Office,Ado,Ms Word,问题的状态: 我不再认为引用Excel或查询有参数是相关的。我认为问题可以归结为:如何使用Access查询,该查询使用Word VBA中Access VBA定义的函数 我想做的是,如何使Acos函数的内联版本与我的查询一起工作,如所示 我在Access VBA中有一个函数: Public Function Acos(radians As Double) As Double Acos = WorksheetFunction.Acos(radians) End Function Wor

问题的状态:

我不再认为引用Excel或查询有参数是相关的。我认为问题可以归结为:如何使用Access查询,该查询使用Word VBA中Access 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未定义

想法

更新

回应评论:是的,查询在Access中工作得非常好

还有,请注意,这都是Office2007

更新2

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

更改为创建Excel应用程序对象除了显著降低查询速度之外没有任何效果

更新3


我在Word和Access中都有对Excel的引用。(如果有更好的方法获得acos函数,我当然愿意接受。)

与其使用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
不支持的值执行错误处理
e、 g.
=ACOS(1.25)
为您提供
#NUM(不是数字)

同样,如果上述查询的参数为1.25,它将返回一个错误。
因此,请小心并验证输入,以确保查询不会崩溃。

根据本页:


我不认为我想做的是可能的。如果有人能提供更多关于如何使shahkalpesh的答案起作用的信息,我会对答案给予肯定。

你能在Access内部运行Access查询(使用Acos)而没有任何错误吗?我希望设置xl=CreateObject(“Excel.Application”)Acos=xl.WorksheetFunction.Acos(0.1)另外请注意,如果输入的弧度值错误,则会出现错误。此外,我们为什么要从Access转到Word?您没有提到,所以我不得不问。您是否已将Excel DLL添加到Word参考库中?这可用于替换Acos函数,但仍不允许我从VBA运行查询。我会尝试内联这个,但是我运行Acos的X是一个非常复杂的表达式,所以它会非常混乱。实际上,我调用Acos的表达式太长,Access不允许我内联这个函数…有办法吗,您可以将X值转储到中间表的字段Y中,并将字段Y用作此表达式的参数?如何引用以前计算的字段?我试着把字段名放在表达式中,Access要求它的值,就像它是一个参数一样。我最后不得不创建一个临时列,然后计算实际结果,但如果不按照我之前说过的那样要求计算字段,就像它是一个查询一样,它就不允许我进行排序,所以我不得不做第二个查询,第一个查询查询,然后排序。。。。但它是有效的。