image

Sabemos cómo crear un menú desplegable en cascada en una hoja de trabajo mediante la validación de datos. Pero, ¿cómo creamos un menú desplegable en cascada en el formulario de usuario de VBA? Ésta es una de las necesidades básicas. En este artículo, aprenderemos cómo crear un cuadro combinado dependiente en VBA. === Lógica para cuadro combinado dependiente en VBA Para crear un cuadro combinado dependiente en VBA, necesitamos inicializar el cuadro combinado en el evento del elemento fuente. Por ejemplo, si un cuadro combinado depende de un grupo de botones de opción, el código para cargar el cuadro combinado dependiente debe ejecutarse inmediatamente después de que alguien seleccione un botón de opción. O si un cuadro combinado depende de otro cuadro combinado, dependiendo del cuadro combinado, debería cargarse cada vez que se cambia el valor en el cuadro combinado.

Basta de teoría. Pasemos a un ejemplo para ver cómo funciona.

ComboBox dependiendo de otro cuadro combinado Cree dos cuadros combinados. Primero se deben enumerar algunos nombres de países.

El otro debe enumerar los nombres de los estados del país seleccionado. Si el usuario cambia el país en el primer cuadro combinado, se debe cambiar la lista del segundo cuadro combinado.

Creemos un formulario que tenga dos cuadros combinados con etiquetas de países y estados y un botón de comando para enviar la entrada.

image

El primer cuadro combinado debe incluir los nombres de los países y no depende de ningún valor. Así que lo cargaremos en el evento form_intialize como lo hacemos para la inicialización básica del cuadro combinado.

Haga doble clic en el formulario de usuario. Abrirá el área de codificación en UserForm Object. Ahora, en el menú desplegable de la izquierda, seleccione formulario de usuario. Luego, en el menú desplegable de la derecha, seleccione inicializar.

image

Se insertará un subnombre vacío UserForm_Initialize (). Todo lo escrito en este sub se ejecutará antes de que aparezca el formulario de usuario.

Entonces escribimos el código de inicialización para el cuadro combinado aquí.

Private Sub UserForm_Initialize()

countries = Array("India", "Nepal", "Bhutan", "Shree Lanka")

UserForm1.ComboBox1.List = states

End Sub

Tenemos nuestro primer cuadro combinado inicializado. Siempre que cargues el formulario de usuario, el primer combox estará listo con el nombre de los países.

Ahora, para cargar el segundo cuadro combinado, tenemos que ver qué valor se selecciona en el primer cuadro combinado1 y ejecutar el código cada vez que el cuadro combinado1 cambia sus valores. Para esto usaremos el evento Combobox_AfterUpdate.

En el menú desplegable de la izquierda, seleccione combobox1. En el menú desplegable de la derecha, seleccione AfterUpdate. También podemos usar el evento Change, pero nos ceñiremos a AfterUpdate en el artículo.

Ahora escribe el siguiente código:

Private Sub ComboBox1_AfterUpdate()

Select Case ComboBox1.Value

Case "India":

states = Array("Delhi", "UP", "UK", "Gujrat", "Kashmir")

Case "Nepal":

states = Array("Arun Kshetra", "Janakpur Kshetra", "Kathmandu Kshetra",_

"Gandak Kshetra", "Kapilavastu Kshetra")

Case "Bhutan":

states = Array("Bumthang", "Trongsa", "Punakha", "Thimphu", "Paro")

Case "Shree Lanka":

states = Array("Galle", "Ratnapura", "Colombo", "Badulla", "Jaffna")

End Select



ComboBox2.List = states



End Sub

image

Aquí hemos utilizado una declaración de caso selecto. La declaración de caso de selección es buena cuando queremos ver qué valor se elige entre muchos valores. Lo he explicado link: / general-topics-in-vba-vba-select-case-Alternative-of-nested-if-else-if-statement [aquí en detalle].

Para almacenar el valor insertado por el usuario use el botón enviar. Escriba el siguiente código en el botón de comando enviar para guardar el país y el estado seleccionados por el usuario en la hoja de trabajo.

Private Sub CommandButton1_Click()

country = ComboBox1.Value

State = ComboBox2.Value

ThisWorkbook.Worksheets("sheet1").Range("G1") = country

ThisWorkbook.Worksheets("sheet1").Range("H1") = State

Unload Me

End Sub

Ahora, para mostrar el formulario de usuario, inserte un botón en la hoja de trabajo y escriba el siguiente código. O puede usar un módulo simple para mostrar el formulario de usuario.

Sub load_userform()

UserForm1.Show

End Sub

Ahora ejecute el código load_userform.

image

¿Cómo funciona?

Cuando ejecuta el sub que tiene el código userform.show, el VBA ejecuta los eventos userform_initialize inmediatamente después de ejecutar el comando userform.show. En el evento userform_intialize hemos inicializado el primer cuadro combinado que tiene una lista de países. Posteriormente se muestra el formulario al usuario.

Ahora, cuando el usuario selecciona cualquier valor del primer cuadro combinado, se ejecuta el evento combobox1_AfterUpdate. Este evento contiene el código para verificar qué valor selecciona el usuario en combobox1 y, en base a ese valor, establece la matriz de estados e inicializa los valores de combobox2 con la matriz de estados.

Así que sí, chicos, así es como se crea un cuadro combinado en cascada en el formulario de usuario de VBA. Espero haber sido lo suficientemente explicativo y que el artículo cumplió su propósito. Si tiene alguna duda con respecto a este artículo o cualquier tema de VBA, pregúnteme en la sección de comentarios a continuación.

Artículos relacionados:

link: / applications-word-outlook-in-vba-Getting-started-with-excel-vba-userforms [Empezando con Excel VBA UserForms] | * Explicaré cómo crear un formulario en Excel, cómo usar Caja de herramientas de VBA, cómo manejar las entradas del usuario y finalmente cómo almacenar las entradas del usuario. Repasaremos estos temas usando un ejemplo y una guía paso a paso.

link: / general-topics-in-vba-vba-variables-in-excel [Variables de VBA en Excel] | * VBA significa Visual Basic para Aplicaciones.

Es un lenguaje de programación de Microsoft. Se utiliza con aplicaciones de Microsoft Office como MSExcel, MS-Word y MS-Access, mientras que las variables de VBA son palabras clave específicas.

link: / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope] | * En todos los lenguajes de programación, tenemos especificadores de acceso a variables que definen desde dónde se puede acceder a una variable definida. Excel VBA no es una excepción. VBA también tiene especificadores de alcance.

enlace: / celdas-rangos-filas-y-columnas-en-vba-cuál-es-la-diferencia-entre-byref-y-byval-argumentos-vba-entrevista-pregunta [ByRef y ByVal Argumentos] | Cuando se pasa un argumento como argumento ByRef a una función o sub diferente, se envía la referencia de la variable real. Cualquier cambio realizado en la copia de la variable se reflejará en el argumento original.

link: / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirm-prompts-using-vba-in-microsoft-excel [Eliminar hojas sin mensajes de confirmación usando VBA en Microsoft Excel] | Dado que está eliminando hojas usando VBA, sabe lo que está haciendo.

Le gustaría decirle a Excel que no muestre esta advertencia y elimine la maldita hoja.

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Add And Save New Workbook Using VBA In Microsoft Excel 2016] | En este código, primero creamos una referencia a un objeto de libro de trabajo. Y luego lo inicializamos con un nuevo objeto de libro de trabajo. El beneficio de este enfoque es que puede realizar operaciones en este nuevo libro de trabajo fácilmente. Como guardar, cerrar, eliminar, etc `link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On La barra de estado de Excel VBA *] `| La barra de estado en Excel se puede utilizar como monitor de código. Cuando su código VBA es extenso y realiza varias tareas usando VBA, a menudo deshabilita la actualización de la pantalla para que no vea que la pantalla parpadea.

link: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Desactivar mensajes de advertencia usando VBA en Microsoft Excel 2016] | * Este código no solo deshabilita VBA alertas, sino que también aumenta la eficiencia del tiempo del código. Veamos cómo.

Artículos populares:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-incrementa-your-productividad [50 accesos directos de Excel para aumentar su productividad] | Acelera tu tarea. Estos 50 atajos le permitirán trabajar aún más rápido en Excel.

link: / fórmulas-y-funciones-introducción-de-vlookup-function [La función VLOOKUP en Excel] | Esta es una de las funciones más utilizadas y populares de Excel que se utiliza para buscar valores de diferentes rangos y hojas. enlace: / tips-countif-in-microsoft-excel [COUNTIF en Excel 2016] | Cuente valores con condiciones usando esta asombrosa función. No necesita filtrar sus datos para contar valores específicos.

La función Countif es esencial para preparar su tablero.

link: / excel-formula-and-function-excel-sumif-function [Cómo usar la función SUMIF en Excel] | Esta es otra función esencial del tablero. Esto le ayuda a resumir valores en condiciones específicas.