帳票フォームのフォームヘッダーにテキストボックスとコンボボックスを複数設けて、そこに入力された値で絞り込んだ検索結果を詳細に表示するようにしたいのですが、

帳票フォームのフォームヘッダーにテキストボックスとコンボボックスを複数設けて、そこに入力された値で絞り込んだ検索結果を詳細に表示するようにしたいのですが、 どうしても実行時エラー3075がでてきてしまいます。 何も入力がない場合には実行時エラー3075がでますが、他の値を入れた場合でもエラーがでてきてしまいます。エラーメッセージの画像をご覧ください。 帳票フォームのコントロールソースは申込者情報が入力されているテーブルが設定されています。 なお、これは記載する必要があるかわかりませんが、検索入力部分のフォームヘッダーのテキストボックスはすべて非連結です。コンボボックスも非連結のものが2つあり、性別は値リストで男女を設定してあり、もう一つの階級は別のテーブルから参照した値から選ぶようにしています。 詳細部分のテキストボックスには帳票フォームのコントロールソースに設定してあるテーブルのフィールドを指定してあります。 コードは以下のとおりです。 Private Sub btnSearch_Click() Dim strFilter As String, strExp As String, aryOpe As Variant strFilter = "" '姓テキストボックス If Not IsNull(Me.txtSei) Then strFilter = strFilter & " And 姓 Like'*" & Me.txtSei & "*'" End If '名テキストボックス If Not IsNull(Me.txtMei) Then strFilter = strFilter & " And 名 Like'*" & Me.txtMei & "*'" End If '姓カナテキストボックス If Not IsNull(Me.txtSeiKana) Then strFilter = strFilter & " And 姓カナ Like'*" & Me.txtSeiKana & "*'" End If '名カナテキストボックス If Not IsNull(Me.txtMeiKana) Then strFilter = strFilter & " And 名カナ Like'*" & Me.txtMeiKana & "*'" End If '生年月日テキストボックス If Not IsNull(Me.txtBirthday) Then strFilter = strFilter & " And 生年月日 = #" & Me.txtBirthday & "#" End If '性別コンボボックス If Not IsNull(Me.txtSex) Then strFilter = strFilter & " And 性別 = " & Me.txtSex End If '申込日開始テキストボックス If Not IsNull(Me.txtMKStart) Then strFilter = strFilter & " And 申込日 >= #" & Me.txtMKStart & "#" End If '申込日終了テキストボックス If Not IsNull(Me.txtMKend) Then strFilter = strFilter & " And 申込日 <= #" & Me.txtMKend & "#" End If '対象試験日開始テキストボックス If Not IsNull(Me.txtExamStart) Then strFilter = strFilter & " And 対象回試験日 >= #" & Me.txtExamStart & "#" End If '対象試験日終了テキストボックス If Not IsNull(Me.txtExamEnd) Then strFilter = strFilter & " And 対象回試験日 <= #" & Me.txtExamEnd & "#" End If '階級コンボボックス If Not IsNull(Me.txtKaikyu) Then strFilter = strFilter & " And 階級 = " & Me.txtKaikyu End If '回数コンボボックス If Not IsNull(Me.txtKaisu) Then strFilter = strFilter & " And 回数 = " & Me.txtKaisu End If '申込IDテキストボックス If Not IsNull(Me.txtID) Or Me.txtID <> 0 Then strFilter = strFilter & " And 申込ID = " & Me.txtID End If If strFilter = "" Or IsNull(strFilter) Then Me.FilterOn = False Else Me.Filter = Mid(strFilter, 6) Me.FilterOn = True End If 変だなと思うのは、デバッグをした時に、変数のstrFilterにカーソルを持っていくと、フォームヘッダーの検索用テキストボックスに値が入力されていないにもかかわらず、strFilterに値が入ってしまっていることです。入っている値は、ダブルクオーテーション(”)で囲った部分がまるまる入っているようです。(=エラーメッセージの画像に表示されている部分) 値がなければスルーして、値がある場合はその項目で絞り込んで検索をし、その結果を帳票フォームの詳細に表示したいのです。 原因がわからないので、ご教授いただけるとうれしいです。 足りない情報があれば、補足いたします。 どうぞよろしくお願いいたします。

画像

Microsoft Access | Visual Basic21閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

1

エラーメッセージを見る限り、各テキストボックスが「Null」ではないと思われます。 どこかで、テキストボックスの初期化を行い、 そこで Null ではなく、 ""(空文字列)を代入しているのでは? あと気になるのは > strFilter = strFilter & " And 姓 Like'*" & Me.txtSei & "*'" スペースもデータのうちですから、しっかり間を取りましょう。 他の箇所も同様に。Like の後ろのことです。   strFilter = strFilter & " And 姓 Like '*" & Me.txtSei & "*'" もう一つ。 > If strFilter = "" Or IsNull(strFilter) Then テキスト型の変数が Null になることはありえないので、 条件の後半は不要。

1人がナイス!しています

ThanksImg質問者からのお礼コメント

仰る通りでした! 各テキストボックスをフォーム読込時に「””」で初期化していました。また関係ないかもしれませんが、フォームヘッダー上にテキストボックスの値を消去する「クリア」ボタンを設置していますが、これも「””」で消去するコードになっていました。 これらをすべて「””」から「Null」にしたところ正常に動作しました! 無駄のないキレイなコードにするご指摘も助かりました!ありがとうございました!

お礼日時:9/16 17:48

その他の回答(1件)

1

コードは問題ないと思います。 IsNullが判定できていないため、軒並みStrFilterが結合されているように見えます。 下記の処置後に再度確認をしてみて下さい。 ①VBE画面で[ツール]→[参照]で、参照不可のライブラリがあれば、チェックを外す ②VBE画面で[デバッグ]→[xxxのコンパイル]→上書き保存 ③[ファイル]→[データベースの最適化/修復] ④PCの再起動

1人がナイス!しています