0

次のクエリに基づくデータシート フォームがあります。これは、ピボットされた複数のデータ セットを組み合わせて、日付ごとに列を指定します。

+-------------+------------------+----------+----------+-----------+
| statusType  |    valueType     | 8/1/2013 | 9/1/2013 | 10/1/2013 |
+-------------+------------------+----------+----------+-----------+
| design      | actual           |        3 |        6 |         7 |
| design      | target           |        4 |        5 |         4 |
| design      | cumulativeActual |       60 |       66 |        67 |
| design      | cumulativeTarget |       50 |       55 |        54 |
| development | actual           |       10 |       12 |         2 |
| development | target           |       10 |        8 |         8 |
| development | cumulativeActual |       30 |       42 |        44 |
| development | cumulativeTarget |       40 |       48 |        56 |
+-------------+------------------+----------+----------+-----------+  ...

各日付列の「実際の」値に条件付き書式を設定して、次のように各値に色が設定されるようにします。

  • 実際 >= ターゲット: 緑
  • 実際 = 目標の 51 ~ 99%: 青
  • 実際のターゲットの 50% 未満: 赤

したがって、たとえば、8/1 の「設計の実際の」値は青になり、9/1 と 10/1 の「開発の実際の」値はそれぞれ緑と赤になります。

次のように条件付き書式を設定して、日付コントロールを反復処理できます。

Private Sub Form_Load()

Dim ctrl As Control
Dim tb As TextBox


For Each ctrl In Me.Controls
    If IsDate(ctrl.Name) Then
        Set tb = ctrl
        tb.FormatConditions.Add 'not sure what to put here
    End If
Next

End Sub

FormatConditions.Addここの引数に何を入れる必要があるのか​​ わかりません。指定されたstatusType/ actual/date 値について、対応するstatusType/ target/date 値を取得して、フォーマットを設定するためにそれらを比較するにはどうすればよいですか?

このフォームは読み取り専用であるため、条件付きである必要はないことに注意してください。フォームが読み込まれるたびに、上記のルールに従って値に静的な色を割り当てることができます。

追加の説明: 基本的に、私がしようとしているのは、別の行の同じ列の値と比較する方法に応じて、ある行の色の値です。たとえば、「2013 年 8 月 1 日」列の場合、「設計|実際の」値 3 と「設計|目標」の値 4 を比較して、「設計|実際の」値が何色であるべきかを判断します。

4

1 に答える 1

0

あなたが何をしようとしているのか、私はよく理解していないと思います。

行ごとに個別に異なる条件付き書式を設定する必要がある場合、それはうまくいかないと思います。デザイン ビューで条件付き書式を設定できない場合は、コードを使用しても機能しない可能性があります。

それでもコードが必要な場合は、式を使用してコードで条件付き書式を設定する方法を次に示します。

Private Sub Form_Load()

    Dim ctrl As Control
    Dim tb As TextBox
    Dim fc as FormatCondition

    For Each ctrl In Me.Controls
        If IsDate(ctrl.Name) Then
            Set tb = ctrl
            Set fc = tb.FormatConditions.Add(acExpression, , "Me![FieldName] = ""Value""")
            fc.BackColor = 13611711
        End If
    Next

End Sub
于 2013-08-13T20:00:43.220 に答える