Cuadros combinados en cascada

Supongamos este ejemplo: Una tabla de Artículos y cada artículo tiene su categoría. En un formulario queremos, mediante dos cuadros combinados, que al seleccionar del primero una categoría, en el segundo solo me muestre los artículos de esa categoría. Pues nada mas sencillo de realizar, así que pongámonos manos a la obra.

Lo mas importante es tener bien definidas las tablas.

Tabla Artículos

  • IdArticulo
  • Articulo
  • IdCategoria 

Tabla Categorias

  • IdCategoria
  • Categoria

Una muestra de la tabla Artículos. Nótese que el campo IdCategoría está configurado como un cuadro de búsqueda que lee de la tabla Categorías y oculta el campo clave para que solo muestre el nombre de la categoría y no su número.

IdArticulo Articulo IdCategoria
1 Monitor Sansung 22″ Monitores
2 Disco Duro Seagate 2TB Discos Curos
3 Memoria Kingston 4Gb DDR3 Memorias
4 Monitor LG 27″ Full HD Monitores

Ahora vamos a nuestro formulario y ponemos el primer cuadro combinado y como origen de datos le damos la tabla Categorías, el asistente se ocupará de ocultar el campo clave para que quede mas bonito,  y a continuación ponemos el segundo cuadro combinado y le damos como origen de datos la tabla Artículos. De esta tabla, el asistente también ocultará el campo clave, sin embargo nos dejará a la vista el último campo «IdCategoría» :

Cuadro Combinado Artículos

El segundo paso debe ser ir a las propiedades de cuadro combinado de Artículos y en el apartado «Ancho de columnas» dejarlo mas o menos así: 0cm ;4cm; 0cm con lo cual definimos el ancho de la última columna en cero y no se muestra aunque siga existiendo.

Ahora mismo los cuadros combinados aún son independientes uno del otro, tenemos que configurar la forma para que el cuadro artículos solo muestre los de la categoría seleccionada en el primer cuadro combinado.  un inciso antes de seguir, mis cuadros combinados se llaman»Cuadro_Combinado0″ y «Cuadro_Combinado2» porque no les he cambiado el nombre que pone Access por defecto al ponerlos sobre el formulario.

La forma de hacerlo es desde las propiedades del cuadro combinado Artículos:

Pulsar para ir al generador de consultas

En el generador de consultas nos situamos en «Criterios» del campo «IdCategoría» y hacemos referencia al Cuadro combinado de la categoría:

Con esto ya está, ale a probar vuestro cuadro combinado. Pues no majos, resulta que aún no funciona y os explico el motivo. Los cuadro combinados se rellenan con datos, o sea, con la tabla que tienen como origen en el momento de abrir el formulario o en el momento de cambiar de registro. Lo que os ha pasado, si habéis hecho  la prueba, es que al mostrar el formulario, los dos cuadros combinados están vacíos aunque al pulsar el de categorías si nos las muestre y si seleccionáis una categoría no nos muestra los artículos que le pertenecen. El motivo es que, aunque el origen de datos de Artículos ya incluya un filtro por Categorías no se actualizará por el mero echo de seleccionar la categoría, recordad que los combos solo se actualizan al abrir el formulario.
¿Queréis una solución verdad? si no para que hemos llegado hasta aquí, pues ale, muy sencilla también, consiste en decirle al cuadro combinado «Categorías» que cuando se «Actualice» eso es cuando seleccionemos una, me vuelva a cargar el origen de datos del cuadro combinado de Artículos y lo vamos a hacer con código VBA ¿Que no sabéis programar? no os hace falta, ya veréis que esto es como leer una cartilla del cole.
Propiedades del cuadro combinado «Categorías»:

Pestaña Eventos, «Después de actualizar» seleccionamos «Procedimiento de evento» y pulsamos los puntitos para que nos lleve al editor de código para añadir la siguiente línea:

Private Sub Cuadro_combinado0_AfterUpdate()
Me.Cuadro_combinado2.Requery
End Sub

Lo que viene a decir que «Vete al cuadro combinado de Artículos y me lo actualizas por cojo…..» ejem, pues eso, que para chulos nosotros y lo forzamos a actualizarse. Y ya está, ahora si que funciona perfectamente.

Espero que os haya gustado el tutorial.

74 comentarios

  1. Hola buen día, solo para agradecerte y felicitarte, me gusto tu tutorial, y esta muy clarito. muchas gracias buen día

  2. Muy bién explicado el tutorial te felicito por tu paciencia y
    dedicación estaba busque y busque hasta que dí con tu página
    eres muy inteligente y yo aprendí de tí.

  3. Excelente y muchas gracias por compartir tus conocimientos, eso dice mucho a favor de tu persona. y aprovecho la ocasion para pedirte un favor, en relacion a los combos en cascada, y es como le hago, para que cada vez que actualize o cambie el combo superior los inferiores queden en blanco, porque podria confundirse la informacion, saludos y gracias de antemano.

    1. Hola edgar, para ello puedes, por ejemplo, hacer «Me.CuadroCombinadoQueQuieras.Value=Null»

      Con eso borras cualquier dato que tenga el combo a la espera de que vuelvas a seleccionar otra cosa.

  4. Antetodo muchas gracias por el post me has salvado la vida 🙂 Llevo atrancado varios días y no encontraba la solución. Mil gracias por compartir sus conocimientos y explicarlos de manera tan clara. Hasta ahora no conocía su web, desde ya tienes un seguidor más.

    Un saludo y espero algún día devolver el favor 🙂

  5. Muy bueno. Pero tengo un problema con un caso concreto.
    No me funciona cuando el cuadro combinado de cliente, permite seleccionar mas de una seleccion. Entonces al cambiar los cuadros combinados precedentes me da error. Como podria corregirlo? gracias

    1. Estimado amigo, el procedimiento descrito es este artículo no admite selección múltiple pero lo tendré en cuenta para realizar un nuevo artículo que lo incluya.
      Un saludo.

  6. Hola tu explicación es muy buena, pero tengo un problema en particular y trate de poner en practica lo explicado y no funciono, espero que me puedas ayudar.
    yo tengo un Formulario llamado Compras y dentro de el tengo un control de pestañas (control de ficha) y es hay donde tengo los cuadros combinados (Categoría y Articulo) al poner en practica lo explicado no funciona como se espera, te agradezco mucho me puedas ayudar.

    Gracias

    1. Hola Raul, en principio el hecho de colocar los cuadros combinados dentro de un control de pestañas no interfiere en nada sobre su funcionamiento por lo que el problema seguramente lo tendrás por otro lado pero con la información que me das no sabría exactamente donde. ¿Que es lo que no funciona? ¿Te devuelve algún error?

      1. Como estas @docebit, tu respuesta me valió mucho al decirme que un control de pestañas no interfieren en nada, me hizo comenzar de nuevo y pude darme cuenta donde estaba el error y ya lo corregí era a la hora de usar el generador de consultas.
        hay veces que una pequeña aclaración puede cambiar la forma de ver las cosas gracias por todo, seguiré aprendiendo mas sobre access y si tengo dudas te pido como un gran favor que me sigas ayudando

  7. Hola @docebit,

    Primero muchas gracias por el post, porque es justo lo que buscaba. Hace tiempo que lo publicaste, pero quería saber si me podías ayudar con un problemita que me encuentro. Hasta ahora se supone que he seguido al pie de la letra todos tu pasos, pero en el ultimo de actualizar me falla.

    He hecho lo de la consulta y cuando vuelvo al formulario pues como bien explicaste no funciona. Así que sigo el paso siguiente de actualizar pero por mucho que ponga el código, adptando los nombres de mis cuadros combinados, me sigue sin funcionar. Puedo seleccionar una opcion del primer cuadro pero cuando voy al segundo el desplegable se queda en blanco y no me aparecen las opciones.

    ¿Alguna idea de lo que puedo estar haciendo mal?

    Gracias de antemano

    1. Es difícil darte solución sin ver lo que has hecho, aunque hayas seguido los pasos correctamente, indudablemente algo estás haciendo mal pero tendría que ver el ejemplo, o dame algún detalle más del código que has puesto en los combos o las consultas.

      1. A ver si te explico:

        1er cuadro combinado para tipo de producto, se llama Cuadro_combinado5
        2º cuadro combinado para modelo, se llama Cuadro_combinado9
        Mi formulario se llama «consumibles»

        Primero le he puesto lo siguiente al cuadro combinado 9 en la consulta:
        [Formularios]![consumibles]![Cuadro_combinado5]

        Luego al segundo le he puesto el siguiente código:

        Private Sub Cuadro_combinado5_AfterUpdate()
        Me.Cuadro_combinado9.Requery
        End Sub

        espero que te sea de ayuda, voy a ver si tengo algun error en la consulta. Si necesitas otros detalles dimelo.

        1. Ya sabemos algo más, pero insuficiente aún, deberías de analizar las consultas de ambos y, tener en cuenta el campo Id que estás usando en las consultas, esto es, si cabe, lo más importante.

  8. Mil gracias.

    En otros sitios recomendaban usar la función Me.Refresh dentro del evento onClick y solo hacia que dar problemas, sin embargo haciéndolo tal y como explicas funciona perfecto!

    Saludos!

  9. Simplemente agradecerte por esta forma tan fácil de explicar. Me ayudaste mucho, te estoy muy agradecido. Saludos!

  10. Si tengo 2 cuadros combinados, uno dependiente del otro, dentro de una grilla de un subformulario, al modificarse la consulta del segundo cuadro combinado todos los valores del mismo combo en grillas anteriores desaparecen (ya que les cambia la consulta también). Me gustaría saber si hay una solución a esto o directamente no es posible.

  11. Hola, Excelente post, Duda aclarada. Pero tengo otra.

    Tengo un formulario en vista de Hoja de datos. cada que agrego un registro nuevo y selecciono una nueva «categoria», la casilla «articulos» de los registros anteriores se ponen en blanco. Alguna idea?

    Muchas gracias!

      1. Me pasa igual que los compañeros anteriores. Tengo dos cuadros combinados en cascada perfectos en un formulario, en el cuadro combinado categoria seleccionas una y en el segundo cuadro combinado productos solo te salen los productos de esa categoria, hasta ahí bien. Pero en un formulario con varios registros voy metiendo y se me borran los datos de los cuadros combinados de los productos se queda el campo en blanco
        ), es muy raro. Me podrías ayudar? . Utilizo access 2000

        1. Este tipo de combos en cascada no funcionan bien en formularios continuos o de datos. Se deben utilizar en la vista «Un único formulario»

          1. Muchas gracias por la respuesta tan rápida, pero aún poniendolo como me dices sigue sin funcionar. He pensado poner el combo categorías en un formulario y dentro de ese formulario meter un subformulario que contenga el combo productos. A ver si así me sale, porque es la única manera de atajar el problema y sobre todo de plantearlo. Mil gracias!

  12. Hola, tengo un pequeño problema, en la primera parte mencionas que «Nótese que el campo IdCategoría está configurado como un cuadro de búsqueda que lee de la tabla Categorías y oculta el campo clave para que solo muestre el nombre de la categoría y no su número». Quiza es algo super basico, pero soy nuevo en esto de acces y no se como se hace. ¿Sería posible me explicaras eso please?
    Saludos

  13. Hola! Me gustaría felicitarte en primer lugar por el post, tengo que implementar cosas así y gracias a este post no he tenido ningún problema.
    ¿Sabes si sería posible realizar esto mismo en un subformulario? Pensaba que sería la misma lógica, pero no sé si es porque el subformulario va en formato «Hoja de Datos» o por alguna limitación que yo no conozca, pero no me funciona de esta manera.
    ¡Muchas gracias!

      1. Buenas, he probado también el otro formato «tabular» y tampoco funciona. ¿Habría alguna forma de hacer esta dinámica de campos combinados en cascada en la tabla? De esta forma, entiendo que el subformulario heredaría esa propiedad de selección. Gracias!

  14. Buenos días he tratado de usar tus ejemplos para filtrar una consulta de productos con tres cuadros combinados
    tengo access 2013
    ConsultaProductos ampliados:
    Id producto -numero
    Codigo-texto corto
    Nombre Producto- texto corto
    Precio-moneda
    categoria -texto corto
    marca – texo corto
    combos:
    combocategoria
    comboMarca
    combocodigo

    en eventos despues de actualizar combomarca
    aplico filtro Me.Filter = «[Proveedores.Compañía] = ‘» & Me.Cuadro_combinado_marcacategoria.Column(0) And «[Categorías.NombreCategoría]= ‘» & Me.Cuadro_combinado_marcacategoria.Column(1)
    pero me da error de sintaxis
    si aplico un solo me trabaja perfectamente
    el filtro para combo marca solo me filtra la marca pero no me trae la categoria

    por favor me puedes ayudar

    1. Me faltan datos para poder orientarte. Si quieres me puedes mandar el ejemplo, sólo con lo imprescindible, y le echo un vistazo.

      1. Buenas , agradeciendo tu repuesta dime como te hago llegar el ejemplo en RAR o como lo requieras

        mandame tu correo para enviartela

  15. Hola buenos dias.

    Primero muchas felicidades por tu informacion me ha salido correctamente. Pero tengo un problema. Tengo Casi igual la misma informacion en mi formulario. Solo que en artículos yo tengo vendedor y en categoría yo tengo agencia. Ya me funciona correctamente. Pero al momento de ver la tabla General que es la que contiene mi formulario. Los datos me los arroja con el id y no el nombre. Quisiera que me ayudaras. Realice los pasos que muestras.

  16. Me sirvió muy bien lo que explicarte… solo que al final en el editor de qódigos
    Private Sub Cuadro_combinado0_AfterUpdate()
    Me.Cuadro_combinado2.Requery
    End Sub

    esto no me funcionó pero lo que hice fue insertar un macro que actualizara y ese si me funcionó… jejeje… no se si con eeso es que hice esta bien o me dará problema en el futuro.

  17. Buenos días. Primero darte las gracias por tus explicaciones.
    He seguido tus pasos y me han funcionado perfectamente cuando veo el formulario, pero el problema es que he creado un Formulario de Navegación para que me haga de menus y dentro en una de las opciones he colocado mi formulario con los campos en cascada. El problema es que ahora ya no funciona, al entrar al formulario me sale una ventana emergente que me solicita que introduzca el valor de Formularios!Producto!Categoria.
    ¿No se puede utilizar dentro de un formulario de navegación? ¿Hay que modificar en la select del campo combinado 2 para que lo coja de otro sitio?
    Muchas gracias.

  18. Hola, Quisiera saber si en un cuadro combinado hay alguna forma para evitar que se muestren espacios en blanco al momento de seleccionar la lista. Gracias.

    Pd. Tengo Access 2013

  19. Hola gracias por la ayuda pero ami no me sale, me es muy lioso ya desde el inicio los nombres de los cuadros «Cuadro_combinado0, Cuadro_combinado2» seria de ayuda que los nombres de los cuadros hicieran referencia a lo que van a mostrar por ejemplo Cuadro_articulos, Cuadro_categorias, ¿Porque necesitas dos tablas? la tabla Categorías tiene valores duplicados esos valores ya están en la tabla Artículos, entiendo que es para que no salgan valores duplicados, convendría aclararlo.

    Otra duda es porque necesitamos el campo IdArticulos y IdCategorias, en el Cuadro Categorías solo necesitamos los valores que están en la columna Categorías, y el Cuadro Artículos necesitamos campo Categoría que el que nos va a filtrar los Artículos y lo hacemos invisible 0cm (corrígeme si me equivoco por favor)

    Después de probar de todo no consigo que me muestre valores el segundo cuadro me lo muestra en blanco, Gracias por el tutorial aunque no haya sido capaz de lograrlo un saludo.

  20. Saludos a todos.

    Tengo Office 2013 y seguí los pasos tal y como están, cuando hago la consulta me manda el mensaje de que datos deseo mostrar los tecleo y me salen, pero cuando lo hago por medio el formulario principal no me muestra nada,en la parte de abajo me dice»calculando…» me supongo que si esta haciendo la consulta, pero no me la esta mostrando en pantalla, que hago ?

  21. Hola otra vez. Tengo el siguiente inconveniente:
    -Tengo una tabla Marcas con un c clave autonumérico y otro campo Nombre
    -Una tabla Productos con un campo enlazado como cuadro combinado al campo clave de la tabla Marcas, pero ocultando este y mostrando solo el campo Nombre
    – Un formulario (de búsqueda) con un Cuadro de Lista cuyo origen de datos son algunos campos de la tabla Productos, incluyendo el enlazado a la tabla Marcas. El problema es que se muestra el valor del campo clave (autonumérico) en lugar del valor del campo Nombre, lo cual es nada práctico. ¿Hay alguna manera de revertir esto haciendo que se muesrte el nombre de la marca en lugar del código??
    Gracias

  22. Hola…excelente tutorial, pero cómo hacer para 3 o más cuadros combinados? Del tipo: el último depende del anterior y así hasta el primero? Te doy un ejemplo como este que pusiste: En vez de tener solo 2 niveles (Artículo y Categoría) tendría 4 -> Artículo, Categoría, Sección (Informática, Vestuario, Alimentación, etc) y Tienda (Centro, Filial 1, Filial 2, etc).

    ¿Cómo podríamos hacer?

    Agradezco mucho tu contestación, ya que dependo de tu respuesta….

  23. hola buen día

    realice el ejemplo de «Cuadros combinados en cascada» y el resultado es el mejor … pero requiero de tu ayuda, ya que en el informe solo me arroja los códigos de «IdArticulo» y «IdCategoria», y no los nombres como «Monitor Sansung 22″» y «Monitores».

    que debo hacer para que en el informe me aparezcan el texto y los los ID.

    muchas gracias por tu tutorial

  24. Hola!!! gracias por la ayuda que das a todos.
    Mi problema es que tengo un formulario de ingreso de datos a una tabla con cuatro combinaciones de cuadros combinados de a dos, es decir cuatro pares de cuadros combinados en cascada. Los datos me los muestra perfectamente, pero cuando paso a próximo registro se me borran los datos que ingresé en el anterior, no en la tabla sino en los cuadros combinados. Gracias por tu ayuda

  25. Me ha costado pero lo he conseguido.
    No sabes cuánto te lo agradezco porque llevaba intentándolo mucho tiempo.
    Muchas gracias.

  26. excelente tu ayuda, hace comprender muchas cosas que tratamos de hacer sin conseguirlo, pero con tus enseñanzas nos queda muy claro, ahora bien con una consulta, tengo dos cuadros combinados, ccb1 y ccb2, que utilizan la misma tabla, que tendria que cambiar de tu codigo vba para que pueda ser utilizado con mi tabla?

  27. Buenos días, me sirvió muy bien el tutorial, esta bastante claro, aunque supongo que en algún punto hice algo mal ya que cuando elijo una de las opciones que me despliega mi segundo cuadro combinado y quiero cambiar de esta selección a otra, no me lo permite, intentare ser un poco más especifico, tengo dos tablas, la primera contiene el nombre de los estados de la republica y la segunda contiene el nombre de las delegaciones; si por ejemplo selecciono Aguascalientes en el cuadro combinado 1, el cuadro combinado 2 me despliega las subdelegaciones Aguascalientes Norte y Aguascalientes Sur, una vez que yo selecciono Aguascalientes Norte y deseo cambiar mi selección a Aguascalientes Sur en automatico me regresa a Aguascalientes Norte. Habrá alguna solución para esto??

  28. Gracias! Solucioné mi problema con las fechas de viaje mostradas en un Aeropuerto, de acuerdo con el destino de viaje.

  29. Hola.
    Muy interesante y sencillo, pero tengo un problema. Copio punto por punto el ejemplo que nos ha dado y no refresca si no le doy a F5. Al Crear las tablas he dado a IdArticulo y a Idcategoria como Texto de long. 5 (el IdArticulo la 1ª vez fue autonumerico) y campos clave y he hecho la relación entre ambas tablas, de 1:N pero al probar el formulario solo funciona la 1ª vez, el resto siempre saca al C.Comb. Artículos los correspondientes a la 1ª categoría seleccionada. Solo se actualiza al pulsar F5. He probado varios eventos, incluso haciendo Requery a cada campo y nada. Le agradecería una solución al problema que, a mi entender, es que el evento no se activa.

    Muchas gracias

  30. Sencillo y Genial!
    Tengo una cuestión: Si en tu ejemplo, algún Artículo no está vinculado a una Categoría, porque este campo está vacío en la tabla, no aparece en el listado. ¿podrían aparecer cuando se selecciona una Categoría, además de los artículos que le pertenecen, también aquellos articulos sin categoría?

    Gracias

  31. Hola, tengo un problema, al finalizar el proceso cuando selecciono una categoría me sale un cuadro que dice «digite el parametro» y si ahí escribo la categoria que acabo de seleccionar si me despliega los articulos. Pero como hago para que los articulos salgan inmediatamente despues de seleccionar la categoria ?

  32. Hola, realizo todo el proceso pero resulta que el valor numérico del primer combo box lo graba de forma numérica en la tabla y a mi me gustaría que grabara el texto. ¿Eso es posible?
    ¡Gracias!

  33. Gracias por tu tutorial. Está muy bueno, seguí los pasos tal y como se describen, pero no me actualizo el listado de artículo. Que puedo hacer o donde tendré mi error?

  34. Buen dia, me funciono. el unico detalle que me gustaria resolver es que al recorrer los registros en el formulario la informacion de esos campo no se visualiza. que hacer para solucionar esto???

  35. Ángel, me has alegrado El día, qué digo el día: LA SEMANA, no había forma de que esto funcionara.
    POR FIN UN EJEMPLO QUE FUNCIONA

    GRACIAS

  36. Aplique lo de los cuadros combinados para vinvcular Autonomías con provincias de forma que solo salen las provincias de esa autonomia pero cuando con el mismo sistema vinculo provincias con municipios este tercer nivel no me funciona.

Responder a JOSE HERNANDEZ Cancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.