Curso Excel VBA y Macros – Cap. 59 – Formularios – PARTE 5 Control ListBox ó Cuadro de lista
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:
- Eliminar filas de una tabla con datos mostrados en
un ListBox.
Ver video Capítulo 58 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.
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.
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
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.



