Sincronizar combos en Access, sin Programación en VBA.

Esta pregunta me la ha hecho más de una persona, así que este post lo escribo pensando en  todos a los que alguna vez les haya asaltado esta duda: ¿Cómo sincronizar dos combos de access sin tener que utilizar programación en VBA?

Asumo que quien lea este tutorial tiene un nivel de conocimientos intermedio en Ms-Access, es decir, sabe crear tablas, establecer relaciones, crear consultas y crear formularios.  Este tutorial aplica para access 2007 y versiones anteriores, así que atención:

Voy a tomar como ejemplo dos tablas de la base de datos NEPTUNO.MDB que vienen con las versiones de este programa.

Como pueden observar en la gráfica, la situación que se presenta es la de dos tablas relacionadas (aunque también funciona sin que exista relación)

La pregunta en este caso sería: ¿Cómo hago para que cuando en un combo A seleccione una categoría de producto, en un combo B aparezca la lista de los productos correspondientes a dicha categoría? Bueno, pues la solución es la siguiente:

1. Crear un Combo con el asistente para formularios de la tabla categorías agregando dos columnas, IdCategoría y Categoría:

2.  Hacer clic derecho sobre el combo y elegir la opción propiedades, luego buscar la ficha otras y ponerle un nombre al combo, para este caso debo pasar de cuadro combinado 2 a  CmbCategoría.

3. Crear otro combo con el asistente para la tabla productos, agregando el Id del producto y el producto. Le podemos poner el nombre de CmbProductos.  Luego veremos una imágen como la siguiente:

Enseguida guardamos el formulario:

4. Luego buscamos las propiedades del combo CmbProductos y hacemos clic en la ficha Datos, seleccionamos la propiedad Origen de la Fila y hacemos clic en el botón de los tres punticos ()que aparece a la derecha.

Inmediatamente observaremos una pantalla como la siguiente:

Luego hacemos clic derecho en el fondo de la pantalla a la derecha de la tabla productos, se selecciona la opción agregar tabla y se agrega la tabla categorías:

Cerramos el diálogo y enseguida agregamos el campo IdCategoría

5. A continuación nos ubicamos debajo de la columna IdCategoría a la altura de la fila criterios, hacemos clic derecho y seleccionamos la opción Generar, la cual nos llevará al generador de expresiones.

6. En el generador de expresiones que aparece, le hacemos doble clic a la opción de formularios, luego doble clic a formularios cargados y por último a CmbCategoría doble clic.   Después presionamos Aceptar.

Ahora presionamos el botón cerrar de la vista de diseño y hacemos clic en SI.

7. Finalmente hacemos clic derecho en el combo CmbCategoría elegimos la opción de propiedades,  luego la ficha eventos, enseguida la opción de los tres punticos y en el diálogo escogemos la opción de generar código.

Para terminar, escribimos la única línea de código VBA: Sendkeys (”{F9}”) Esta instrucción lo que busca es actualizar el formulario para que carguen los productos que corresponden a la categoría seleccionada.

Ahora cerramos la ventana de visual Basic! guardamos el formulario, lo ejecutamos y listoooooo!!!!

Ya tenemos un combo sincronizado!!!  Espero les sea de utilidad este tutorial !!!

:)

11 comentarios

  1. Muy interesante

  2. necesito si me puedes ayudar, por ejemplo lo q yo qro hacer es lo siguiente
    tengo 2 cuadros combinados en primero
    proveedor
    rut
    lo que to quiero hacer es poner el nombre del proveedor y q automaticamente me aparesca el rut… para no digitarlo… eso qro que me xpliquen pq no se como hacerlo..
    espero tu respuesta y gracias si puedes ayudarme

  3. Hola Daniela.

    Haz el proceso de manera similar a la que expliqué en este tutorial, la diferencia es que tu no tienes categorías sino proveedores y a cambio de productos los rut. Además no usas dos tablas como en mi ejemplo sino una sola…

    Me captas??

  4. Agradesco la forma como explicas las preguntas por tal motivo; me podrias ayudar con la siguiente tengo un formulario y dos subformularios uno captura ventas y el otro obtengo resultados calculados, mi problema es que no se actualiza el Subformulario de resultados por lo tanto me pudieras apoyar ya que mi nivel de conocimientos de access es limitado.

    • Los dos formularios tienen campos en común relacionados? para que se puedan relacionar?
      Entonces según me dices el segundo subformulario lo hiciste basado en los datos del primero?

      En principio me suena que el tema es similar a sincronizar dos combos. Emplea la misma filosofía de los dos combos con los dos sub-formularios….

      Que versión de access usas?

  5. *Efectivamente ambos subformularios tiene campos relacionados con el formulario principal.
    *Asi es atraves de una consulta se genera los resultados del segundo subformulario, pero no se actualiza al menos que entre y salga de los formularios.
    *La version de access es 2003

    • Bueno, si todo tiene relación de la manera en que imagino, deberías hacer los cambios que dices y en lugar de cerrar el formulario y volverlo a abrir, te debería funcionar el presionar la tecla F9, pues esta se utiliza para actualizar. puebalo y me cuentas…

  6. estube todo el dia buscando como hacerlo,encontre mucho pero nada funcionaba…OO sorpresa esto si funciono,,muchas gracias !!!

  7. Pero si entras al control CmbCategoria y tratas de desplegar la lista sin el raton no funcionaria tu codigo

    ejemplo si seleccionas una categoria y pasas al producto con con tab o enter y estando ahi pulsas F4 o Alt+FlechaAbajo entonces despliegas la lista pero no se actualizara su contenido

    Ese problema se soluciona utilizando el evento AlEntrar en lugar del evento Despues de actualizar de la siguiente manera, y tambien es mejor este porque solo actualizas el control que necesitamos en lugar de todos los controles

    Private Sub CmbCategoria_AfterUpdate()
    Me.CmbProductos.Requery
    End Sub

Escribe un comentario