Filtro en un Formulario VBA Excel

Otra vez,

Estoy en la parte de filtrar información de la base de datos... Les cuento un poco como funciona el programita que estoy haciendo para que entiendan por que quiero filtrar de esta forma. Los usuarios que usen el programa no pueden ver las hojas de Excel ya que al ejecutar Excel, el Workbook se esconde y solo se ven los formularios, nadie mas que yo puede ver el workbook, a menos que sepa la contraseña de Administrador.

Por esa razón es que quiero agregar un filtro en uno de los formulario y que me muestre los resultados en ese mismo formulario a través de un ListBox o incluso en un MsgBox si es posible. Pero no tengo ni la mas mínima idea de que código usar.

Les dejo unas imágenes de lo que tengo, una es de la base de datos y la otra es del formulario como me gustaría que quedara.

Base de datos:

(esto por si no se ve): o esta:

Formulario:

(si ese link no sirve prueben este): o este:

Bueno si se fijan en la base de datos hay una columna que tiene numero de Agencia y en el formulario se va a filtrar por el numero de agencia, use el ejemplo de la agencia 124, lo que quiero es que al seleccionar 124 en el Combo Box y presionar el botón Search Now se muestren todas las lineas que contienen 124 en el ListBox de la derecha.

PD: Si es posible también filtrar por la fecha, la que dice Outbound, a través de un textbox donde se escribiría

1 respuesta

Respuesta
2

Lo reviso y con gusto te respondo.

Saludos. Dam

Pon el siguiente código en tu formulario

Revisa y cambia en el código lo siguiente:

1. El nombre de tu hoja, en el ejemplo yo le puse "base"

2. Las columnas de datos, en el ejemplo yo le puse de A1 a D1 (4 columnas: outbound, inbound, agency, members)

3. Si son más de 4 columnas tienes que cambiar

ListBox1.ColumnCount = 4

4. Y agregar, más líneas

.List(.ListCount - 1, 3) = cell.Offset(0, 3).Value

5. Tienes que crear un textbox1 para capturar la fecha

6. Tienes que verificar que lo que capturan en el textbox1 sea una fecha (no se incluye en esta macro)

Private Sub CommandButton1_Click()
'Por Dam
Dim cell As Range
Dim Rng As Range
agencia = ComboBox1
fecha = TextBox1
ActiveSheet.AutoFilterMode = False
Range("A1:D1").Select
If agencia = "" Then
    If fecha = "" Then
        MsgBox "No hay datos a filtrar, se seleccionan todos"
        ComboBox1.SetFocus
    Else
        'Filtra datos por fecha
        ActiveSheet.AutoFilterMode = False
        Range("A1:D1").Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=1, Criteria1:=fecha
    End If
Else
    If fecha = "" Then
        'Filtra datos por agencia
        ActiveSheet.AutoFilterMode = False
        Range("A1:D1").Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=3, Criteria1:=agencia
    Else
        'filtra datos por agencia y fecha
        ActiveSheet.AutoFilterMode = False
        Range("A1:D1").Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=1, Criteria1:=fecha
        Selection.AutoFilter Field:=3, Criteria1:=agencia
    End If
End If
ufila = Range("A" & Rows.Count).End(xlUp).Row
If ufila = 1 Then
    MsgBox "No se encontraron datos a filtrar"
    ListBox1.Clear
Else
    'Prepara el rango de datos filtraso
    With ThisWorkbook.Worksheets("base")
        'Set Rng = .Range("A1", .Range("A1").End(xlDown)).SpecialCells(xlCellTypeVisible)
        Set Rng = .Range("A1", .Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
    End With
    'Prepara y llena el listobox
    ListBox1.ColumnCount = 4
    ListBox1.Clear
    For Each cell In Rng.Cells
        With Me.ListBox1
            .AddItem cell.Value
            .List(.ListCount - 1, 1) = cell.Offset(0, 1).Value
            .List(.ListCount - 1, 2) = cell.Offset(0, 2).Value
            .List(.ListCount - 1, 3) = cell.Offset(0, 3).Value
        End With
    Next cell
    fecha = ""
    agencia = ""
End If
End Sub

Saludos.dam
Si es lo que necesitas.

Mejor imposible, esta perfecto no se interpretar ese código tan grande pero lo copie y lo pegue y funciono a la perfección jajaja solo tuve que cambiar el nombre de la hoja como me dijiste arriba

Gracias, eres un Dios

Ya se donde buscar ayuda siempre, nunca fallas wow

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas