プロが教える店舗&オフィスのセキュリティ対策術

ACCESS VBA初心者です。ネット上の書き込みを参考に下記のようなフォームを作成しデータ検索したいのですが、うまくいかず、ネット上の情報を参考に色々トライしてみたのですが解決できません。

顧客名簿で顧客(会社)名で検索し、当該顧客の関係者(複数)をサブフォーム(帳票形式)に表示しています。さらにサブフォームに表示された一覧から、氏名、所属部署等で検索をかけています。
ところが、メインフォームに設けたテキストボックスで検索した結果をクリアするとき、サブフォームの検索を掛ける前だと、クリアできるのですが、サブフォームの検索を掛けた後では、メインフォームで検索した会社名をクリアできません。サブフォーム内の再検索、クリアは何度でもできます。
サブフォームの検索を掛けた後でも、メインフォームの検索値をクリアする方法をご教示ください。
各種作業のコードは下記の通りとしています。

メインフォームの検索コード
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("クエリ名")
With qdf
.Parameters("[forms]![フォーム名]![検索用フィールド名]") = Forms!フォーム名!フィールド名
Set rst = .OpenRecordset
.Close
End With
rst.Close
DoCmd.OpenQuery "クエリ名", acViewNormal
DoCmd.Close acQuery, qdf.Name, acSaveYes

メインフォームの検索クリアコード 
 Me.検索用フィールド名 = ""
  Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("クエリ名")
With qdf
.Parameters("[forms]![フォーム名]![検索用フィールド名]") = Nothing
Set rst = .OpenRecordset
.Close
End With
rst.Close
Me.[サブフォーム名].Form.Requery
 ※検索値をNullにしてFilterOn=True にする方法(下記サブフォーム内の検索クリアの方法)でも結果は同じでした。

サブフォーム内の検索コード
 Dim sFilter As String
sFilter = vbNullString
sFilter = "検索適用フィールド名Like '" & Me.サブフォーム内の検索用フィールド名.Value & "'"
Me.サブフォーム名.Form.Filter = sFilter
Me.サブフォーム名.Form.FilterOn = True

サブフォーム内の検索クリアのコード
 sFilter = vbNullString
Me.サブフォーム内の検索用フィールド名 = vbNullString
Me.サブフォーム名.Form.Filter = sFilter
Me.[サブフォーム名].Form.FilterOn = True
Me.[サブフォーム名].Form.Requery

よろしくお願いします。

A 回答 (5件)

ACCESS2007でしたか....


それだと
https://support.microsoft.com/ja-jp/kb/941800
が原因かもしれません....
    • good
    • 0
この回答へのお礼

xMAKISHIx様

本件ずっとフォローいただきありがとうございます。

https://support.microsoft.com/ja-jp/kb/941800 が原因かもしれません....
⇒ACCESS2007に発生する根本的な問題だったのですね。

まさに、上記URLにありました「•Access 2007 で新規作成したデータにフィルタを実行した場合、2 度目以降のフィルタの実行が動作しない」状況です。
おかげさまですっきりしました。

ご自分でデータやフォームなどを作ってまで、検証していただきありがとうございました。

お礼日時:2015/11/04 09:32

試しにテストデータを作成して見たのですがうまくいく様なのでこれでどうでしょうか?


http://11.gigafile.nu/hf3eb07091765b6789b8d68441 …
    • good
    • 0
この回答へのお礼

xMAKISHIx様

わざわざ作成していただいたのですね。深謝いたします。

ただ、「企業名で検索」は検索結果をクリアし、再検索をすることもできるのですが、サブフォーム内の「部署」での検索が働きませんでした。
また、部署で検索を掛けた後は、企業名の再検索は働きませんでした。小生が作成したフォームでもサブフォーム内で検索した後は、企業名での再検索はできません。

ちなみに使用しているACCESSは2007です。

お礼日時:2015/11/02 17:41

あともういっこ


サブフォーム内の検索クリアのコードの
Me.[サブフォーム名].Form.FilterOn = True
はFalseじゃないですか?
    • good
    • 0
この回答へのお礼

xMAKISHIx様

ご連絡ありがとうございます。
>Me.[サブフォーム名].Form.FilterOn = TrueはFalseじゃないですか?
 ⇒検索条件にヌル値を入れてFilterOnをTrueにしています。サブフォーム内の検索、クリアは問題なく行えます(何度でも繰り返すことができます)。

お礼日時:2015/11/02 13:06

サブフォームのレコードソースってどうなってますか?

    • good
    • 0
この回答へのお礼

xMAKIShIx様

>サブフォームのレコードソースってどうなってますか?
⇒複数のテーブルからフィールドを持ってきたクエリです。
顧客(会社)名のフィールドはパラメータとし、メインフォームのフォームヘッダーに設けたテキストボックスに顧客名を入力して検索を掛けています。
クエリには氏名、所属部署のフィールドがあり、これに対しメインフォームのフォームフッターに設けたテキストボックスで入力した値で検索を掛けています。

最初にパラメータクエリを勉強して少しずつ作り込んでいったため、パラメータクエリが残っているのですが、これが問題なのでしょうか?

お礼日時:2015/11/02 13:29

エラーは起きていませんか?


気になったのが「Me.サブフォーム名」のサブフォーム名はちゃんとオブジェクト名になっていますか?
    • good
    • 0
この回答へのお礼

xMAKISHIx様

ご回答ありがとうございます。エラーは起きていません。

質問で書いたように、サブフォーム内の検索をする前であれば、メインフォームのテキストボックスに入力した値で検索し、サブフォームに表示された顧客(会社)の担当者一覧はクリアでき、再検索もできます。
しかし、サブフォーム内に表示された氏名等で検索を掛けると、その後はサブフォームの検索はクリアでき、再検索ができるのですが、メインフォームで検索した顧客(会社)はクリアできません。
現状、その後、顧客名で検索するには一旦フォームを閉じて、再度立ち上げてから行うしかありません。

「Me.サブフォーム名」のサブフォーム名はオブジェクトブラウザで確認しましたが、間違ってはいませんでした。

お礼日時:2015/10/30 13:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A