Selección de varios valores de cuadro de lista mediante VBA en Microsoft Excel
En este artículo, aprenderemos cómo crear un cuadro de lista en el que podemos seleccionar varios nombres y obtener los datos requeridos de los datos principales.
Comprendamos con un simple ejercicio: – Hemos tomado datos en los que tenemos detalles de identificación de correo electrónico para cada empleado.
Siga los pasos que se indican a continuación para crear el cuadro de lista que proporciona la opción de selección de múltiples opciones usando el código VBA: –
Insertar cuadro de lista
Para insertar el Cuadro de lista en la hoja de Excel, vaya a la pestaña Desarrollador> Haga clic en Insertar> y luego haga clic en el botón Cuadro de lista en Control ActiveX
En la pestaña Desarrollador, haga clic en Modo de diseño para activar el diseño, luego haga clic en Propiedades en la pestaña Desarrollador, aparecerá el cuadro de diálogo Propiedades.
Seleccione el cuadro Lista, luego vaya al cuadro de diálogo Propiedades. Haga clic en la pestaña Categorizado. Bajo el encabezado Misc, vaya a la propiedad ListFillRange y asigne el rango que contiene los valores para el Cuadro de lista.
Bajo el encabezado Behavior, cambie la propiedad Multiselect a 1-fmMultiSelectMulti
Ahora, inserte dos botones de comando en la hoja de Excel, vaya a la pestaña Desarrollador> Haga clic en Insertar> y luego haga clic en el icono de Botón debajo de Control de formulario
Haga clic con el botón derecho en el botón y seleccione Editar propiedad de texto y cambie el nombre de los dos botones como «Deseleccionar nombres» y «Enviar».
Presione la tecla Alt + F11 para abrir el Editor de Visual Basic Agregar nuevo módulo e inserte el siguiente código en el módulo.
«Codificación El código anterior contiene dos procedimientos GettingSelectedItems y UnselectedItems. Asigne el procedimiento GettingSelectedItems al botón Enviar y el procedimiento UnselectedItems al botón Deseleccionar nombres.
Después de asignar el procedimiento, desactive el modo de diseño haciendo clic en el botón de modo de diseño en la pestaña Desarrollador.
Explicación lógica
En este ejemplo, nuestro objetivo es obtener la identificación de correo electrónico del nombre seleccionado por el usuario en la columna List Box to L.
El usuario puede seleccionar varios nombres en el cuadro de lista. Después de seleccionar los nombres, el usuario presionará el botón enviar y la identificación de correo electrónico correspondiente al nombre seleccionado en el cuadro de lista aparecerá en la columna L en la hoja de Excel.
Si el usuario desea deseleccionar todos los nombres seleccionados en el cuadro de lista, el usuario puede hacer clic en el botón «Deseleccionar nombres».
Para lograr el objetivo anterior, hemos utilizado la fórmula y el procedimiento de Excel.
El procedimiento GettingSelectedItems está escrito para obtener el nombre seleccionado del List Box en el rango de K10 a K23.
Para obtener la identificación de correo electrónico para el nombre seleccionado, hemos utilizado la siguiente fórmula de Excel: – = IFERROR (VLOOKUP (K10, $ A $ 10: $ B $ 23,2,0), «»)
Inserte la fórmula anterior en la celda L10 y copie y pegue esta fórmula en el rango L10 a L23.
Esta fórmula proporcionará la identificación de correo electrónico buscando el nombre seleccionado en el rango A10 a B23.
Hemos ocultado los valores en el rango K10 a K23 usando el mismo color para la fuente y el fondo de la celda.
Siga el código a continuación
Option Explicit Sub GettingSelectedItems() 'Getting selected items in ListBox1 Application.ScreenUpdating = False 'Declaring varialbes Dim ValueSelected As String, i, r As Integer 'deleting selected values Range("K10:K23").Select Selection.ClearContents 'Defining listbox1 of sheet TestDialog With Sheets("TestDialog").ListBox1 r = 0 'Using For loop for looping through all the items in List Box For i = 0 To .ListCount - 1 'Using .selected for selecting only those value which is selected by user in listbox If .Selected(i) Then 'Assigning selected value of List Box to Column K on the sheet Cells(r + 10, 11).Value = .List(i) r = r + 1 End If Next i End With Range("L10").Select End Sub Sub UnselectedItems() 'Unselecting all the items in the list box Application.ScreenUpdating = False 'Declaring varialbes Dim ValueSelected As String, i As Integer 'Defining listbox1 of sheet TestDialog With Sheets("TestDialog").ListBox1 'Using For loop for looping through all the items in List Box For i = 0 To .ListCount - 1 'Unselecting all the items in the list .Selected(i) = False Next i End With 'Deleting data from range K10 to K23 Range("K10:K23").Select Selection.ClearContents Range("L10").Select End Sub
Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.
Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]