如何使用Word VBA中使用Access-VBA定义的函数的Access查询?
国家的问题:如何使用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功能,我当然愿意接受它。)
而是使用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,它将返回一个错误。
因此,要小心并验证输入以确保查询不会崩溃。
这适用于替换Acos函数,但它仍然不会让我从VBA运行查询。我会尝试内联这个,但是我运行Acos的X是一个非常复杂的表达式,所以它会变得非常混乱。 – 2010-03-10 15:07:14
实际上,我在给Acos的调用中的表达时间太长了Access不会让我内联这个函数... – 2010-03-10 15:12:32
有没有办法,可以将X值转储到中间表的字段Y中,并将字段Y用作这个表达式的参数? – shahkalpesh 2010-03-10 15:34:35
每本页面:
http://bytes.com/topic/net/answers/124351-custom-function-vba-access-stored-query-called-asp-net
我不认为我想做是可能的。如果任何人都可以提供更多关于如何使shahkalpesh的答案工作的信息,我会在那里给出答案。
您是否能够在没有任何错误的情况下在Access中运行Access查询(使用Acos)? – shahkalpesh 2010-03-10 13:35:47
是的。查看更新的问题。 – 2010-03-10 13:44:55
我会期望设置xl = CreateObject(“Excel.Application”) Acos = xl.WorksheetFunction.Acos(0.1) 请注意,如果您输入的弧度值错误,则会出现错误。 – Fionnuala 2010-03-10 13:55:05