Aprenderemos hoy algo nuevo sobre los ListBox en nuestros UserForm, en concreto veremos cómo conseguir que nuestro ListBox, en especial en aquellos casos con muchos elementos, muestre el último elemento de la Lista.
Con esto trataré de dar respuesta a la cuestión planteada por un lector:
La idea es clara, que tras introducir valores/elementos nuevos en nuestra lista, se muestre NO el primero de los elementos, sino el último...
Partiremos de una pequeña lista en nuestra hoja de cálculo:
A continuación construiremos un UserForm con los siguientes controles:
3 labels
3 TextBox: TxtNombre, TxtZona y TxtImporte
1 CommandButton: CmdAgregar
1 ListBox: Lista
como sigue:
De especial, para el ListBox ajustaremos las propiedades:
.ColumnCount=3
.ColumnHeads=True
Finalmente incorporamos funcionalidad, desde la ventana de código del nuestro Formulario disponemos los siguientes eventos:
Existirían, al menos, dos maneras de conseguir nuestra meta, una podría ser empleando la propiedad .Selected, la otra con la propiedad .TopIndex; la diferencia entre una y otra es que .Selected dejará marcado el último elemento.. mientras que con .TopIndex únicamente visualizamos (ver filas de código 31 y 32 !!).
Así dependerá de lo que queramos.
Podemos ver el efecto aquí:
Con esto trataré de dar respuesta a la cuestión planteada por un lector:
...En un Listbox de VBA Excel que me muestra una hoja Excel con datos que estoy ingresando desde un userform, quiero ver la ultima fila que ingreso, Actualmente solo muestra el encabezado y los disponibles dentro de la ventana, y para ello debo recurrir a la barra de desplazamiento... |
La idea es clara, que tras introducir valores/elementos nuevos en nuestra lista, se muestre NO el primero de los elementos, sino el último...
Partiremos de una pequeña lista en nuestra hoja de cálculo:
A continuación construiremos un UserForm con los siguientes controles:
3 labels
3 TextBox: TxtNombre, TxtZona y TxtImporte
1 CommandButton: CmdAgregar
1 ListBox: Lista
como sigue:
De especial, para el ListBox ajustaremos las propiedades:
.ColumnCount=3
.ColumnHeads=True
Finalmente incorporamos funcionalidad, desde la ventana de código del nuestro Formulario disponemos los siguientes eventos:
Private Sub UserForm_Initialize() Me.TxtNombre.Value = "" Me.TxtZona.Value = "" Me.TxtImporte.Value = "" Me.TxtNombre.SetFocus 'cargamos el ListBox Dim UltFila As Long, strRng As String UltFila = Hoja1.Range("A" & Rows.Count).End(xlUp).Row strRng = "A2:C" & UltFila Lista.RowSource = strRng End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub CmdAgregar_Click() Dim UltFila As Long UltFila = Hoja1.Range("A" & Rows.Count).End(xlUp).Row + 1 'completamos el dato Hoja1.Cells(UltFila, 1).Value = Me.TxtNombre.Value Hoja1.Cells(UltFila, 2).Value = Me.TxtZona.Value Hoja1.Cells(UltFila, 3).Value = CDbl(Me.TxtImporte.Value) 'refrescamos el listbox Dim strRng As String strRng = "A2:C" & UltFila Lista.RowSource = strRng 'mostramos el último valor añadido en el ListBox 'Lista.Selected(Lista.ListCount - 1) = True 'seleccionando el último item de la Lista... Lista.TopIndex = Lista.ListCount - 1 'sin seleccionar el valor.... 'limpiamos el formulario... Me.TxtNombre.Value = "" Me.TxtZona.Value = "" Me.TxtImporte.Value = "" Me.TxtNombre.SetFocus End Sub
Existirían, al menos, dos maneras de conseguir nuestra meta, una podría ser empleando la propiedad .Selected, la otra con la propiedad .TopIndex; la diferencia entre una y otra es que .Selected dejará marcado el último elemento.. mientras que con .TopIndex únicamente visualizamos (ver filas de código 31 y 32 !!).
Así dependerá de lo que queramos.
Podemos ver el efecto aquí:
Interesante
ResponderEliminarBuen aporte
ResponderEliminar