Вы находитесь на странице: 1из 9

¿COMBO DE COLORES... O NO?

Ante la reiterativa aparición de consultas para hacer un


combo cuyas líneas tengan diferentes colores en función de
una condición pues me he decidido a preparar este ejemplo,
que no es más que una “trampa” para conseguir un efecto
similar a lo que se pide. Puesto que, hasta el momento, no
es posible cambiar de color las líneas de texto de un combo
independientemente.

Y, como siempre, no os fijéis tanto en la estructura de la


BD, que no es la mejor, pero la construiré así para hacer el
ejemplo más entendible.

Así que... vamos a por ello.

MIS TABLAS
Vamos a imaginar que debemos procesar la cantidad producida de un producto, y que ese
producto tiene un compuesto base. A su vez, ese compuesto base puede tener una
característica definitoria, como que es tóxico, que es abrasivo, que es inflamable...

Por ejemplo, y dado que no tengo ni idea de productos químicos pues voy a poner un ejemplo
inventado, el registro que vamos a introducir es la producción de 5 unidades de “Matarratas
Complex”, cuyo compuesto base es el “Benciclono”, cuya característica es la toxicidad.

Espero que se entienda la idea. Podría haberlo simplificado, pero si lo hago un poco más
complejo no debería seros difícil conseguir el mismo efecto en un caso, por ejemplo, de que
hablemos de socios que están o bien de “baja”, o bien en situación de “bloqueado”, o bien en
situación de “activo”.

Vamos pues a crear una primera tabla que nos recoja los compuestos base y sus
características. A esa tabla la llamaremos TCompuestos y tendrá la siguiente estructura:

Como estoy en un Access 2013 el tipo de datos es “Texto corto”; recordad que para otras
versiones es simplemente “Texto”.

Ahora vamos a construirnos otra tabla, que llamaremos, por ejemplo, TProduccion, que tendrá
la siguiente estructura:

1 La BD de ejemplo os la podéis bajar aquí

1
Visítame en http://neckkito.siliconproject.com.ar
CREANDO NUESTRO SUBFORMULARIO CON FORMATO
CONDICIONAL
Creémonos un formulario en vista de formularios continuos (varios elementos) sobre la tabla
TCompuestos. Lo llamaremos subFormCompuestos. Vamos a modificar su diseño para que se
parezca lo máximo posible a una simple lista de valores. Por ejemplo, a mí me ha quedado así:

Las principales manipulaciones que he hecho han sido:

• Eliminar el encabezado del formulario


• Eliminar los selectores de registro y botones de desplazamiento (Propiedades del
formulario → Pestaña Formato)
• Reducir el tamaño de letra de los campos
• Situar los bordes de los campos en estilo transparente
• Situar una línea entre ambos campos.
• La propiedad “Punto de tabulación” de ambos campos está definida en NO (Propiedades
→ Pestaña Otras). También he desactivado esos campos (Propiedades → Pestaña Datos
→ Activado: NO)

Vamos a efectuar algunas manipulaciones más. Como nuestro futuro subformulario no debe
comportarse como tal, sino que en realidad nos debe mostrar una lista de valores, lo que
haremos será bloquear la manipulación de registros. Para ello sacamos sus propiedades y
configuramos así las propiedades de la pestaña Datos:

Permitir agregar: NO
Permitir eliminación: NO
Permitir ediciones: NO
Permitir filtros: NO

Guardados los cambios, si lo rellenamos con algunos datos la vista queda así:

2
Visítame en http://neckkito.siliconproject.com.ar
Vemos que manejamos tres características: tóxico, abrasivo
e inflamable. Vamos pues a asignar formato condicional en
base a estos valores.

Yo os lo explicaré sobre un Access 2013, por si alguien no sabe cómo aplicar formato
condicional. Recordad además que para los sufridos usuarios de Access 2003 sólo es posible
aplicar 3 condiciones como máximo.

Con el formulario en vista diseño nos vamos a menú “Formato”. Seleccionamos los dos campos
(utilizando la tecla mayúsculas podemos hacer una selección múltiple) y pulsamos sobre el
botón del ribbon “Formato Condicional”.

Creamos una nueva regla

Y la configuramos de la siguiente manera:

3
Visítame en http://neckkito.siliconproject.com.ar
Si os fijáis, aunque no se aprecie mucho en la ilustración, he seleccionado un color marrón
para el tipo de letra.

Si aceptamos volvemos a la ventana anterior. Volvemos a seleccionar nueva regla, y la


configuramos así. Fijaos que he seleccionado el color de letra rojo:

Y repetimos el proceso una tercera vez, con un color de letra violeta

4
Visítame en http://neckkito.siliconproject.com.ar
De manera que al volver a la pantalla inicial nos hayan quedado definidas estas tres reglas así:

Y, tras aceptar, nuestro formulario con datos ahora se ve así:

CREANDO NUESTRO FORMULARIO FPRODUCCION


Creémonos un formulario sobre la tabla TProduccion. Lo guardamos como FProduccion.

Lo que haremos será, en primer lugar, insertar un subformulario a través del siguiente

5
Visítame en http://neckkito.siliconproject.com.ar
proceso:

• Usar un formulario existente → Seleccionamos


subFormCompuestos
• Seleccionamos la opción Elegir de la lista → “Ninguno”
• Dejamos el nombre que sale por defecto

Vamos, en el form principal, a eliminar la etiqueta del


subformulario.

Ahora ajustamos el tamaño del campo [Compuesto] al


tamaño del subformulario, haciéndolo un pequeño más
estrecho a la derecha.

Insertamos un botón de comando, redimensionándolo y situándolo a la derecha del campo


[Compuesto]. Sacamos las propiedades de ese botón de comando y:

• Pestaña Formato → Imagen, y seleccionamos una imagen que nos guste (yo he
seleccionado la llamada “Flecha abajo”).
• Pestaña Otras → Nombre, y ahí escribimos cmdDespliega.

Y como una imagen vale más que mil palabras así me ha quedado a mí:

CONTROLANDO EL COMPORTAMIENTO DEL PSEUDOCOMBO


La idea es, dado que vamos a tratar de que nuestro invento se asemeje a un combo, fijar las
características tanto del formulario como del subformulario en relación a los controles que
intervienen en el proceso.

Lo primero que pensamos es que, por defecto, los combos no aparecen desplegados. Para
conseguir pues que no aparezca “desplegado” vamos a sacar las propiedades del formulario
principal y en el evento “Al activar registro” vamos a generar el siguiente código2


Private Sub Form_Current()

2 Para generar código debemos sacar las propiedades del control → Pestaña Eventos, y nos situamos en la parte “blanca” a la
derecha del evento que queremos programar. Veremos un pequeño botón de puntos suspensivos. Si hacemos clic sobre él nos
aparecerá una ventana que nos pedirá qué operación deseamos realizar. Le indicamos que queremos “generar código”.

6
Visítame en http://neckkito.siliconproject.com.ar
Me.subFormCompuestos.Visible = False
End Sub

Segunda idea: al dar clic sobre nuestra “flecha” el combo


debe desplegarse. Pues para ello seleccionamos nuestro
botón de comando y en su evento “Al hacer clic” generamos
el siguiente código:


Private Sub cmdDespliega_Click()
Me.subFormCompuestos.Visible = True
End Sub

Tercera idea: al hacer clic sobre el campo [Compuesto] el combo debería desaparecer de
nuevo. Para ello, en la propiedad “Al recibir el enfoque” de ese campo escribimos este código:


Private Sub Compuesto_GotFocus()
Call Form_Current
End Sub

Cuarta idea: Al hacer clic sobre uno de los registros del combo (es decir, sobre los registros del
subformulario) ese valor debería pasar al campo del form principal. Necesitamos pues
manipular ambos campos del subformulario.

Para ello vamos a seleccionar el campo [Compuesto] del subformulario (ojo: debe quedar
seleccionado y es el campo del subformulario, no del formulario) y en su evento “Al hacer clic”
generamos el siguiente código:


Private Sub Compuesto_Click()
With Me.Parent
.Compuesto.Value = Me.Compuesto.Value
.Compuesto.SetFocus
End With
End Sub

Y ahora seleccionamos el campo [Caracteristica] del subformulario y en su evento “Al hacer


clic” generamos el siguiente código:


Private Sub Caracteristica_Click()
Call Compuesto_Click
End Sub

Quinta idea: si ahora hiciéramos clic en otro campo el subformulario no desaparecería, como sí
lo haría la lista de un combo. Para ello sacamos las propiedades de la sección detalle de
FProduccion (ojo, de la sección detalle) y generamos en el evento


Private Sub Detalle_Click()
Call Form_Current
End Sub

7
Visítame en http://neckkito.siliconproject.com.ar
Deberíamos hacer lo mismo para el mismo evento en los campos de que disponemos. Así, para
el campo [Producto] y el campo [Unidades] escribimos:


Private Sub Producto_Click()
Call Form_Current
End Sub

Private Sub Unidades_Click()


Call Form_Current
End Sub

Sexta idea: al desplegar el combo nuestro cursor debería verse como una flecha, no como una
barra de edición. Si a vosotros se os ve como una flecha, pues fantástico, pero en Access 2013
el cursor cambia a edición. Para evitar eso lo que podemos hacer es situar
subFormCompuestos en vista diseño, y en la propiedad de formulario “Al cargar” le escribimos
el siguiente código:


Private Sub Form_Load()
Screen.MousePointer = 1
End Sub

Y con esto ya tenemos nuestro combo preparado.

La verdad es que da bastante bien el pego. Cuando abrimos nuestro formulario FProduccion lo
que vemos es

Y cuando hacemos clic sobre la flecha del pseudocombo lo que vemos es:

8
Visítame en http://neckkito.siliconproject.com.ar
¿SE PODRÍA MEJORAR ALGUNA COSA?
Por supuesto que sí. Se podría intentar hacer que al pasar
el mouse sobre los registros estos adquirieran otro color de
fondo. Eso sería muy sencillo si el subformulario no
estuviera en vista de formularios continuos. Sin embargo, al
estar en este tipo de vista la cosa se complica y tendría que
estudiar cómo podría hacerse. Como de entrada he
considerado que esto era un “mal menor” y ya no dispongo
de más tiempo para dedicarle a este ejemplo pues... ahí
queda como idea.

Evidentemente, si alguien se anima y descubre cómo hacerlo seré el primero en escuchar sus
sugerencias.

PARA FINALIZAR EL EJEMPLO


Bueno. Espero que os haya gustado el ejemplo. A pesar del número de páginas la cosa es
sencilla, aunque un tanto trabajosa. En fin... todo sea por hermosear nuestro Access.

Un saludo, y....

¡suerte!

9
Visítame en http://neckkito.siliconproject.com.ar

Вам также может понравиться