En la entrada anterior vimos cómo emplear el método .RemoveItem para eliminar elementos de un ListBox cargados con .AddItem...
Hoy veremos una alternativa a la carga de datos en un ListBox a partir de datos en la hoja de cálculo, y cómo gestionar su borrado.
Partimos de una tabla de países (TblPaises) en la hoja de cálculo y un UserForm creado que contiene un ListBox al que hemos renombrado como 'LstPais'.
El trabajo consiste en cargar el ListBox en el evento _Initialize del formulario, lo que conseguimos al emplear la propiedad .List y llevar a este 'lista' el rango indicado (Range("TblPaises[paises]")).
Por otra parte en el procedimiento 'RecargaListBox' procedemos a redefinir el rango continuo o discontinuo de celdas resultate después de eliminar un elemento del ListBox.
El rango resultante será cargado de nuevo en el ListBox a través del evento _DblClick, donde se produce el control de borrado o carga de elementos...
Así pues añadimos los siguiente códigos dentro de la ventana de código de nuestro UserForm en nuestro proyecto de VB:
Se puede comparar con el resultado de la entrada anterior, y comprobarse que es similar...
Hoy veremos una alternativa a la carga de datos en un ListBox a partir de datos en la hoja de cálculo, y cómo gestionar su borrado.
Partimos de una tabla de países (TblPaises) en la hoja de cálculo y un UserForm creado que contiene un ListBox al que hemos renombrado como 'LstPais'.
El trabajo consiste en cargar el ListBox en el evento _Initialize del formulario, lo que conseguimos al emplear la propiedad .List y llevar a este 'lista' el rango indicado (Range("TblPaises[paises]")).
Por otra parte en el procedimiento 'RecargaListBox' procedemos a redefinir el rango continuo o discontinuo de celdas resultate después de eliminar un elemento del ListBox.
El rango resultante será cargado de nuevo en el ListBox a través del evento _DblClick, donde se produce el control de borrado o carga de elementos...
Así pues añadimos los siguiente códigos dentro de la ventana de código de nuestro UserForm en nuestro proyecto de VB:
Dim rngPaises As Range Private Sub UserForm_Initialize() With Range("TblPaises[paises]") 'Llenamos el ListBox LstPais con los elementos del rango Me.LstPais.List = Application.Transpose(.Cells) 'Cargamos el rango con los paises que aparecen en esas celdas Set rngPaises = .Cells End With End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub LstPais_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Long Dim filas As String For i = (Me.LstPais.ListCount) To 1 Step -1 If Me.LstPais.Selected(i - 1) = True Then 'eliminamos el elemento seleccionado Me.LstPais.RemoveItem (i - 1) Else 'con el resto obtenemos una cadena de texto con los número de filas con datos filas = filas & (i + 1) & "-" End If 'deseleccionamos el elemento activo después del borrado On Error Resume Next Me.LstPais.Selected(Me.LstPais.ListCount - 1) = False On Error GoTo 0 Next i 'en caso la cadena de texto 'filas' tenga contenido 'quitamos el último caracter/separador añadido... If Not filas = "" Then RecargaListBox Left(filas, Len(filas) - 1) End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub RecargaListBox(filas As String) Dim addr As String Dim ifila As Variant 'declaramos una matriz para cargarla con las direcciones de las celdas con datos Dim arrFila As Variant 'partimos en elementos individuales la cadena de celdas.. arrFila = Split(filas, "-") For ifila = UBound(arrFila) To LBound(arrFila) Step -1 addr = addr & rngPaises.Item(arrFila(ifila)).Address & "," Next ifila 'en caso la cadena de texto 'addr' tenga contenido 'quitamos el último caracter/separador añadido... If Not addr = "" Then addr = Left(addr, Len(addr) - 1) 'recargamos el rango con los paises resultantes... Set rngPaises = rngPaises.Parent.Range(addr) End Sub
Se puede comparar con el resultado de la entrada anterior, y comprobarse que es similar...
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.