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.