martes, 9 de junio de 2015

VBA: Recuperar un dato de un elemento seleccionado de un ListBox.

Es muy frecuente me llegue un pregunta parecida a esta:
Si tengo un Listbox en un Userform cargado desde una tabla de Excel con varias columnas, ¿cómo capturo el dato de una celda específica de la fila seleccionada?


El asunto se puede resolver de diferentes maneras.. pero hoy contaré una muy sencilla empleando la propiedad .Column del control ListBox.

Veámoslo con un ejemplo. Partiremos de la siguiente Tabla en nuestra hoja de cálculo (llamada 'Tabla1'):

VBA: Recuperar un dato de un elemento seleccionado de un ListBox.



A continuación construiremos nuestro UserForm (formulario de usuario) desde nuestro Editor de VB.
Constará de:
1- un Cuadro de lista/ListBox:= ListBox1
2- tres cajas de texto/TextBox:= TxtCodigo, TxtUnidades y TxtImporte
3- tres etiquetas/labels:= label1, label2 y label3:

VBA: Recuperar un dato de un elemento seleccionado de un ListBox.



Terminamos la parte del diseño definiendo las propiedades del ListBox1:
.RowSource = Tabla1
.ColumnCount = 3
.ColumnHeads = True
.Column.Widths40 = 40 pt;49,95 pt;49,95 pt

VBA: Recuperar un dato de un elemento seleccionado de un ListBox.



Ya estamos en disposición de incorporar el código necesario...
Para ello insertamos el código asociándolo a nuestro UserForm de nuestro proyecto de VBA desde el editor de VB.
Es un sencillo evento Click vinculado al ListBox

Private Sub ListBox1_Click()
 
'si hemos seleccionado algún item...
If ListBox1.ListIndex <> -1 Then
    Me.TxtCodigo.Value = ListBox1.Column(0)     'tomamos el dato del primer campo
    Me.TxtUnidades.Value = ListBox1.Column(1)   'tomamos el dato del segundo campo
    Me.TxtImporte.Value = ListBox1.Column(2)    'tomamos el dato del tercer campo
End If

End Sub



Lo que hemos conseguido es mostrar en los TextBox el valor de cada columna/campo del elemento seleccionado mediante el empleo de la propiedad .Column...

VBA: Recuperar un dato de un elemento seleccionado de un ListBox.


7 comentarios:

  1. Hola. de nuevo yo, pude ejecutar las macros muy bien pero los datos que aparecen en los textbox son los datos de una fila del listbox y lo que estoy tratando de lograr es que los datos de una columna del listbox sean los que aparecen en los textbox. saludos

    ResponderEliminar
  2. agradesco tu apoyo. saludos

    ResponderEliminar
    Respuestas
    1. Hola,
      escribiré un post al respecto en cuanto me sea posible
      ;-)

      Saludos cordiales!

      Eliminar
  3. ok, te agradesco. saludos

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.