none
access 2013のレポートで特定の条件の行の色を変える RRS feed

  • 質問

  • 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
    2014年12月14日 11:00

回答

  • 掲載されたコードは全く問題ありません。本来はこれで動作するはずですので、動作しないのは他の何かが影響しているのだと思います。
    とりあえず上記のコードのif辺りにブレークポイントを置いて、ステップ実行しながら動作を追ってみて下さい。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク yk1101 2014年12月16日 9:31
    2014年12月15日 1:42
    モデレータ
  • お疲れ様です。

    データに会社を、そしてレポートでは、会社でグルーピングしてフッターを表示するにしてみましたが、再現しませんね。

    詳細セクションの、”背景色”と”代替の背景色”はどうなっていますか?
    また、プログラミングで指定している色がこの代替の背景色と似ているのも気になります。

    代替の背景色を”色なし”にして、プログラムで変更している色を赤などにして現象を確認してみてください。


    Shigeru Murai / SIMOZ

    • 回答としてマーク yk1101 2014年12月18日 12:44
    2014年12月18日 5:11

すべての返信

  • 掲載されたコードは全く問題ありません。本来はこれで動作するはずですので、動作しないのは他の何かが影響しているのだと思います。
    とりあえず上記のコードのif辺りにブレークポイントを置いて、ステップ実行しながら動作を追ってみて下さい。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク yk1101 2014年12月16日 9:31
    2014年12月15日 1:42
    モデレータ
  • ご回答有難うございます。

    ステップ実行で確認してみました。手順と状況は以下の通です。

    手順

    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
    2014年12月16日 12:49
  • こんにちは

    はずしていたらごめんなさい。

    色が変わらない というのは、Report ViewやLayout Viewではないですよね? Print Previewで、ですよね?

    こちらは英語環境ですが、Report Viewでは色は表示されませんが、Print Previewではちゃんと表示されます。

    いかがでしょう?


    Shigeru Murai / SIMOZ

    2014年12月17日 6:34
  • SIMOZさん、返信ありがとうございます。
    こちら日本語環境ですが、確認しているプレビュー画面は「印刷プレビュー」ですので、Print Previewになると思います。

    また「色が変らない」のではなく、プレビュー画面の行で色が変るべき行で色が変らない行があったりその逆があったりです。

    具体的には、ステップ実行、及びデバッグ用に出力したテキストファイルの内容からすると、BackColor関数で指定している
    色はレコードの条件に合った色を指定していると判断できます。にもかかわらず上記現象が発生していること、テキストファイルによると
    1つのレコードに対しBackColor関数を実行するプロシジャーが8回Callされていることにより条件判定時に読出す時点の
    カレントレコードとBackColor関数実行時のカレントレコードが一致していない可能性を考えました。
    以上です。

    2014年12月17日 8:57
  • 了解しました。そんな簡単なことではないですよね。

    Accessのレポートのイベントはかなりわかりにくかったと記憶してます。

    詳細セクション以外には、どんなセクションを使用していますか?
    そして、それらの設定はどうなってますでしょう?
    また、レポートの他のイベントにはどんな記述をしていますか?
    (8回呼ばれているというのは、このあたりが原因なのかと思いますので)

    このイベントが発生した後、プレビュー画面が表示されるまでに、ほかのイベントがどんな順番で起動されているか、確認してみてはいかがでしょう?

    また、公開できる部分がありましたら、もう少し公開してくだされば、できる範囲でお手伝いしたいと思います。


    Shigeru Murai / SIMOZ


    • 編集済み SIMOZ 2014年12月17日 10:07
    2014年12月17日 10:06
  • まず、質問に記載した内容に誤りがありましたので訂正させていただきます。
    BackColor関数を実行するプロシジャーが8回Callされていると書きましたが
    テキストファイルをAppendモードでOPENしておりますが、何回か試行した
    ときにあらかじめテキストファイルを削除しておくのを忘れておりました。
    申訳ありませんでした。
    ステップ実行と試行前に確実に削除して再度確認したところ1レコードあたり
    2回CALLされています。

    また、完了報告の項目に「完了」を設定するパターンをいくつか変えて試行
    してみたところ、連続するレコードの完了報告を「完了」に設定とき1行おきに

    しか色が変らないことがわかりました。書式のプロバディで背景色と
    代替の背景色の色を変えたとき1行おきに色が変る仕様かと思いますが
    これとは関係ないでしょうか。

    最後にレポートの内容、以下の通りですが、具体的な項目名は公開できませんので
    一般的な表現とさせていただきます。

    ①レポートのイベント処理としては詳細_Formatのみ。
    ②レポートに出力するレコード数は60件ほど。
    ③会社名によりグループ化し、グループフッターに会社名とグループのレコード件数を表示。
    ④グループのレコードは案件コードによりソートしています。(レコードは案件毎に1件と
      なります)
    ⑤色を付けるのは完了した案件で、完了報告の項目に「完了」の文字が入ったレコードです。
      完了報告の項目は書式のプロバディで可視=「いいえ」に設定しています。

    以上よろしくお願いします。

    2014年12月18日 1:26
  • お疲れ様です。

    データに会社を、そしてレポートでは、会社でグルーピングしてフッターを表示するにしてみましたが、再現しませんね。

    詳細セクションの、”背景色”と”代替の背景色”はどうなっていますか?
    また、プログラミングで指定している色がこの代替の背景色と似ているのも気になります。

    代替の背景色を”色なし”にして、プログラムで変更している色を赤などにして現象を確認してみてください。


    Shigeru Murai / SIMOZ

    • 回答としてマーク yk1101 2014年12月18日 12:44
    2014年12月18日 5:11
  • 返信が遅くなり、すみません。

    ステップ実行と試行前に確実に削除して再度確認したところ1レコードあたり
    2回CALLされています。

    2回CALLされるのは、おそらく意図されたことではないですよね? まず、ここの原因から潰されたほうが良いように思います。Accessのファイルですから、コピーを取られて、コピーされたものでテキストファイル関連をコメントアウトするなど機能を削っていき、問題を切り分けていかれると良いと思います。どうしてもダメな場合は、公開しても差し支えないぐらいにデータ等を変え、OneDrive等、どこかにアップされれば、こちらでも試してみることができると思います。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年12月18日 8:21
    モデレータ
  • お世話になっております。

    昨日のSIMOZさんからのご提案により代替の背景色を「背景1」としていたのを「色なし」に設定することで今回の問題は解決しました。

    大変お手数をおかけしてしまいました。

    ご指導ありがとうございました。
    • 編集済み yk1101 2014年12月19日 1:00
    2014年12月19日 0:57