2017-07-20 13 views
1

特定のパラメータ(契約、コンプライアンス、コミュニケーションなど)に基づいて顧客をランク付けし、組み込みの条件付き構成を使用して各フィールドを比較するレポートを作成しました。他のフィールドへのエントリを取得し、それに応じてペイントします。しかし、フィールドの色付けには年月がかかり、レポート内のスクロールは遅く、フィールドのいくつかは実行時のフォーマットが緩やかです。私は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ステートメントを使用しようとした(すなわち、エントリのカウント*カラー化フィールドの数)。ただし、スクリプトを中断しようとするたびに、すべての行が単一行の書式に適合します。

before and after changing the if condition

私が必要となることはdetails_paint()イベントを通じ実行した初期ロード・イベントの後フォーマットの更新を防ぐ解決策になります。

+0

on_Formatイベントを使用してみましたか? – Minty

+0

on_Formatは印刷プレビューのためだけにスムーズに動作しています。しかし、レポートビューではなく、各エントリの詳細ビューを開くためにボタンを追加したいので(画像の「ランク」列を参照してください)、私は好きです。 –

+0

これは、むしろレポートよりも連続**フォーム**であるべきですね。 – Andre

答えて

1

新しいOn Paintイベント(Acc2007で追加された)をいつ、どのように使用すればよいか、そしてなぜそれを効率的に行うかに関する情報はほとんどありません。

コントロールが再描画されるとき(たとえばスクロールするとき)、複数回実行されます。したがって、計算に必要な書式設定を実装するのは、特にデータベースの参照が含まれている場合には適していないようです。

最初の実行後にイベントプロシージャを終了すると、コントロールは最初の実行で適用した個々の書式設定を保持しません。

最終的には、の条件付き書式設定は、すべての弱点を考慮して、最適なオプションになります。

フィールドごとのランクの計算を条件付き書式から移動し、レコードソースに移すと、処理が速くなります。

+0

各フィールドのランクをデータソースクエリに追加しました。おそらく、データベースが特定のサイズに達するとスクロールするときの進歩はまだ遅くなりますが、今のところ速くなります。ありがとう –

関連する問題