• ベストアンサー

アクセスのレポートにて明細行の色付け

アクセスのVisualBasicで、明細行をある項目毎に色分けをいたいのですが、一応参考書にて If Me!テキスト1 > Me!テキスト2 Then Me.Section(acDetail).BackColor = RGB(200, 200, 200) Else Me.Section(acDetail).BackColor = RGB(255, 255, 255) End If    というようなことまではできたのですが、 同一レコード内ではなく、前レコードと対比して異値なら色付   という方法をご存知の方よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>明細行をある項目毎に色分けをいたい >前レコードと対比して異値なら色付という方法を #1の方の方法では前レコードが全て異なる値の状態だと先頭行以外全て背景色が灰色になってしまうのでは 対比させるコントロールをテキスト1とした場合 Option Compare Database Dim StrCli As String Private Sub Report_Open(Cancel As Integer) StrCli = "" End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If StrCli <> "" Then If StrCli <> Me![テキスト1] And Section(acDetail).BackColor = RGB(255, 255, 255) Then Section(acDetail).BackColor = RGB(200, 200, 200) Else Section(acDetail).BackColor = RGB(255, 255, 255) End If Else Section(acDetail).BackColor = RGB(255, 255, 255) End If StrCli = Me![テキスト1] End Sub のようにしないと項目毎(この場合テキスト1毎)に色分けが出来ないと思いますが。

aaeeua
質問者

お礼

お礼が遅くなり、申し訳ありませんでした。 一度試してみます。 ちょっと理解するのに時間がかかるかもしれませんが。 ありがとうございました。

その他の回答 (2)

  • tarodaro
  • ベストアンサー率43% (7/16)
回答No.2

>前レコードと対比して異値なら色付 #1さんの処理のほうが妥当なので、直接的な 回答ではありませんが、ご参考までに Public tmp As Long ' 文字列なら String にしてください Public f As Boolean Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Dim col(1) As Long col(0) = RGB(200, 200, 200) col(1) = RGB(255, 255, 255) If Me!テキスト1 = tmp Then Me.Section(acDetail).BackColor = col(Abs(f)) Else Me.Section(acDetail).BackColor = col(Abs(Not f)) f = Not f End If tmp = Me!テキスト1 End Sub

aaeeua
質問者

お礼

ありがとうございます。 試してみます。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

レポートの「テキスト1」に関連付けしたフィールドが前レコードと異値だった場合に灰色にするコード。 レポートのイベントプロシージャをVBEditorで開いて Option Compare Database の直後に Dim 直前の内容 As String の1行を追加します。 次に、レポートのプロパティのイベントの「開く時」を「[イベントプロシージャ]」にして、以下のようにします。 Private Sub Report_Open(Cancel As Integer)   直前の内容 = "@@##@@" '先頭レコードの判定の為、絶対に入力しない値を使って初期化 End Sub 次に、詳細のプロパティのイベントの「フォーマット時」を「[イベントプロシージャ]」にして、以下のようにします。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   If 直前の内容 <> "@@##@@" Then '先頭レコードではないなら     If 直前の内容 <> テキスト1 Then '前レコードと異値なら灰色       Section(acDetail).BackColor = RGB(200, 200, 200)     Else '前レコードと同値なら白       Section(acDetail).BackColor = RGB(255, 255, 255)     End If   Else '先頭レコードなら必ず白     Section(acDetail).BackColor = RGB(255, 255, 255)   End If   直前の内容 = テキスト1 '次のレコードの為に現在の値を保存 End Sub

aaeeua
質問者

お礼

解説ありがとうございました。 回答いただきましたことで試してもいます。 ただ、理解できるかどうか心配ですが。 ありがとうございました。

関連するQ&A