2010-03-10 104 views
3

国家的问题:如何使用Word VBA中使用Access-VBA定义的函数的Access查询?

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

我想要做什么is impossible,如何使内联版本的Acos函数与我的查询一起工作,按照shahkalpesh's answer


我在访问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

在回应评论:是的,查询工作完美地访问。

而且,只是一张纸条,这是所有Office 2007

更新2

我们从去访问到Word,因为VBA程序已在Word中,但需要做一些数据的运算这在VBA中并不实际。

更改为创建Excel应用程序对象除了显着减慢查询速度之外没有任何影响。

更新3

我在Word和访问引用到Excel。 (如果有更好的方法来得到一个ACOS功能,我当然愿意接受它。)

+1

您是否能够在没有任何错误的情况下在Access中运行Access查询(使用Acos)? – shahkalpesh 2010-03-10 13:35:47

+0

是的。查看更新的问题。 – 2010-03-10 13:44:55

+0

我会期望设置xl = CreateObject(“Excel.Application”) Acos = xl.WorksheetFunction.Acos(0.1) 请注意,如果您输入的弧度值错误,则会出现错误。 – Fionnuala 2010-03-10 13:55:05

回答

1

而是使用Excel来获得ACos结果,试试这个

其中X =字段,它包含的值将被传递到Acos

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

这里是page,我提到为ACos式。

尝试&保存上述查询。
访问其他功能,如AtnSqr它可以帮助你得到ACos需要什么。因此,你不需要问Excel来为你计算东西。

注意:您必须对ACos不支持的值进行错误处理。
例如=ACOS(1.25)给你#NUM!(非数字)

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

+0

这适用于替换Acos函数,但它仍然不会让我从VBA运行查询。我会尝试内联这个,但是我运行Acos的X是一个非常复杂的表达式,所以它会变得非常混乱。 – 2010-03-10 15:07:14

+0

实际上,我在给Acos的调用中的表达时间太长了Access不会让我内联这个函数... – 2010-03-10 15:12:32

+0

有没有办法,可以将X值转储到中间表的字段Y中,并将字段Y用作这个表达式的参数? – shahkalpesh 2010-03-10 15:34:35

相关问题