Visual Basic - Filtrar una tabla por input de String de 2 columnas

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 38 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Filtrar una tabla por input de String de 2 columnas

Publicado por Agustin (1 intervención) el 20/12/2017 16:17:07
Buenas

Tengo una tabla y al lado de la misma implementé un search box en donde se ingresa un String y filtra por ese input en una columna determinada. El problema surge cuando uso otro search box pero que tiene que buscar en 2 columnas, si no lo encuentra en una, debe buscar en la otra, y si aparece en ambas, debe mostrar todas las filas que cumplan con la condicion. Al lado del search box uso un botón que tiene asociada la funcionalidad de recuperar la tabla.

Probé de todo, incluso hice un método para que oculte las filas que no cumplen con la condición.

Para resumir, el problema radica cuando se repite el contenido en ambas columnas, debido a que el método AutoFilter se asigna a una columna por vez.

Les adjunto el código que implementé a ver qué se les ocurre que puedo hacer.

*Este es el del search box.*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Sub Search_Certificate_Change()
   Dim strFilter As String
   strFilter = "*" & [E3] & "*"
   Debug.Print strFilter
 
   Dim ws As Worksheet
 
   Set ws = Sheets("Matrix")
   Set rng = ActiveSheet.ListObjects("ManagersTable").Range
 
   ws.AutoFilterMode = False
 
    'Si está en B
    If Application.WorksheetFunction.CountIf(Sheets("Matrix").Range("B:B"), strFilter) <> 0 Then
        'Si está en C, tengo que ocultar todas las filas que no contengan el String
        If Application.WorksheetFunction.CountIf(Sheets("Matrix").Range("C:C"), strFilter) <> 0 Then
 
            BeginRow = 10
            EndRow = 63
            ChkCol = 3
 
            For RowCnt = BeginRow To EndRow
                If Cells(RowCnt, ChkCol).Value <> strFilter Then
                    Cells(RowCnt, ChkCol).EntireRow.Hidden = True
                Else
                    Cells(RowCnt, ChkCol).EntireRow.Hidden = False
                End If
            Next RowCnt
 
            ' Este es un hardcode de que siempre filtre por la columna B  rng.AutoFilter Field:=2, Criteria1:=strFilter
        Else:
            rng.AutoFilter Field:=2, Criteria1:=strFilter, Operator:=xlFilterValues
        End If
    Else:
        rng.AutoFilter Field:=3, Criteria1:=strFilter, Operator:=xlFilterValues
    End If
 
End Sub


*Este es el del botón*

1
2
3
4
5
6
7
8
9
Private Sub Clear_Certificate_Click()
 On Error Resume Next
    [E3] = ""
    ActiveSheet.ListObjects("ManagersTable").AutoFilter.ShowAllData
 On Error GoTo 0
 
 'ActiveSheet.ListObjects("ManagersTable").Range("B10:B100").EntireRowHidden = False
 
End Sub


De antemano les agradezco.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder