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 SubExistirí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