
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
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
xMAKISHIx様
本件ずっとフォローいただきありがとうございます。
>https://support.microsoft.com/ja-jp/kb/941800 が原因かもしれません....
⇒ACCESS2007に発生する根本的な問題だったのですね。
まさに、上記URLにありました「•Access 2007 で新規作成したデータにフィルタを実行した場合、2 度目以降のフィルタの実行が動作しない」状況です。
おかげさまですっきりしました。
ご自分でデータやフォームなどを作ってまで、検証していただきありがとうございました。
No.4
- 回答日時:
xMAKISHIx様
わざわざ作成していただいたのですね。深謝いたします。
ただ、「企業名で検索」は検索結果をクリアし、再検索をすることもできるのですが、サブフォーム内の「部署」での検索が働きませんでした。
また、部署で検索を掛けた後は、企業名の再検索は働きませんでした。小生が作成したフォームでもサブフォーム内で検索した後は、企業名での再検索はできません。
ちなみに使用しているACCESSは2007です。
No.3
- 回答日時:
あともういっこ
サブフォーム内の検索クリアのコードの
Me.[サブフォーム名].Form.FilterOn = True
はFalseじゃないですか?
xMAKISHIx様
ご連絡ありがとうございます。
>Me.[サブフォーム名].Form.FilterOn = TrueはFalseじゃないですか?
⇒検索条件にヌル値を入れてFilterOnをTrueにしています。サブフォーム内の検索、クリアは問題なく行えます(何度でも繰り返すことができます)。
No.2
- 回答日時:
サブフォームのレコードソースってどうなってますか?
xMAKIShIx様
>サブフォームのレコードソースってどうなってますか?
⇒複数のテーブルからフィールドを持ってきたクエリです。
顧客(会社)名のフィールドはパラメータとし、メインフォームのフォームヘッダーに設けたテキストボックスに顧客名を入力して検索を掛けています。
クエリには氏名、所属部署のフィールドがあり、これに対しメインフォームのフォームフッターに設けたテキストボックスで入力した値で検索を掛けています。
最初にパラメータクエリを勉強して少しずつ作り込んでいったため、パラメータクエリが残っているのですが、これが問題なのでしょうか?
No.1
- 回答日時:
エラーは起きていませんか?
気になったのが「Me.サブフォーム名」のサブフォーム名はちゃんとオブジェクト名になっていますか?
xMAKISHIx様
ご回答ありがとうございます。エラーは起きていません。
質問で書いたように、サブフォーム内の検索をする前であれば、メインフォームのテキストボックスに入力した値で検索し、サブフォームに表示された顧客(会社)の担当者一覧はクリアでき、再検索もできます。
しかし、サブフォーム内に表示された氏名等で検索を掛けると、その後はサブフォームの検索はクリアでき、再検索ができるのですが、メインフォームで検索した顧客(会社)はクリアできません。
現状、その後、顧客名で検索するには一旦フォームを閉じて、再度立ち上げてから行うしかありません。
「Me.サブフォーム名」のサブフォーム名はオブジェクトブラウザで確認しましたが、間違ってはいませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
access マクロでのフィルタの解除の方法
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
Accessについてです。
Access(アクセス)
-
-
4
Accessでフィルタの実行アクションをクリアするには?
Access(アクセス)
-
5
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
6
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
7
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
8
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
9
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
10
【ACCESS2000】 サブフォームのフィルタ方法
その他(データベース)
-
11
アクセスVBAのMe!と[ ]
Access(アクセス)
-
12
access テキストボックスの値取得
Access(アクセス)
-
13
ACCESSのフォームからデータの追加ができない
その他(データベース)
-
14
ACCESS クエリ→フォーム フィルターをかけたデータのみエクスポートしたい
Excel(エクセル)
-
15
(VBA)フィルタがかかっているかどうかの判断方法
Access(アクセス)
-
16
access サブフォームにリストを表示させたいが一件しかレコードが表示されない
Access(アクセス)
-
17
Accessでチェックボックスで抽出するには?
その他(ソフトウェア)
-
18
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
19
Access メインフォーム サブフォームにて
Access(アクセス)
-
20
Access 複数条件検索の設定が上手く行きません
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS──メインフォームでサブ...
-
Access フォームで条件抽出し...
-
サブフォームのあるフォームか...
-
親フォームからサブフォームの...
-
サブフォームに対してGoToRecor...
-
ACCESSにて
-
【Access】サブフォームのソー...
-
Access Dsum関数
-
Access2007 ラベルの削除がで...
-
Access レポート印刷するときに...
-
MA ACCESSデータベースに詳しい...
-
レコードを保存するコード ア...
-
ACCESSのレポートで、指定した...
-
accessのフォームをレポートに...
-
エクセルをACCESSのレポ...
-
Access2007サブレポートの絞り...
-
ACCESSでコントロールソースの変更
-
iphoneのフルスクリーンの解除方法
-
passwordが入れられません・・・・
-
新規レコード行を非表示にしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サブフォームに対してGoToRecor...
-
クエリで出来た表にチェックボ...
-
ACCESS──メインフォームでサブ...
-
親フォームからサブフォームの...
-
ACCESSにて
-
サブフォームを非表示させる方...
-
Accessでセレクタをダブルクリ...
-
サブフォームのあるフォームか...
-
Accessで埋め込んだサブフォー...
-
ACCESS VBA メインフォーム及び...
-
Access2007 ラベルの削除がで...
-
親・子リンクフィールドの設定...
-
access フォーム上で複数行の...
-
ACCESSで条件によってサブフォ...
-
access vba サブフォームに条件...
-
Access メインフォーム サブフ...
-
Accessのサブフォームつきフォ...
-
Access フォームで条件抽出し...
-
Access サブフォームのレコード...
-
ACCESSサブフォームにデータ反...
おすすめ情報