1

フォーラムを検索した後、私のような質問/回答は見つかりませんでした。

姓、都市、電話番号、ID の 4 つの異なる検索フィールドを持つメイン フォームがあります。これらのフィールド (またはこれらのフィールドの組み合わせ) のいずれかを検索して、一致する値を持つサブフォーム内のすべてのレコードを検索したい - その値がどのフィールドにあるかに関係なく (つまり、サブフォームに複数の住所フィールドがあるため、都市はこれらのいずれにも表示される可能性があります)。

さらに、姓と市区町村が入力されている場合、両方の値を含むサブフォームのレコードのみを返したいと考えています。

前もって感謝します!

4

1 に答える 1

0

これはVBAを使わないとできないと思います。サブフォームのフィルターを後で更新するメイン フォームのAfterUpdate検索フィールドのコントロールのイベントにコードを追加する必要があります。ただし、フィルターのモンスターになるため、複雑なフィルターがどの程度許可されているかはわかりません。

これは、サブフォームのさまざまなフィールドの潜在的な数にプレースホルダーを使用する未テストの例です (それらの倍数が存在する可能性があることを示したように)。確認しておいて:

Private Sub last_name_AfterUpdate()
    Call FilterSubForm()
End Sub

Private Sub city_AfterUpdate()
    Call FilterSubForm()
End Sub

Private Sub phone_number_AfterUpdate()
    Call FilterSubForm()
End Sub

Private Sub ID_AfterUpdate()
    Call FilterSubForm()
End Sub

Private Sub FilterSubForm()
    Dim sLastName As String
    Dim sCity As String
    Dim sPhone As String
    Dim sID As String
    Dim sFilter As String

    sLastName = Trim(Me.[last name])
    sCity = Trim(Me.city)
    sPhone = Trim(Me.[phone number])
    sID = Trim(Me.ID)

    If sLastName != "" And sCity != "" Then     
            sFilter = "(([last_name_1] = '" & sLastName & "' " _
                            & "OR [last_name_2] = '" & sLastName & "' " _
                            & "OR [last_name_etc] = '" & sLastName & "') " _
                            & "AND " _
                            & "([city_1] = '" & sCity & "' " _
                            & "OR [city_2] = '" & sCity & "' " _
                            & "OR [city_etc] = '" & sCity & "'))"
            If sPhone != "" Then
                    sFilter = sFilter _
                                    & " AND " _
                                    & "[phone_number_1] = " & sPhone & " " _
                                    & "OR [phone_number_2] = " & sPhone & " " _
                                    & "OR [phone_number_etc] = " & sPhone
            End If
            If sID != "" Then
                    sFilter = sFilter _
                                    & IIf(sPhone != "", " OR ", " AND ") _
                                    & "[ID_1] = " & sID & " " _
                                    & "OR [ID_2] = " & sID & " " _
                                    & "OR [ID_etc] = " & sID
            End If
    Else
            If sLastName != "" Then
                    sFilter = "[last_name_1] = '" & sLastName & "' " _
                                    & "OR [last_name_2] = '" & sLastName & "' " _
                                    & "OR [last_name_etc] = '" & sLastName & "'"
            End If
            If sCity != "" Then
                    sFilter = sFilter _
                                    & IIf(sLastName != "", " OR ", "") _
                                    & "[city_1] = '" & sCity & "' " _
                                    & "OR [city_2] = '" & sCity & "' " _
                                    & "OR [city_etc] = '" & sCity & "'"
            End If
            If sPhone != "" Then
                    sFilter = sFilter _
                                    & IIf(sCity != "", " OR ", "") _
                                    & "[phone_number_1] = " & sPhone & " " _
                                    & "OR [phone_number_2] = " & sPhone & " " _
                                    & "OR [phone_number_etc] = " & sPhone                                       
            End If
            If sID != "" Then
                    sFilter = sFilter _
                                    & IIf(sPhone != "", " OR ", "") _
                                    & "[ID_1] = " & sID & " " _
                                    & "OR [ID_2] = " & sID & " " _
                                    & "OR [ID_etc] = " & sID                                        
            End If
    End If

    Me.[your_subform].Filter = sFilter
            Me.[your_subform].FilterOn = True
    Me.[your_subform].Requery
End Sub
于 2013-11-15T17:48:52.077 に答える