- 締切済み
accessのサブフォームフィルターの結果に対して、条件付書式を適用する方法
access2000を使用しています。 検索用のフォームを作成、その中に帳票式のフォームをサブフォームとして設定し、 任意の文字列でフィルターをかけられるようにしています。 しかし、サブフォームの中には、重複して表示される項目が多く、見づらいため サブフォームに"重複データがあった場合はその項目について背景色と同じにする"という 条件付書式を設定しました。 しかし、いざフィルターをかけてサブフォームに表示される項目を絞ってしまうと、 ところどころ背景色と同じ色になっている項目(重複している項目)については 読み取ることができません。 これを回避するために、フィルターの結果に対して、条件付書式を適用するような 方法はありますでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
Q、フォーム検索の結果を別テーブルに一時的に保存する方法は? A、それ自体は簡単ですが、重複を空白に変更するとなると少々・・・。 [イミディエイト] ? CNNExecute("DELETE * FROM [請求明細サブフォーム用一時テーブル]") True ? CNNExecute("INSERT INTO [請求明細サブフォーム用一時テーブル] SELECT * FROM 請求明細") True 請求明細サブフォーム用一時テーブル: [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2___A0001____________________2___B________\200______1 ________3___A0002____________________1___A________\100______1 ________4___A0002____________________2___B________\200______1 この場合は、[明細番号]が連続しています。 で、上述のINSERT文を多少加工します。 INSERT INTO SELECT 明細番号, IIf(DBCount("*","請求明細","明細番号<" & [明細番号] & " AND 明細台帳_請求番号='" & [明細台帳_請求番号] & "'")=0,[明細台帳_請求番号],""), 行番号, 商品名, 単価, 数量 FROM 請求明細; これで、一時テーブルは重複している[明細台帳_請求番号]=空白で生成されます。 請求明細サブフォーム用一時テーブル: [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2____________________________2___B________\200______1 ________3___A0002____________________1___A________\100______1 ________4____________________________2___B________\200______1 ここでは、更新クエリとかは使用していません。 VBコードで高速処理することを考慮してのことです。 ※いずれにしろ SQL文で全てを処理しようということです。 ※私は用いたことがありませんが DoCmd.RunSQL SQL などで実行しても良いと思います。
Q、サブフォームに条件付書式を適用する方法。 A、ありません。 大体、サブフォームってマルチ行デザインはサポートされていないです。 ですから、そういうアイデア自体を諦めるのが一番です。 で、どうしてもであれば<一時テーブル>を作成するなどして対応。 [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2___A0001____________________2___B________\200______1 ________3___A0002____________________1___A________\100______1 ________4___A0002____________________2___B________\200______1 [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2____________________________2____________\200______1 ________3___A0002____________________1___A________\100______1 ________4____________________________2____________\200______1 もちろん、クエリで重複を空白に変えることも不可能ではありません。 表示請求番号__明細番号__明細台帳_請求番号 A0001________________1__A0001___________1 _____________________2__A0001___________2 A0002________________3__A0002___________1 _____________________4__A0002___________2 SELECT IIf(DBCount("*", "請求明細", "明細番号<" & [明細番号] & " AND 明細台帳_請求番号='" & [明細台帳_請求番号] & "'")=0, [明細台帳_請求番号],"") AS 表示請求番号, * FROM 請求明細; し、しかし、これって開発者のいわゆるマスターベーション。 ユーザは「そんなものか」で受け入れると思いますよ。
お礼
やはりむずかしいのですね。 どうしても必要かと問われると、そうでもない機能なので、 最悪は、我慢してもらえばよいかなと思います。 ただ、がんばってサブフォームに条件付書式を設定したのに なんだか諦められなくて・・・ フォーム検索の結果を別テーブルに一時的に保存する方法は どのようなものになるのでしょうか?
お礼
丁寧に記載いただき、ありがとうございます。 今までSQLをきちんと理解しようとしていなかったので、 [イミディエイト]がなんなのか?という根本的な ところすらわかりません。 まずはそこから勉強せねばなりませんね。 せっかくなので、もう少し勉強してみて、理解したいと思います。