Alternar color de fondo formularios continuos

Te pregunto por un tema que creo no es nuevo, pero no he encontrado aún una buena solución. Necesito que los registros de un formulario continuo alternen su color de fondo, algo similar a lo que se hace con los informes.

2 Respuestas

Respuesta
2
La verdad es que la preguntita trae tela porque no hay ninguna opción de Access que haga lo que comentas de manera automática. Lo más práctico es utilizar el formato condicional.
El problema de utilizar el formato condicional es que necesitas "algo" que te permita fijar la condición. Ese "algo" es el valor de un campo. Esto nos sitúa ante dos posibilidades:
1- Que ya tengas un campo que te permita aplicar el formato condicional
2- Que no lo tengas.
Si te encuentras en la opción 1 lo que veo mejor es que sea un campo numérico o autonumérico que te dé valores correlativos. Entonces es muy fácil.
Si te encuentras en la opción 2 hay que "trabajar" un poquito más, porque debes crear ese campo y que además Access te lo rellene automáticamente.
Si quieres yo te propongo un "truco" para conseguir eso, suponiendo que estés en la situación 2. Como el final del proceso sirve para ambas posibilidades sólo te explico cómo hacerlo en el caso de que no tengas ese campo y aprovechas el final ;)
Vamos allá:
1.- Abres la tabla origen del formulario continuo (yo la he llamado "Materiales") y le añades un campo, que he llamado "Contador", de tipo "número"
2.- Abres el formulario continuo y añades ese campo contador recién creado. No te preocupes dónde ponerlo, porque le borraremos la etiqueta y al campo, en sus propiedades, le diremos que no sea visible (Pestaña Formato->Visible: NO).
3.- En las propiedades del formulario nos vamos al evento "Al abrir" y generamos código. Le copias este código (recuerda que debes sustituir "Materiales" por el nombre de tu tabla):
---
Private Sub Form_Open(Cancel As Integer)
    Dim i As Integer
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    i = 1
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Materiales", dbOpenTable)
    rst.MoveFirst
    Do Until rst.EOF
        rst.Edit
        rst.Fields("Contador").Value = i
        rst.Update
        i = i + 1
        rst.MoveNext
Loop
    rst.Close
    dbs.Close
    Set rst = Nothing
    Set dbs = Nothing
End Sub
---
Lo que hace el código simplemente es rellenarte el campo contador con números consecutivos.
4.- De vuelta al formulario continuo seleccionas todos los campos (Mayúsculas+click izquierdo) y, una vez seleccionados, te vas al botón de formato condicional.
A partir de aquí el procedimiento es común a las posibilidades 1 y 2. Sólo debes cambiar el campo de referencia (Contador) si ya tienes otro campo que cumpla su misma función.
5.- Añades una primera condición, que será la siguiente:
Condición 1: "La expresión es" --> [contador] Mód 2=0 y le pones el relleno de los campos del color que quieras.
6.- Añades una segunda condición, que será la siguiente:
Condición 2: "La expresión es" --> [contador] Mód 2<>0 y le pones el relleno de los campos del color que quieras.
---
Ahora, cada vez que abras el formulario continuo, se asignará un valor numérico correlativo al campo "contador" y, en función de si es par o impar, le asignará el color de relleno que tú hayas elegido.
Bueno. Ya me dirás si te ha ido bien. Ante cualquier duda ya sabes ;)
Hola de nuevo,
Cuando abro el formulario me sale marcado en la segunda línea del código dbs As DAO.Database y me aparece el error, Error de complicación: no se ha definido el tipo definido por el usuario.
La base de datos en que trabajo se llama cvsprg y las tablas están vinculadas con una base que se llama cvdatbd, te pongo todo esto por si hay que personalizar más el código.
Gracias
Fernando
Prueba de hacer lo siguiente:
- Abre la base de datos
- Presiona las teclas ALT+F11 -> Se te abrirá el editor VBE
- Te vas al menú "Herramientas"->Referencias...
- En la pantalla que te sale buscas, en la lista de referencias disponibles, "Microsoft DAO 3.6 Object Library"
- La marcas y la agregas. Aceptas y sales.
Intenta ahora abrir el formulario, a ver si te funciona.
Hola, resuelto lo de la librería pero aún no funciona, sale resaltado Set rst = dbs.OpenRecordset("tblListaCompleta", dbOpenTable) y error se haproduccido error en tiempo de ejecución, argumento no válido. Por si sirve de algo el formulario se basa en una consulta que viene de tblListaCompleta
Fernando
otra vez! ;)
Caramba... te gusta ponérmelo difícil, ¿eh? Je, je...
El código está pensado para un formulario basado en una tabla, no una consulta. Por eso te da error.
Vamos a arreglarlo:
Doy por supuesto que has modificado esa consulta y que has añadido en ella el campo "contador" que te comentaba (que ahora ya te aparecerá si lo has añadido a la tabla).
Evidentemente también entiendo que habrás añadido, en el formulario, ese campo contador, con la propiedad Visible: NO.
Coges el código que te he pasado y en la línea que pone:
Set rst = dbs.OpenRecordset("Materiales", dbOpenTable)
La cambias y pones simplemente:
Set rst = dbs.OpenRecordset("NombreConsulta")
Dicen que a la tercera va la vencida. A ver si ahora te funciona.
Ya me dirás ;)
Hola
Todo funcionó perfecto, sólo me numera y controla los registros de la consulta como yo quería (en la consulta están restringidos los registros de acuerdo a diferentes criterios), lademás puedo cambiar los criterios de orden sin riesgo de que se pierda la alternancia porque el campo numérico se llena cada vez que se abre el formulario.
Muchas gracias, eres un genio

¡Rayos y centellas! ¡Voto a bríos! ¿Alguien se atreve a corregirme...? "¡Mecachis en la mar!"

Ja, ja, ja, ja... xD

Muy buena tu observación, Ángel. Efectivamente, el sistema que propones es el más simple. Además, te diré que este sistema también funciona con Access 2007 (desconozco si en Access 2003 existe esta opción), así que no tengo excusa posible: en aquel entonces (cuando se formuló la pregunta) no tenía conocimiento de la existencia de esas propiedades de formulario. Así que tu respuesta, Ángel, es más que correctísima.

La verdad es que desde 2011 hemos aprendido "algunas cosillas" más sobre Access... ji, ji. Y, como en la variedad está el gusto, pues uno no tiene tiempo de mirar todas las particularidades de A2003, A2007, A2010, A2013... ¿para cuándo el A2015? Je, je

Muchas gracias por tu respuesta, que esto queda para la posteridad ;)

Un abrazo,

Neckkito

Respuesta

Nunca me habría visto en la tesitura de corregir a Nekkito. Imagino que trabajo con una versión más moderna, pues la pregunta es de 2011 y yo trabajo con la versión 2010 de Access, que estaría muy verde aún por aquellos tiempos. En cualquier caso, aporto la respuesta por si alguien llega aquí, como yo, buscando una solución sencilla.

Hay una manera muy sencilla de alternar colores en un formulario continuo.

1- En la vista Diseño del formulario, seleccionar el objeto "Detalle"

2- En la Hoja de Propiedades hay dos propiedades que sirven para esto: Color del fondo y Color del fondo alternativo. La primera define el color de las líneas impares, y la segunda el de las líneas pares.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas