Alternar el color de las filas en un informe de MS-Access

Lápices pintando rayas

Se trata de alternar el color de fondo de las filas de detalle de un informe en Microsoft Access; pintaremos las líneas pares de un color y las impares de otro color diferente.

Esto facilita en gran medida la lectura del informe ya que es fácil seguir leyendo la misma línea sin que nuestra mirada se dirija a la fila anterior o posterior.

Primera solución

En nuestra primera aproximación el propósito es encontrar la solución más sencilla posible.

En el diseño del informe hay que incluir el siguiente código Visual Basic en el evento Al Imprimir de la sección Detalle:

Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)

Static cuenta As Long
Dim color As Long
Dim resto As Long

cuenta = cuenta + 1
resto = cuenta Mod 2

If resto = 0 Then
color = vbWhite
Else
color = 16777177
End If

Me.Detail.BackColor = color

End Sub
  • La variable cuenta se utiliza para contar la línea de detalle que se quiere imprimir. Esta variable tiene que ser static para que la cuenta se mantenga y no vuelva a empezar desde cero.
  • La variable resto vale siempre 0 o 1 ya que es el resto que da al dividir la cuenta entre 2. Si da 0 significa que es un número de línea de detalle par y sino es impar.
  • El número 16777177 corresponde a un color celeste claro. Se puede calcular dicho número observando el número que da al cambiar la propiedad Color de fondo.

Segunda solución

En este caso pretendemos que sea lo más sencillo posible aplicar este efecto a cualquier informe

Pasos a seguir

  1. En el diseño del informe incluiremos la siguiente expresión en el evento Al imprimir de la sección Detalle:
    Al imprimir:=AlternarColorFondo()
  2. En la misma sección Detalle cambiaremos también el color de fondo:
    Color del fondo:16777177
  3. Agregaremos un nuevo módulo a nuestra base de datos que se llame por ejemplo ModuloInformes con el siguiente código:
Public Function AlternarColorFondo()

Static color_no_blanco As Long
Static es_par As Boolean
Dim informe As Report
Dim color_fondo As Long

Set informe = Screen.ActiveReport
color_fondo = informe.Section(acDetail).BackColor
If color_fondo <> vbWhite Then color_no_blanco = color_fondo
es_par = Not es_par

If es_par Then
color_fondo = color_no_blanco
Else
color_fondo = vbWhite
End If

informe.Section(acDetail).BackColor = color_fondo

End Function

Tercera solución

Hay una solución avanzada dónde se pueden pasar por parámetro el informe, el número de línea y el color de fondo. Para ver el código y ejemplos de uso descárgate la base de datos de ejemplo

Descargar la base de datos altenar_color.7z… (Está comprimido con 7-zip)

Comentarios

  1. 1 enrique 2007-07-11 Hace 10 años
    hola
Proinf.net, ©2003-2017 ci 3.1.6 (CC) Esta obra está bajo una licencia de Creative Commons Este software está sujeto a la CC-GNU GPL