No1です。
最後のIF文では、各コンボボックスやテキストボックス
が未設定の場合なので、
If IsNull(Me!cmb学年) And IsNull(Me!cmb組) And IsNull(Me!tx名前) Then
strFilter = ""
End If
のように、
strFilter = ""
として、この場合はすべてを表示するというのもいいのですが、
その場合はすべて表示するというメッセージを出しておけば、
混乱がなくなるので、
If IsNull(Me!cmb学年) And IsNull(Me!cmb組) And IsNull(Me!tx名前) Then
strFilter = ""
MsgBox "条件が未設定なのですべてを表示します"
End If
のようにするのがいいかもしれません。
そのあたりは都合のいいように設定
してください。
ひたすら、条件を組み合わせるだけだと思いますが。
たとえば、
学年を表示するコンボボックスを「cmb学年」
組を表示するコンボボックスを「cmb組」
名前を書き込むテキストボックスを「tx名前」
とします。
えーっと、テキストボックスは別に他意があって
テキストボックスにしたわけではありません。
コンボボックスでも構いません。
一応、各コントロールで、データが選択されているか、
あるいは書き込まれているかによって、その組合せ
ほどIF文でフィルタに使う条件を設定します。
なお、各コンボボックスやテキストボックスの値は
文字型としています。数値型があるのならば、
少し変数を「"」などでの囲み方が違うので
補足をしてください。
Private Sub コマンド0_Click()
Dim strFilter As String
If Not IsNull(Me!cmb学年) And Not IsNull(Me!cmb組) And Not IsNull(Me!tx名前) Then
strFilter = "[学年] Like '" & Me![cmb学年] & "' AND [組] Like '" & Me![cmb組] & "' AND [名前] Like '" & Me![tx名前] & "'"
End If
If Not IsNull(Me!cmb学年) And Not IsNull(Me!cmb組) And IsNull(Me!tx名前) Then
strFilter = "[学年] Like '" & Me![cmb学年] & "' AND [組] Like '" & Me![cmb組] & "'"
End If
If Not IsNull(Me!cmb学年) And IsNull(Me!cmb組) And Not IsNull(Me!tx名前) Then
strFilter = "[学年] Like '" & Me![cmb学年] & "' AND [名前] Like '" & Me![tx名前] & "'"
End If
If IsNull(Me!cmb学年) And Not IsNull(Me!cmb組) And Not IsNull(Me!tx名前) Then
strFilter = "[組] Like '" & Me![cmb組] & "' AND [名前] Like '" & Me![tx名前] & "'"
End If
If Not IsNull(Me!cmb学年) And IsNull(Me!cmb組) And IsNull(Me!tx名前) Then
strFilter = "[学年] Like '" & Me![cmb学年] & "'"
End If
If IsNull(Me!cmb学年) And IsNull(Me!cmb組) And Not IsNull(Me!tx名前) Then
strFilter = "[名前] Like '" & Me![tx名前] & "'"
End If
If IsNull(Me!cmb学年) And Not IsNull(Me!cmb組) And IsNull(Me!tx名前) Then
strFilter = "[組] Like '" & Me![cmb組] & "'"
End If
If IsNull(Me!cmb学年) And IsNull(Me!cmb組) And IsNull(Me!tx名前) Then
Exit Sub
End If
Me.Filter = strFilter
Me.FilterOn = True
End Sub
お礼
ありがとうございました。 うまく動作しました。これを基に勉強させていただきます。