Curso Excel VBA y Macros – Cap. 59 – Formularios – PARTE 5 Control ListBox ó Cuadro de lista

<<CURSO COMPLETO EN YOUTUBE>>

Seguimos con nuestro curso de Macros desde cero y en especial con el tema de Formularios. Seguimos con el tema del Control ListBox y en esta ocasión lograremos eliminar filas de un rango de celdas en base a valores filtrados en el ListBox.

Este es el último video de la serie del Control ActiveX ListBox. Ya hemos visto los siguientes temas:

Ver video Capítulo 59 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Filtrar rango y mostrar resultado en ListBox

En el tutorial anterior vimos cómo filtrar valores en un ListBox, lo cual lo logramos comparando el valor de un TextBox donde ingresamos el valor de VENDEDOR. Al dar clic en el botón Filtrar, se comparará el nombre del VENDEDOR contra la COLUMNA VENDEDOR de nuestro rango. Los valores que coincidan se agregarán fila por fila en el TextBox.

Filtrar rango de celdas y mostrar en ListBox dentro de un Formulario.

Figura 1. Filtrar rango de celdas y mostrar en ListBox dentro de un Formulario.

Eliminar filas de una Tabla en base a a valores filtrados en un ListBox

Una vez que tenemos los valores filtrados, elegimos un elemento de la lista y presionamos Eliminar. Al confirmar que sí queremos eliminar, se eliminará la fila correspondiente al elemento, coincidiendo el ID.

El botón eliminar funciona de la siguiente manera, al seleccionar un elemento de la lista, se ejecutará una macro que será lanzar por el evento Click del ListBox. El procedimiento realizará una búsqueda del ID en el rango de celdas, específicamente en la columna A. Al encontrar el ID, se guardará en una Variable Pública el dato de la fila donde se encontró el valor.

El botón eliminar tomará en cuenta la fila y al confirmar, se eliminará la fila.

Eliminar filas de un rango en base a valores filtrados en un ListBox.

Figura 2. Eliminar filas de un rango en base a valores filtrados en un ListBox.

Código VBA del Formulario

Option Explicit
Dim FilaEncontrada As Variant

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

'Al iniciar el Formulario
Private Sub UserForm_Initialize()

With Me
    .ListBox1.ColumnCount = 4
    .ListBox1.ColumnWidths = "20 pt;60 pt;60 pt;60 pt"
End With

End Sub

'Botón Filtrar
Private Sub CommandButton1_Click()
Dim Hoja As Worksheet
Dim Filas As Integer
Dim i As Integer

Set Hoja = Sheets("Hoja1")
Filas = Hoja.Range("A1").CurrentRegion.Rows.Count

If Me.TextBox1.Value = "" Then Exit Sub

Me.ListBox1.Clear

For i = 1 To Filas
    If Hoja.Cells(i, 1).Offset(0, 1).Value = UCase(Me.TextBox1.Value) Then
        Me.ListBox1.AddItem Hoja.Cells(i, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Hoja.Cells(i, 1).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Hoja.Cells(i, 1).Offset(0, 2)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Hoja.Cells(i, 1).Offset(0, 3)
    Else
    'No hacer nada
    End If
Next i

End Sub

'Al dar clic en el ListBox
Private Sub ListBox1_Click()
Dim Cuenta As Integer
Dim i As Integer
Dim Filas As Long
Dim Rango As Range
Dim ID As Integer

Cuenta = Me.ListBox1.ListCount

Filas = Sheets("Hoja1").Range("A1").CurrentRegion.Rows.Count
Set Rango = Sheets("Hoja1").Range("A2:A" & Filas)

For i = 0 To Cuenta - 1

    If Me.ListBox1.Selected(i) = True Then
        
        ID = Me.ListBox1.List(i)
        
        FilaEncontrada = Rango.Find(What:=ID, MatchCase:=False, LookAt:=xlWhole).Row
        MsgBox ID
        MsgBox FilaEncontrada
    
    End If

Next i
End Sub

'Botón Eliminar
Private Sub CommandButton3_Click()

Dim Cuenta As Integer
Dim Pregunta As Byte

Cuenta = Me.ListBox1.ListCount

If Cuenta = 0 Then Exit Sub

Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "EXCELeINFO")
If Pregunta = vbYes Then
    MsgBox "eliminar"
    'Sheets("Hoja1").Range(Cells(FilaEncontrada, 1), Cells(FilaEncontrada, 4)).Select
    Sheets("Hoja1").Range(Cells(FilaEncontrada, 1), Cells(FilaEncontrada, 4)).Delete Shift:=xlUp
    'ActiveCell.EntireRow.Delete
End If
    
    Call CommandButton1_Click

End Sub

'Botón Cerrar
Private Sub CommandButton2_Click()
Unload Me
End Sub

Descarga el archivo de ejemplo

059 – Forrmularios Control ListBox Cuadro de lista 5 – EXCELeINFO.xlsm

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

You may also like...

Leave a Reply

Your email address will not be published.

%d bloggers like this: