Filas de un Informe en distintos colores

El motivo de mi pregunta es si me puedes ayudar en los siguiente.
Tengo un informe donde resulta que tengo individuos en Madrid, Barcelona y Bilbao y quiero que los de Bilbao salgan en Rojo, los de Madrid en Azul y los de Madrid en Amarillo, ¿se puede hacer?

1 respuesta

Respuesta
1
Si, según la versión de Access con más o menos dificultad: yo conozco tres maneras (para un de ellas, la tercera, te puede ser útil un módulo que te comentaré y si te interesa te lo paso)
a) Sólo Access 2007 con formato condicional, de manera parecida a Excel, como provengo de la vieja escuela (desarrollo profesionalmente desde Access 2.0, ahora ya sólo me dedico a esto por diversión y 2007 me ha pillado ocupado y algo mayor), no lo controlo tanto ni la potencia que tiene para tu caso particular, sunpondo que peleandos un poco con ello se conseguirá.
b) Con un poquito de programación sencilla
- En el informe tienes textbox para mostrar los datos
- Deberá aparecer el que saca la ciudad (en el ejemplo le voy a llamar txtCiudad)
- Deberá aparecer el nombre del individuo (en el ejemplo le voy a llamar txtIndividuo)
- Todo supongo que está puesto en la sección detalle del informe, que es lo más normal (si no es así, particulariza para tu caso)
- Has de utilizar el evento on format del objeto/control detalle
- Según el valor de la ciudad (txtCiudad) voy a utilizar las propiedades del control txtIndividuo para cambiar el color, las propiedades serán backcolor (color de fondo) y forecolor (color de la fuente)
- El código sería algo así:
dim strCiudad as string
strCiudad = me.txtCiudad
'Incializo los colores
me.txtIndividuo.Backcolor = vbwhite
me.txtIndividuo.forecolor = vbblack
'Aplico los colores según el valor de la ciudad
Select case strCiudad
    Case "Madrid"
       me.txtIndividuo.backcolor = vbblue
       me.txtIndividuo.forecolor = vbwhite
    case "Bilbao"
       me.txtIndividuo.BackColor = vbRed
       me.txtIndividuo.ForeColor = vbwhite
    case "Madrid"
       me.txtIndividuo.Backcolor = vbyellow
       me.txtIndividuo.Forecolo = vbBlack
    case else
       me.txtIndividuo.Backcolor = vbwhite
       me.txtIndividuo.forecolor = vbblack
end select
c) basado en lo anterior más sofisticado y personalizable.
Utilizo una tabla ColoresCiudad más o menos así (ver nota 1)
Ciudad|ColorDeFondo|ColorDeTexto
Barcelona|Azul|Blanco
Bilbao|Rojo|Blanco
Madrid|Amarillo|Negro
Nota 1: los colores tienen que ser numéricos. Para eso tengo una tabla de apoyo con el campo del texto del color y el valor numérico, por ejemplo: Access 2007 lo trabaja en hexadecimal, rojo es ED1C24, las versiones anteriores es un dato long integer 15523956. Yo utilizo el long integer (funciona igual). En la tabla de la ciudad y los colores, en los campos de los colores tengo una relación a la tabla de colores, mostrando un combo con el texto pero trabajando con el número.
Utilizo dos funciones que me hice hace años:
CreaSQL [NombreDeConsulta], [SQLdeConsulta], esta función me crea la consulta un consulta nueva con el nombre y el SQL que le paso a la función
LeeDeTablaSiHay [NombreDeTabla], [NombreDeCampo], me devuelve el valor que hay en el primer (o único) registro dando el nombre de tabla/consulta y el campo donde tiene que buscar.
Básicamente hago lo mismo que en el apartado anterior, b), pero el nombre de la ciudad, el color de fondo y el color del texto, en lugar de escribirlo en el código del evento on format del detalle, hago que lo lea de la tabla ColoresCiudad
Dim strSQL as string
strSQL = "SELECT * FROM ColoresCiudad WHERE Ciudad = '" & me.txtCiudad & "';"
CreaSQL "QS_ColorUnaCiudad", strSQL
(Ya tengo la consulta con todos los campos de la tabla ColoresCiudad para el valor que aparece en el textbox de la ciudad, ahora inicializo y luego leo los colores y se los aplico al textbox del individuo)
me.txtIndividuo.BackColor = vbWhite
me.txtIndividio.ForeColor = vbBlack
me.txtIndividio.BackColor = LeeDeTablaSiHay ("QS_ColorUnaCiudad", "ColorDeFondo")
me.txtIndividuo.ForeColor = LeeDeTablaSiHay ("QS_ColorUnaCiudad", "ColorDeTexto")
Ventajas de esta manera: utilizo recursividad siguiendo el estilo de Access con las tablas Msys, de hecho las trato como Tablas Usys. Sólo cambiando los colores en la tabla cambias todo el informe, se puede personalizar todo lo que quieras, en algún caso lo he utilizado con un CommonDialog sacando la ventana de colores de Windows para que sea el mismo usuario el que lo personalice.
Desventajas: la programación de esto es algo más durilla, y para cambiar el color de dos o tres controles no merece la pena, a no ser que quieras dejar abierto que el usuario final lo pueda cambiar son que toque el código.
Gracias por todo, pero para mi es muy difícil, tengo un nivel muy bajo . Gracias por tu tiempo y paciencia.
Un saludo
Manuel Pérez

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas