VBA: cómo crear un cuadro combinado en cascada en un formulario de usuario

VBA: cómo crear un cuadro combinado en cascada en un formulario de usuario

Introducción

En este artículo, aprenderá cómo llenar un cuadro combinado en cascada usando el método Indirecto.

Prerrequisitos

  • 1 cuaderno de ejercicios
  • 1 formulario de usuario
  • 3 combobox.

También puede descargar un libro de muestra aquí: //cjoint.com/14au/DHhootCLYVh.htm

Gestionar nombres bajo Excel

Para definir nombres en un libro de Excel, puede:
  • Excel 2007 o versión anterior: Insertar> Nombres> Definir .
  • A partir de Excel 2010: Fórmulas de cinta> Definir un nombre.

El código para el combobox.

Queremos que suceda lo siguiente:
  • Al cargar el formulario de usuario, se llenará el ComboBox1.
  • Los otros cuadros combinados se rellenarán en función de los valores del primero.

Llenando la primera lista

Para llenar un cuadro combinado con el contenido de un rango con nombre del libro de trabajo, la sintaxis es:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

Para borrar el ComboBox:

  • Combobox1.Clear

Lo que nos da el código para completar la primera lista desplegable en la carga del UserForm:

 Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

Llenando la 2da lista

Cuando se selecciona un valor en la primera lista desplegable, se corresponderá (el texto que se muestra en el ComboBox) a un nombre de libro de trabajo.

Para mostrar el contenido de las celdas del rango nombrado, usaremos el evento Change:

 Private Sub ComboBox1_Change () 'Combobox département Evite el error generado cuando un usuario borra el contenido de ComboBox1 Si ComboBox1.Value = "" Luego salga de Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End Sub 

Para el tercer cuadro combinado:

 Private Sub ComboBox2_Change () 'Combobox communes Si ComboBox2.Value = "" Entonces salga de Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Errores comunes

Rango sin nombre

El nombre ingresado en el ComboBox no coincidirá con ningún nombre de libro de trabajo. Esto sucede cuando el nombre no ha sido definido. Para evitar este problema, crearemos una pequeña función para recorrer todos los nombres del libro de trabajo:

 Función NomDefini (Nom As String) Como Boolean Dim Noms Como nombre NomDefini = Falso para cada Noms en ThisWorkbook.Names Si Noms.Name = Nom Entonces NomDefini = Verdadero: Función de salida Siguiente Noms Función de fin 

Error de entrada

Como notará en el archivo de muestra, la definición de nombres no tiene en cuenta los caracteres especiales o los espacios. En algunas situaciones, puede que necesite editar las variables:

Aquí hay un ejemplo:

 Función CaracSpec (Nom As String) como cadena CaracSpec = Replace (Nom, "", "_") CaracSpec = Replace (CaracSpec, "-", "_") End Function 

El codigo completado

 Option Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département If ComboBox1.Value = "Then Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange como cadena NomRange = CaracSpec (ComboBox1.Value) Si NomDefini (NomRange) Entonces ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" Auc " Comandos finales Comb ComboBox2_Change () 'Combobox si ComboBox2.Value = "" Finalizar Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) If NomDefini (NomRange) Then ComboBox3.List = (Rango (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "" End If End Sub Función NomDefini (Nom As String) Como Boolean Dim Noms Como nombre NomDefini = Falso para cada Noms en este libro de trabajo. Nom Then NomDefini = True: Salir Función Next Noms End Function Función Carac Spec (Nom As String) como String CaracSpec = Replace (Nom, "", "_") CaracSpec = Replace (CaracSpec, "-", "_") Función final 

Enlace de descarga

Descargue la hoja de muestra en este enlace: //cjoint.com/?DHhootCLYVh

VBA: cómo crear un cuadro combinado en cascada en un formulario de usuario

Introducción

En este artículo, aprenderá cómo llenar un cuadro combinado en cascada usando el método Indirecto.

Prerrequisitos

  • 1 cuaderno de ejercicios
  • 1 formulario de usuario
  • 3 combobox.

También puede descargar un libro de muestra aquí: //cjoint.com/14au/DHhootCLYVh.htm

Gestionar nombres bajo Excel

Para definir nombres en un libro de Excel, puede:
  • Excel 2007 o versión anterior: Insertar> Nombres> Definir.
  • A partir de Excel 2010: Fórmulas de la cinta de opciones> Definir un nombre.

El código para el combobox.

Queremos que suceda lo siguiente:
  • Al cargar el formulario de usuario, se llenará el ComboBox1.
  • Los otros cuadros combinados se rellenarán en función de los valores del primero.

Llenando la primera lista

Para llenar un cuadro combinado con el contenido de un rango con nombre del libro de trabajo, la sintaxis es:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

Para borrar el ComboBox:

  • Combobox1.Clear

Lo que nos da el código para completar la primera lista desplegable en la carga del UserForm:

 Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

Llenando la 2da lista

Cuando se selecciona un valor en la primera lista desplegable, este (el texto que se muestra en el ComboBox) corresponde a un nombre de libro de trabajo.

Para mostrar el contenido de las celdas del rango nombrado, usaremos el evento Change:

 Private Sub ComboBox1_Change () 'Combobox département Evite el error generado cuando un usuario borra el contenido de ComboBox1 Si ComboBox1.Value = "" Luego salga de Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End Sub 

Para el tercer cuadro combinado:

 Private Sub ComboBox2_Change () 'Combobox communes Si ComboBox2.Value = "" Entonces salga de Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Errores comunes

Rango sin nombre

El nombre ingresado en el ComboBox no coincide con ningún nombre de libro de trabajo porque aún no se ha definido. Para evitar este problema, crearemos una pequeña función. Sus

El rol es recorrer todos los nombres del libro de trabajo:

 Función NomDefini (Nom As String) Como Boolean Dim Noms Como nombre NomDefini = Falso para cada Noms en ThisWorkbook.Names Si Noms.Name = Nom Entonces NomDefini = Verdadero: Función de salida Siguiente Noms Función de fin 

Error de entrada

Como notará en el archivo de muestra, la definición de nombres no tiene en cuenta los caracteres especiales o los espacios. En algunas situaciones, puede que necesite editar la variable:

Aquí hay un ejemplo:

 Función CaracSpec (Nom As String) como cadena CaracSpec = Replace (Nom, "", "_") CaracSpec = Replace (CaracSpec, "-", "_") End Function 

El codigo completado

 Option Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département If ComboBox1.Value = "Then Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange como cadena NomRange = CaracSpec (ComboBox1.Value) Si NomDefini (NomRange) Entonces ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" Auc " Comandos finales Comb ComboBox2_Change () 'Combobox si ComboBox2.Value = "" Finalizar Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) If NomDefini (NomRange) Then ComboBox3.List = (Rango (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "" End If End Sub Función NomDefini (Nom As String) Como Boolean Dim Noms Como nombre NomDefini = Falso para cada Noms en este libro de trabajo. Nom Then NomDefini = True: Salir Función Next Noms End Function Función Carac Spec (Nom As String) como String CaracSpec = Replace (Nom, "", "_") CaracSpec = Replace (CaracSpec, "-", "_") Función final 

Enlace de descarga

Descargue la hoja de muestra en este enlace: //cjoint.com/?DHhootCLYVh
Artículo Anterior Artículo Siguiente

Los Mejores Consejos