2014-10-07 20 views
0

我已經創建了一個函數,該函數提供基於用戶選擇的值。我想在另一個查詢中使用函數的輸出。使用VBA的用戶定義函數輸出作爲訪問查詢的輸入

我的功能是: -

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

我想使用的輸出,其中條件接入查詢

我的查詢是

***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', '計劃生育'),而不是 'BBNI,FP'

任何建議非常讚賞

感謝

回答

0

嘗試:

Provision = Provision & "'" & v_provision & "'," 

並確保你是不是反覆追加到一個模塊級變量,你也應該做一個本地

Dim Provision As String 
+0

我在做我的功能。例如,如果函數的輸出是BBNI,FP。當我在我的訪問查詢中使用函數provisionvariable()時,它將'BBNI,FP'作爲單個字符串並且查詢不顯示任何輸出。 – Mohit 2014-10-07 10:43:04

+0

我想要的是查詢應該把它作爲兩個分隔的字符串,由CSV分隔 – Mohit 2014-10-07 10:51:25

+0

@TomRobinson建議的是正確的。你的查詢只有在子句看起來像「WHERE(((Provision(提供)In('BBNI','FP','etc','etc')))...」 你需要逗號,你需要用單引號分隔每個字符串(或雙引號,這會變得混亂)。 – 2014-10-07 16:49:30

0

主要基於以下後,「功能不能被用於()條款」 How to call VBA-function from inside sql-query?

所以,你需要建立SQL(其中包括了「在」名單),然後執行它。由於我不知道多用戶環境,或者你將如何使用查詢輸出,我會構建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 
+0

我讀了一篇文章,看到函數不能用於IN()子句。我用一個帶有in子句的函數運行我的查詢,並且沒有錯誤。我想我們可以用in子句運行查詢。 – Mohit 2014-10-09 04:11:55

+0

我想在代碼之外進行查詢,因爲這些查詢是在數據表上驗證的。所以需要明確檢查輸出,而不必查看代碼 – Mohit 2014-10-09 04:24:52

+0

首先,僅僅因爲某些東西不會產生錯誤並不意味着它起作用。如果您打算堅持查詢仍然是使用EMBEDDED函數的調用,那麼我無法幫助您。如果你想產生想要的結果並且願意一次性改變你的代碼,那麼有一個解決方案。你沒有提到你的查詢是如何/在哪裏使用的,但我猜測它是用於另一個表單/控件的RecordSource,或者你是通過VBA執行的?一旦你的代碼改變了,你就不需要再改變它了。 – 2014-10-09 11:37:15

相關問題