Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Formularios VBA - Uso y propiedades del ListBox

| 25 comentarios

El cuadro de lista o ListBox muestra una serie de valores con o sin una barra de desplazamiento y el usuario puede seleccionar uno o más de estos.

Propiedades del ListBox

BoundColumn: Dentro de un ListBox pueden desplegarse más de una columna de datos a la vez así como más de una fila. Cuando se establece el valor del BoundColumn este determinará la columna que se devuelve como el valor actual del ListBox. Digamos que tenemos un ListBox con tres columnas y 10 filas de datos. Si fijamos el BoundColumn en 2 y luego seleccionamos la quinta fila, el valor actual de la lista sería lo que está en la fila 5 - Columna 3. La razón es que sería la columna 3 y no la columna 2, porque la primera columna es siempre cero.

ColumnCount: Aquí es donde podemos establecer el número de columnas que serán mostradas. Fijar este valor en cero significa que ninguna columna será desplegada. Para mostrar todas las columnas se pude fijar este valor en -1.

RowSource:  Es la localización a la que se encuentran enlazados los datos, por ejemplo, una celda en una hoja de cálculo. El valor actual de la fuente de los datos puede ser almacenado en la propiedad Value de un control. Sin embargo, el control no almacena los datos, sino que sólo muestra la información que se almacena en la fuente de datos.

ColumnHeads:  Esta condición puede ser verdadera o falsa. Si se establece en TRUE utilizará la primera fila de los datos como los encabezados de las columnas en el ListBox.

ColumnWidth:  Determina el ancho que cada columna utilizará, los valores deben estar separados por ";" y deben estar expresados en unidades como cadenas de texto.

  • 6 cm; 7 cm; 6 cm
  • 1.5 in; 0.8; 2.5 in
  • blank (Por defecto todas la columnas tendrán el mismo ancho)

ListStyle:  Esta propiedad determina la forma en la que la lista se verá. Hay sólo dos opciones, fmListStylePlain o fmListStyleOption. La primera es el valor por defecto y no tiene ningún efecto visual real. La segunda pondrá pequeños círculos a la derecha de cada elemento en el control ListBox que se selecciona al comprobar que el usuario ha hecho clic en el elemento.

MatchEntry: Esta propiedad se utiliza para ayudar al usuario en la búsqueda de un determinado elemento de la lista. Entra en vigor cuando el usuario empieza a escribir.

  • fmMatchEntryFirstLetter (0): Coincidencia básica. Se busca la siguiente entrada que comienza con el carácter introducido. Escribir repetidamente la misma letra avanzará sobre todas las entradas que comienzan con ella.
  • FmMatchEntryComplete (1): Concordancia ampliada. A medida que cada caracter  es ingresado se buscan todas las palabras que coincidan con estos.
  • FmMatchEntryNone (2): Sin concordancia.
MultiSelect: Esto determina si el usuario puede seleccionar más de un artículo en el ListBox.
  •  fmMultiSelectSingle(0): Sólo un ítem puede ser seleccionado.
  • fmMultiSelectMulti(1): Presionar la barra espaciadora o hacer clic selecciona o anula la selección de un ítem
  • fmMultiSelectExtended(2):  Al pulsar SHIFT y hacer clic con el ratón o pulsando la tecla SHIFT y una de las teclas de flecha, se extiende la selección desde el elemento seleccionado anteriormente hasta el elemento actual. Al presionar la tecla CTRL y hacer clic con el ratón se selecciona o anula la selección de un elemento.

TopIndex: Fija y/o devuelve el ítem que aparecerá en la parte superior de la lista. Así que si se tienen 10 filas, al establecer TopIndex en 5 el usuario sólo podrá ver las últimas 6 filas.

Aplicación:

Lo primero que debemos hacer es crear un nuevo UserForm y agregamos 3 cuadros de texto, un botón y por supuesto un ListView.

form11 300x175 Formularios VBA - Uso y propiedades del ListBox

Enseguida ingresamos algunos datos en algunas de las hojas vacías de nuestro libro como se muestra a continuación.

form21 300x181 Formularios VBA - Uso y propiedades del ListBox

En las propiedades del ListBox debemos asegurarnos de fijar el ColumnCount en 3 debido a que tenemos tres columnas de datos que queremos mostrar. Y por últimos el RowSource lo alimentamos con la dirección en la que se encuentra nuestra tabla de datos en este caso debemos ingresar el valor "Hoja2!A2:C9". Por último programamos nuestro formulario de la siguiente forma.
form3 300x170 Formularios VBA - Uso y propiedades del ListBox

Ahora probamos el ListBox. Al hacer clic en el botón guardar luego de seleccionar una fila aparece un aviso que nos recuerda la elección.

form4 300x226 Formularios VBA - Uso y propiedades del ListBox

Elaborado por: Sandro Calzada

25 comentarios

  1. No se como poner una barra de desplazamiento para un formulario excel, tiene moton de texbos pero quedo medio grande y cabe en la pantalla, no lo puedo hacer mas pequeño porque ese el tamaño de la hoja

  2. Hola amigo... Mira, no se como cargar los datos de varios textbox (4) que tengo en un form que viene de un form en particular... (Factura => Ventas) ya tengo los datos provenientes desde Excel y no los puedo cargar en el Lisbox correspondiente, los cuales tambien son 4.
    Agradeceria enormemente vuestra ayuda. Saludos, Fernando.

  3. Buenos días... hace tiempo que tengo un problema relacionado con un listbox y será de gran ayuda si alguien pede tenderme una mano, desde ya muchas gracias.
    Paso a explicarlo, dentro de un listbox corre un evento Click que dispara un msgbox, lo que necesito es, una vez dado el aceptar del msgbox se DESELECCIONE el ítem previamente cliqueado del listbox.
    Es esto posible?

    espero su pronta respuesta...

    • Solo basta escribir me.listbox1.listindex=-1

  4. En la versión en que estoy probando (Excel 2010 pero en archivo xls (2003)) no encuentro la propiedad RowSource, aunque sí LinkedCell y ListFillRange.
    ¿Alguna de ellas es equivalente?

    Gracias.

    • la propiedad rowsource no aparece en la hoja excel dl 2003 pero si aparece en las propiedades del control en el editor vb.. a mi tampoco me aparecia y se me ocurrió buscarlo ahi y lo encontre..

  5. Buenas noches
    Tengo el inconvenientes con el siguiente código que es para actualizar un listBox o la información que se mostrara en este!! pero dicho código solo me funciona cuando el listBox se encuentra en la misma hoja donde se encuentra la información y necesito que me funcione desde otra hoja diferente.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    With ComboBox1
    .Value = ""
    .ListFillRange = "=MiLista"
    End With
    End If
    End Sub

    Gracias y espero me puedan ayudar.

  6. En este mismo formulario expuesto quisiera saber como puedo agregar modificar y eliminar ya que se me haria mas facil ver el registro en el listbox y poder hacer algunas actualizaciones.Saludos

  7. Tengo una tabla en excel a la cual desde el formulario quiero que el dato que ingrese se me actualice, por los momentos la informaci[on no me aparece en la tabla, solo me aparece cuando cierro el formulario.

    Como hacer para que desde el mismo formulario me actualice la tabla con toda la información incluyendo el nuevo archivo ?

    • estoy un poco atorada, necesito que en la listbox solo aparezcan algunos ítems por medio de la relación con un textbox pero no lo logro ... me podrían ayudar? es VB 6 gracias
      Private Sub txtrango_Change()
      If txtrango = 1 Then
      MsgBox "No es necesario ver Consulta"
      ElseIf txtrango >= 1 Then
      Unload Me
      If txtrango = 2 Then
      List1.Selected ("CNBV- SIARA")
      List1.Selected ("Registro vehicular (Entidades Federativas)")
      End If
      End Sub

  8. como puedo solucionar este mensaje al querer utilizar el RowSource :
    "No se puede configurar la propiedad RowSource. Valor de la propiedad no válido"

  9. hola
    Necesito que al seleccionar un registro en una listbox, habra un formulario con el id de ese registro, dicho nuevo formulario mostraría todos los datos del registro para su modificación.

  10. hola tengo un inconveniente necesito que me muestre celdas varias ejemplo

    a1; b1; d1;e1;g1;l1

    pero no se como poner el saldo de columna
    ayuda porfavor

  11. ¿cual es el código VBA para trasladas los datos seleccionados de un listbox multi select (2 o mas columnas de datos) a otro listbox de 2 o mas columnas. Ambos Listbox se encuentran en el mismo formulario

  12. Excelente brother!!

    Buen aporte.

  13. Excelente página! Me ayudó bastante. Gracias por tu gran trabajo!

  14. Buen día. Intento utilizar en una tabla de excel un UserForm en el que aparecen varios Listbox en los que quiero cargar datos que luego se graben en la tabla, pero al correr el Userform los Listbox no se habilitan, es decir no me permite escribir en ellos. La propiedad Enabled por defecto la establece en True. Como puedo configurar las propiedades para que me permita escribir en los ListBox?

    • Los ListBox sólo muestran datos ingresados de varias formas distintas, menos escribiendo directamente en ellos, Pues no tienen la propiedad Caption o Value
      En todo caso, creo que lo que necesitas son TextBox

  15. Hola,
    Tengo un problema, elaboro un listbox de una hoja completa y no tengo problema con la cantidad de columnas(74), cuando hago programe un filtro para emitir algunos registros solo obtengo 10 columnas, he probado colocando el liscount en -1 o con el numero total de columnas(74) pero no funciona,
    Podrian por favor ayudarme.
    Gracias.

    • Hola Marvin,

      Si, puedes cargar las 74 columnas de la tabla con la propiedad .RowSource, pero tendria que ver el codigo que utilizas para hacer el filtro, ps debido a la tipo de RowSource te permite una cantidad limitada de columnas en el Listbox.

      Saludos.

  16. ¡Feliz Día!

    ¿cómo puedo indicarle al listbox que me muestre determinadas columnas intercaladas? Es decir, que muestre las columnas "A"; "E" y "F"?

    Gracias!

  17. Las columnas que no deben ser mostradas simplemente dales un ancho de 0 (cero). Por ejemplo: 40;0;50;0;60;0;70
    Aquí vemos las columnas intercaladas

  18. Buenas noches! necesito ayuda con un listbox el cual no me permite seleccionar items que no estan a la vista sin desplazar el scroll, al momento de dar click a un item despues de desplazar el scroll, automaticamente me aparece otro item de la lista que si se alcanza a ver inicialmente sin desplazar el scroll. No se si me de a entender. De antemano gracias por la ayuda que me puedan brindar, saludos!

  19. Saludos como puedo hacer para bajar/subir con el scroll del mouse en las ListBox

  20. Saludos amigos necesito ayuda, como hago para los datos de la primera fila de la tabla no aparezcan en el ListBox, y si aparece que no puedan modificarse, ni eliminarse. Muchas gracias

Deja una respuesta

Los campos requeridos estan marcados con *.