2017-04-13 6 views
1

私は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")と同様に読み取れる文字列に変えることを計画していましたが私はこれを実現するためのよりよい方法の提案を受けています。 Module1の中

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 

:以下に示す

は、フォーム内の私の適用コード

ある

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

あなたがいるので、このように単一の関数でフィルタリングすることはできません使用したいものであり得ることを発見していますこの関数は単一の文字列を返し、単一の文字列にフィルタリングする複数の項目を含めることはできません。

次の方法で回避することができます。これは、クエリのINクリテリウムをハードコード

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

。フォームからクエリを開くと、クエリが開く前にこのコードを実行できます。

関連する問題