使用VBA的用户定义函数输出作为访问查询中的输入

时间:2014-10-07 04:54:30

标签: vba access-vba ms-access-2007 ms-access-2010

我创建了一个根据用户选择提供值的函数。我想在另一个查询中使用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'

任何建议都备受赞赏

由于

2 个答案:

答案 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
相关问题