特定のパラメータ(契約、コンプライアンス、コミュニケーションなど)に基づいて顧客をランク付けし、組み込みの条件付き構成を使用して各フィールドを比較するレポートを作成しました。他のフィールドへのエントリを取得し、それに応じてペイントします。しかし、フィールドの色付けには年月がかかり、レポート内のスクロールは遅く、フィールドのいくつかは実行時のフォーマットが緩やかです。私はReportLoad()でDetailPaint()を一度だけ実行します
したがって、私はvbaで条件付きカラースケールの書式設定を実装するつもりです。
このコードは、Report_Load(介してトリガされる):
説明についてcol_fields = Array("Rating", "Contracting", "Compliance", "Communication")
cred = Array(240, 200)
cgreen = Array(160, 240)
cblue = Array(160, 166)
cred_step = (cred(1) - cred(0))/DCount("*", "eval_7_final")
cgreen_step = (cgreen(1) - cgreen(0))/DCount("*", "eval_7_final")
cblue_step = (cblue(1) - cblue(0))/DCount("*", "eval_7_final")
:CREDは赤RGBマージンを規定します。 cred_stepはランクに乗算され、下の余白に追加されて、各単位の項目とフィールドの最終的な赤の値を取得します(将来的には尺度ではなく相対的な色に切り替える可能性があります)。
このコードは、Detail_Paint()によってトリガされる:
各単一フィールドについてFor i = 0 To UBound(col_fields)
rank = DCount("Rating", "eval_7_final", col_fields(i) & " > '" & Me.Controls(col_fields(i)) & "'")
Me.Controls(col_fields(i)).BackColor = RGB(cred(1) - cred_step * rank, cgreen(1) - cgreen_step * rank, cblue(1) - cblue_step * rank)
Next i
、その値の個々のランクが計算され、フィールドはそれに応じて色付けされます。 不思議なことに、フォーマットは各ディテールセクションを何度か実行するため、スクロールするときに進捗が遅くなり、各フィールドが再びフォーマットされます。
私はカウンタがある値に達した場合、カラー化ループ内のカウンタを実装し、実行されたスクリプトを防止するために、IFステートメントを使用しようとした(すなわち、エントリのカウント*カラー化フィールドの数)。ただし、スクリプトを中断しようとするたびに、すべての行が単一行の書式に適合します。
私が必要となることはdetails_paint()イベントを通じ実行した初期ロード・イベントの後フォーマットの更新を防ぐ解決策になります。
on_Formatイベントを使用してみましたか? – Minty
on_Formatは印刷プレビューのためだけにスムーズに動作しています。しかし、レポートビューではなく、各エントリの詳細ビューを開くためにボタンを追加したいので(画像の「ランク」列を参照してください)、私は好きです。 –
これは、むしろレポートよりも連続**フォーム**であるべきですね。 – Andre