トップ回答者
access 2013のレポートで特定の条件の行の色を変える

質問
-
access 2013のレポートで特定の条件の色を変えたいと思い、グーグルで検索し、
以下ようにプログラムしてみましたが、うまく動作しません。解決法法はありますでしょうか。
現状の動作はレポートの最初の行に表示されるレコードの条件を色がつく設定すると
1行目のみ指定の色に変りますが、2行目以降のレコードに色がつく設定をしても色が変りません。
詳細に表示するテキストボックスの背景スタイルはすべて透明に設定しています。
プログラムは以下の通りです。テキストボックスの完了報告に"有"の文字があれば当該の行の色を変えたいです。
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
Dim rc
rc = InStr(Me![完了報告], "有")
If rc > 0 Then
Me.Section(acDetail).BackColor = RGB(220, 220, 210)
Else
Me.Section(acDetail).BackColor = RGB(255, 255, 255)
End If
End Sub以上よろしくお願いします。
- 編集済み yk1101 2014年12月14日 13:01
回答
すべての返信
-
ご回答有難うございます。
ステップ実行で確認してみました。手順と状況は以下の通です。
手順
1. レポートのプロバディのレコードソースのテーブルの完了報告が所定の値となっていることを確認。
2.レポートをデザインビューで表示させる。
3.上記のソースのPrivate Sub 詳細_Formatの " rc = InStr(Me![完了報告], "有")"の行にブレイク
ボイントを設定する。
4.レポートをレイアウトビューに切替える。
5. 4でブレイク。
6.Me![完了報告]の上にカーソルを置いてMe![完了報告]の値を確認。
7.ステップ実行で当該の行をMe![完了報告]の値に対応する広瀬って伊賀なされていることを確認。
8. 5~7の手順を繰返す。
以上で確認してみましたが、if文はMe![完了報告]の値に応じて正しい判定が出来、各行に所定の色を設定する
命令を実行できていました。
実行終了後、if文の前のところで、カレントレコードのレコードを識別できる項目と完了報告の値をテキスト
ファイルに書出すようにしてみたところ同じレコードについて8回、この箇所を実行していました。また完了報告の値は
条件を満たしたレコードのみ"有"で異常はありませんでした。
それにも関わらず実行後のレポートには完了報告は"有"でも色のついていない行があります。
何か条件をチェックしたレコードと色を付ける命令を実行する時点のカレントレコードが食違うタイミングが
あるようにも思います。解決策はありませんでしょうか。こちらでも引続きいろいろ試してみます。
- 編集済み yk1101 2014年12月16日 12:51
-
SIMOZさん、返信ありがとうございます。
こちら日本語環境ですが、確認しているプレビュー画面は「印刷プレビュー」ですので、Print Previewになると思います。
また「色が変らない」のではなく、プレビュー画面の行で色が変るべき行で色が変らない行があったりその逆があったりです。具体的には、ステップ実行、及びデバッグ用に出力したテキストファイルの内容からすると、BackColor関数で指定している
色はレコードの条件に合った色を指定していると判断できます。にもかかわらず上記現象が発生していること、テキストファイルによると
1つのレコードに対しBackColor関数を実行するプロシジャーが8回Callされていることにより条件判定時に読出す時点の
カレントレコードとBackColor関数実行時のカレントレコードが一致していない可能性を考えました。
以上です。
-
了解しました。そんな簡単なことではないですよね。
Accessのレポートのイベントはかなりわかりにくかったと記憶してます。
詳細セクション以外には、どんなセクションを使用していますか?
そして、それらの設定はどうなってますでしょう?
また、レポートの他のイベントにはどんな記述をしていますか?
(8回呼ばれているというのは、このあたりが原因なのかと思いますので)
このイベントが発生した後、プレビュー画面が表示されるまでに、ほかのイベントがどんな順番で起動されているか、確認してみてはいかがでしょう?
また、公開できる部分がありましたら、もう少し公開してくだされば、できる範囲でお手伝いしたいと思います。
Shigeru Murai / SIMOZ
- 編集済み SIMOZ 2014年12月17日 10:07
-
まず、質問に記載した内容に誤りがありましたので訂正させていただきます。
BackColor関数を実行するプロシジャーが8回Callされていると書きましたが
テキストファイルをAppendモードでOPENしておりますが、何回か試行した
ときにあらかじめテキストファイルを削除しておくのを忘れておりました。
申訳ありませんでした。
ステップ実行と試行前に確実に削除して再度確認したところ1レコードあたり
2回CALLされています。
また、完了報告の項目に「完了」を設定するパターンをいくつか変えて試行
してみたところ、連続するレコードの完了報告を「完了」に設定とき1行おきにしか色が変らないことがわかりました。書式のプロバディで背景色と
代替の背景色の色を変えたとき1行おきに色が変る仕様かと思いますが
これとは関係ないでしょうか。
最後にレポートの内容、以下の通りですが、具体的な項目名は公開できませんので
一般的な表現とさせていただきます。
①レポートのイベント処理としては詳細_Formatのみ。
②レポートに出力するレコード数は60件ほど。
③会社名によりグループ化し、グループフッターに会社名とグループのレコード件数を表示。
④グループのレコードは案件コードによりソートしています。(レコードは案件毎に1件と
なります)
⑤色を付けるのは完了した案件で、完了報告の項目に「完了」の文字が入ったレコードです。
完了報告の項目は書式のプロバディで可視=「いいえ」に設定しています。以上よろしくお願いします。
-
返信が遅くなり、すみません。
ステップ実行と試行前に確実に削除して再度確認したところ1レコードあたり
2回CALLされています。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/