0

フィルターを使用してフォームを開きます。このフォームを使用して新しいレコードを作成するときに、フィールドがフィルターと同じデフォルト値を取得するようにします。(新しいレコードが現在のフィルター結果の一部になるように)。フォームを開くと、フィルター値を tempvar に保存します。

簡単な方法でこれを達成するにはどうすればよいですか?

この質問から現在のフィルターを取得するために、後者の 2 つの方法を試しました: Access 2003 VBA Get Active filter?

前者はわかりませんでした。

以前に Visual Basic をプログラミングしたことはなく、Access をあまり使用したこともありません。そのため、かなり詳細な説明が必要になる場合があります。

どうもありがとう

4

3 に答える 3

0

残念ながら、Access にはその機能がありません。これを実装するには、VBA を学習する必要があります。

フィルターの解析は難しいと思います。私の意見では、各フィールドにフィルターとデフォルト値を設定する方が簡単です。フォームを開くための実装関数と、値を設定するためのいくつかのパブリック フォーム メソッドが必要です。

フォームを開く関数は次のようになります。

Dim frm as Form_SomeForm

DoCmd.OpenForm "SomeForm", , , , , acHiden

Set frm = Forms("SomeForm")

frm.SetControlFilter("UserName", "=", "Foo")
frm.SetControlFilter("Age", "=", "123")
...

frm.ApplyFilter()

frm.Visible = True

フォーム モジュール「SomeForm」は次のようになります。

Dim m_stFiler as String

Public Sub SetControlFilter(ByVal stCtrl As String, ByVal stExp As String, ByVal stValue as String) 
    Dim ctl As Control

    '-- set default value
    set ctl = Me("stCtrl")

    ctl.DefaultValue = "=""" & stValue  & """"

    '-- build filter
    If m_stFiler <> "" Then m_stFiler = m_stFiler & " AND "
    m_stFiler = m_stFiler & ctl.ControlSource & " " & stExp & " "" & stValue & "" "

End Sub

Public Sub ApplyFilter()
    Me.Filter = m_stFiler
    Me.FilterOn = True
End Sub
于 2013-07-05T18:33:42.527 に答える
0

Sergeys Answerは私を正しい軌道に乗せました。

私は数週間しなければなりませんでした。

それは1つのフィールドでしか機能せず、メソッドを次のように呼び出す必要がありました:

Call frm.SetControlFilter("Age", "=", "123")

何らかの理由で、次のように stCtrl を新しい内部変数に保存する必要もありました。

Dim stCon As String
stCon = stCtrl
'-- set default value
Set ctl = Me(stCon)

どうもありがとう

于 2013-07-08T09:31:10.680 に答える