2017-04-13 58 views
1

我一直在使用VBA一年或更長時間,但是我完全自學成功,遠沒有進階。我用StackOverflow無數次地解決了我的問題,但是這是我的第一個問題,所以請原諒任何問題。將查詢條件的VBA傳遞函數參數作爲變量

我有一個表單,我想用作查詢條件的文本框。如果我的文本框只包含我想要搜索的1個值,則當前可以運行查詢,但是如果我想搜索多個值,則會遇到問題。

我跟着這個過程中獲得儘可能我有 Using Variables in VBA to Filter Access 2007 Queries

我的計劃是使用功能 類似標準,無論是通過一個標準的字符串:GetCrit() 其中GetCrit是公共職能爲字符串在一個單獨的模塊中,返回字符串 In("Value1",Value2") 然後我的想法是簡單地將參數設置爲函數GetCrit()定義的變量。即:查詢條件是In(GetCrit())

我無法獲得這兩個選項中的任何一個,因爲我相信目前查詢的查找值滿足字符串"In(GetCrit())",因爲我的函數被定義爲一個字符串。

我打算將文本框更改爲包含所有可能值的組合或列表框,然後使用宏將選擇轉換爲可以類似於In(「Value1」,「Value2」)讀取的字符串,但我願意提供更好的方法來實現這一目標。如下圖所示

,即形式在我的應用代碼

Private Sub btnGen_Click() 
SetQueryCriteria 
End Sub 

Public Sub SetQueryCriteria() 
Dim MatrixCriteria As String 
Dim holder As String 
holder = [Forms]![frm_Name]![TXTBox].Value 
SetCrit holder 
End Sub 

在模塊1:

Private strCrit As String 

Public Sub SetCrit(Value As String) 
    strCrit = Value 
End Sub 

Public Function getcrit() As String 
    getcrit = strCrit 
End Function 

而對於我查詢的標準是目前

In(GetCrit()) 

比KS!

編輯: 隨着我繼續研究,我發現,也許是一個多選列表框可能是我想在這裏使用

+0

使用多選列表框從相同字段中選擇多個搜索參數是有效的方法。查看http://allenbrowne.com/ser-50.html。 – June7

回答

1

不能由單一功能的這樣一種過濾,因爲該函數返回單個字符串,並且單個字符串不能包含多個要過濾的項目。

你可以解決它以下列方式:

Public Sub AlterQuery() 
    Dim qdf As QueryDef 
    Set qdf = CurrentDb.QueryDefs("Query1") 
    qdf.SQL = "SELECT * From Table Where Something In (" & GetCrit() & ")" 
End Sub 

這在硬編碼查詢中的IN繞圈。如果您從窗體打開查詢,則可以在查詢打開之前運行此代碼。

相關問題