我创建了一个根据用户选择提供值的函数。我想在另一个查询中使用fuinction的输出。
我的功能是: -
Public Function provisionvariable() As String
For Each sItem In Forms![Access Form].Provision.ItemsSelected
v_provision = "" & Forms![Access Form].Provision.Column(0, sItem) & ""
Provision = Provision & "" + v_provision + ","
'MsgBox Provision
Next
Provision = Left(Provision, Len(Provision) - 1)
provisionvariable = Provision
MsgBox provisionvariable
End Function
该函数的输出为BBNI,FP
我想将输出用作访问查询中的where条件
我的查询
***SELECT DISTINCT quarter, provision, [currencycode]+'-not found in Master' AS Comment
FROM t_00_unearned_unincepted_alloc_basis AS inp
WHERE **provision in (provisionvariable()) AND**
NOT EXISTS
(SELECT 1
FROM t_01_le_currency_master key1
WHERE inp.[group_stat]=key1.[group_stat] AND
inp.le=key1.le AND
inp.[currencycode]=key1.[original_currency]);***
现在问题是函数的输出是BBNI,FP但是访问将其作为单个字符串,即查询中的“BBNI,FP”。
是否可以将它作为两个字符串('bbni','FP')而不是'BBNI,FP'
任何建议都备受赞赏
由于
答案 0 :(得分:0)
尝试:
Provision = Provision & "'" & v_provision & "',"
为确保您不会反复附加到模块级变量,您还应该执行本地
Dim Provision As String
答案 1 :(得分:0)
基于以下帖子,"函数不能用于IN()子句" How to call VBA-function from inside sql-query?
因此,您需要构建SQL(包括' In'列表)然后执行它。由于我不知道多用户环境,或者你将如何使用查询输出,我将构建SQL,保存为QueryDef对象,然后做你想做的任何事情。
以下是构建SQL的代码如下所示:
Dim strSQL As String
strSQL = "SELECT DISTINCT quarter, provision, [currencycode]+'-not found in Master' AS Comment " & _
"FROM t_00_unearned_unincepted_alloc_basis AS inp " & _
"WHERE provision In (" & ProvisionVariable() & ") AND " & _
. . . .
Debug.Print strSQL
以下是我的函数版本(请注意添加了单引号分隔符):
Public Function ProvisionVariable() As String
Dim sItem As Variant
Dim v_provision As String
Dim provision As String
provision = ""
For Each sItem In Forms![Access Form].Provision.ItemsSelected
v_provision = "'" & Forms![Access Form].Provision.Column(0, sItem) & "'"
provision = provision & "" + v_provision + ","
Next sItem
provision = left(provision, Len(provision) - 1)
ProvisionVariable = provision
Debug.Print ProvisionVariable
End Function