Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Filt Ro Combo Form
Filt Ro Combo Form
INTRODUCCIÓN
Antes de nada, tened en cuenta que este ejemplo NO es
compatible con Access 2003. Sólo funcionará con Access
2007 y superior.
Desarrollaremos un ejemplo utilizando unos trabajadores de una empresa, a los cuales se les
conceden unos adelantos de nómina.
Como siempre, tened en cuenta que yo utilizaré los campos mínimos necesarios. Vosotros
podéis añadir, lógicamente, todos los campos que necesitéis.
En segundo lugar debemos preparar la tabla que será origen a la vez de un formulario y de un
subformulario. A esta tabla la llamaremos TAdelantos, y tendrá la siguiente estructura:
1
Visítame en http://siliconproject.com.ar/neckkito/
Nos daremos cuenta de que el proceso se ha completado porque ahora nuestro campo
[IdEmpl] de TAdelantos se mostrará como de tipo numérico.
CONFIGURANDO NUESTROS
FORMULARIOS
Vamos a crearnos una serie de formularios. Empecemos:
FORMULARIO FMENU
Vamos a insertar una serie de botones para poder operar con el resto de formularios. Así,
añadimos un primer botón de comando y le ponemos de nombre2 cmdAbreFEmpleados.
En el evento “Al hacer click” de ese botón (Propiedades → Pestaña Eventos) generamos el
siguiente código3:
…
Private Sub cmdAbreFEmpleados_Click()
'Cerramos el formulario actual
DoCmd.Close acForm, Me.Name
'Abrimos FEmpleados para añadir un nuevo registro
DoCmd.OpenForm "FEmpleados", , , , acFormAdd
End Sub
…
Fijaos que el código abre FEmpleados ya preparado para introducir un nuevo registro. Si
quisiéramos que lo abriera para mostrar todos los registros introducidos deberíamos haber
escrito, simplemente:
DoCmd.OpenForm "FEmpleados"
…
Private Sub cmdAbreFAdelantos_Click()
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FAdelantos", , , , acFormAdd
End Sub
2 A partir de ahora, cuando me refiera a cualquier control y diga “le ponemos de nombre” me estoy refiriendo al proceso de sacar las
propiedades del control → Pestaña Otras → Nombre, y ahí escribimos el nombre propuesto.
3 Para generar código nos ponemos en la parte en blanco junto al evento que queramos, y veremos cómo nos aparece un pequeño
botón de puntos suspensivos. Si hacemos click sobre él nos aparecerá una ventana. Le decimos que queremos generar código.
Se nos abrirá el editor de VB, con dos líneas por defecto (Private Sub... y End Sub). Esas dos líneas no deben tocarse. El código lo
escribimos entre dichas líneas
2
Visítame en http://siliconproject.com.ar/neckkito/
…
…
Private Sub cmdAbreFEmpleadosFiltro_Click()
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FEmpleadosFiltro", , , , acFormEdit
Forms!FEmpleadosFiltro.AllowAdditions = False
End Sub
…
Fijaos que, en esta ocasión, abro el formulario para edición/consulta (acFormEdit) y que a
través de (Forms!FEmpleadosFiltro.AllowAdditions = False) impido que se puedan dar de alta
nuevos registros.
FORMULARIO FEMPLEADOS
Aquí simplemente, en el encabezado del formulario, añadimos un botón de comando, que
llamaremos cmdCerrar, cuyo evento “Al hacer click” tendrá el siguiente código:
…
Private Sub cmdCerrar_Click()
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FMenu"
End Sub
…
FORMULARIO FADELANTOS
Al igual que hemos hecho con FEmpleados, añadimos, en su encabezado, un botón de
comando que llamamos cmdCerrar y que tendrá exactamente el mismo código que cmdCerrar
de FEmpleados.
FORMULARIO FEMPLEADOSFILTRO
Quizá no necesitemos toda la información que nos aparece en ese formulario, sino sólo la que
consideramos más relevante. En nuestro ejemplo vamos a borrar el campo [FechAlta].
Evidentemente lo anterior es sólo una idea, por si puede seros útil. Si los necesitamos dejamos
todos los campos y “a otra cosa, mariposa”.
3
Visítame en http://siliconproject.com.ar/neckkito/
Ahora debemos programar el código. Así, en el evento “Después
de actualizar” del combo generamos el siguiente código:
…
Private Sub cboFiltro_AfterUpdate()
'Declaramos las variables
Dim vEmpl As Long
Dim miFiltro As String
'Cogemos el empleado seleccionado
vEmpl = Nz(Me.cboFiltro.Value, 0)
Ahora sólo nos queda añadir un botón de comando para cerrar el formulario, que como ya
habréis adivinado se llamará cmdCerrar y tendrá el mismo código que cmdCerrar de
FEmpleados o FAdelantos.
Cuando seleccionemos un valor el formulario nos filtrará por el empleado seleccionado, que a
su vez hará que el subformulario quede filtrado por los registros que afectan a ese trabajador.
¡Y listo!
PARA FINALIZAR
Sólo cabe resaltar del ejemplo que al utilizar un asistente para búsquedas para definir el tipo
de campo ha sido el propio Access el que ya nos ha creado, por defecto, los subformularios
relacionados. De esta manera nos hemos ahorrado el tener que crear esos subformularios y
relacionarlos con un formulario principal. Y, como reza el dicho, “a caballo regalado no le mires
el dentado”
¡suerte!
4
Visítame en http://siliconproject.com.ar/neckkito/