Excel Avanzado

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

Excel Avanzado
Formularios VBA y Listbox

Formularios VBA – Uso y propiedades del ListBox

| 11 Comments

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.

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

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.

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.

Elaborado por: Sandro Calzada

11 Comments

  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…

  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.

Deja un comentario

Required fields are marked *.


Excel Avanzado located at , Lima, Perú . Reviewed by usuarios rated: 4.7 / 5