Macro que haga autofiltro de lo que escriba en un textbox

Tengo el siguiente ejemplo

Tengo un Textbox1 en el cual deseo colocar unas palabras separadas por espacio.
Por ejemplo coloco en el textbox1 las siguientes palabras:

"arroz café huevo"

Entonces deseo unas instrucciones para ese textbox que a medida que yo voy escribiendo una palabra, la tabla que se encuentra ubicada abajo desde la celda B9 en adelante se vaya autofiltrando en base a las palabras que yo voy escribiendo.

Por ejemplo para el ejemplo que escribí, la opción resultante de la combinación de esas palabras seria "C + E SERUM por 15 ml"

Tengo la siguiente instrucción pero solo me funciona para la primera palabra y no me toma las demás palabras entonces no se que arreglo hacerle a esa instrucción para que funcione de la manera como deseo sin importar en que orden estén las palabras y sin importar que palabras distintas están contenidas en el producto.

Option Explicit
'
Private Sub TextBox1_Change()
Dim Criterio As String
    If Hoja1.TextBox1.Value <> "" Then
        Criterio = "*" & Hoja1.TextBox1.Value & "*"
        Range("B6").CurrentRegion.AutoFilter Field:=2, Criteria1:=Criterio
    Else
        Criterio = ""
        Range("B6").CurrentRegion.AutoFilter
    End If
End Sub

2 respuestas

Respuesta
1

Prueba lo siguiente:

Private Sub TextBox1_Change()
  Dim i As Long, j As Long
  Dim a As Variant, b As Variant, c As Variant
  Dim existe As Boolean
  Application.ScreenUpdating = False
  If Hoja1.AutoFilterMode Then Hoja1.AutoFilterMode = False
  a = Hoja1.Range("C7", Hoja1.Range("C" & Rows.Count).End(3)).Value2
  ReDim b(1 To UBound(a), 1 To 1)
  For i = 1 To UBound(a)
    existe = True
    For Each c In Split(Hoja1.TextBox1.Value, " ")
      If Not a(i, 1) Like "*" & c & "*" Then
        existe = False
        Exit For
      End If
    Next
    If existe Then
      j = j + 1
      b(j, 1) = a(i, 1)
    End If
  Next
  If Hoja1.TextBox1.Value <> "" Then
    Range("B6").CurrentRegion.AutoFilter 2, Application.Transpose(b), xlFilterValues
  Else
    Range("B6").CurrentRegion.AutoFilter
  End If
End Sub

Si no importan las mayúsculas o minúsculas.

Cambia en mi macro esta línea:

If Not a(i, 1) Like "*" & c & "*" Then

Por esta:

If Not Lcase(a(i, 1)) Like "*" & Lcase(c) & "*" Then
Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas