jueves, 1 de febrero de 2018

VBA: Eliminar celdas desde ListBox

Siguiendo con la serie de post sobre ListBox y cómo eliminar elementos, hoy veremos cómo eliminar celdas de la hoja de cálculo desde un ListBox.
Nuestros datos:

VBA: Eliminar celdas desde ListBox



Disponemos de una Tabla en el rango A1:A7, tabla llamada 'TblPaises'.
Por otro lado, nuestro formulario contiene una etiqueta/label y un ListBox llamado: LstPais.


Con el evento _Initialize asociado al UserForm cargaremos el ListBox empleando la propiedad .RowSource.
A continuación vinculado al evento _DblClick del ListBox controlaremos la acción de eliminado de celdas en la hoja de cálculo.


Así pues añadimos las siguientes macros dentro de la ventana de código de nuestro UserForm en nuestro proyecto de VB:

Private Sub UserForm_Initialize()
'cargamos el listbox con los valores de la Tabla en la hoja de cálculo
Me.LstPais.RowSource = "TblPaises[paises]"
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub LstPais_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim sEncontrar As String, rngBusqueda As Range

'trabajamos sobre el elemento del listbox seleccionado
Select Case Me.LstPais.Value
    'en caso haya alguno seleccionado
    Case Is <> ""
        'definimos el valor/pais a encontrar
        sEncontrar = Me.LstPais.Value
        'determinamos dónde buscar 8en qué rango)
        With ActiveSheet.Range("TblPaises[paises]")
            Set rngBusqueda = .Find(what:=sEncontrar)
            'si se ha encontrado el valor/país
            If Not rngBusqueda Is Nothing Then
                'marcamos esa celda en la hoja de cálculo
                'y eliminamos desplazando el resto hacia arriba
                rngBusqueda.Delete shift:=xlUp
            End If
        End With
    'para el resto de casos salimos del procedimiento
    Case Else
        Exit Sub
End Select

'volvemos a cargar el ListBox con el resultado de la hoja de cálculo
Me.LstPais.RowSource = "TblPaises[paises]"
End Sub



Al ejecutar nuestro formulario podemos comprobar cómo al hacer doble clic sobre los elementos del ListBox se eliminan los registros de la tabla 'TblPaises' en la hoja de cálculo, tal como esperábamos...

2 comentarios: