Hacer rápido y eficaz el código buscador
Pregunta para Dante. Hola Dante, recibe mis saludos
En un libro del cual me haz ayudado bastante, está este código que es BASTANTE LENTO y mientras más líneas con datos tenga la hoja, más lento es.
Además de eso, busca por cualquier parte Y PUNTO de la cadena, (frase) y quiero que busque en la 1ª palabra y letra de la cadena, Ej.: Llaves para aceite que según voy introduciendo carácter, me vaya mostrando las frases en que la 1ª letra de la 1ª palabra de la frase sea l(el) manojo. Si sigo introduciendo carácter, l, a, v, e. Es, me da la 1ª palabra Llaves de la frase Llaves para aceite o frases en que la 1ª palabra sea Llaves, pero que no me de por ejemplo Manojo de Llaves, Maletín con manojo de llaves, etc.
Sub Filtrar() Dim Hoj As Worksheet, Copia As Boolean, Texto As String, Tipo As Byte Dim fil As Worksheet Dim hojaRow As Range, c_Hoja As String, Orig As Long, Dest As Long 'Si no hay texto a filtrar SALE If Buscar2.Text = "" Then Exit Sub 'Nombre de hoja y referencia c_Hoja = cboHojas.Text Set Hoj = Sheets(c_Hoja) Set fil = Sheets("Filtro") 'Limpia Hoja Filtro fil.Visible = True fil.Select 'Cells.Select fil.Cells.Clear 'Selection.ClearContents fil.Range("A2").Select 'Copia Cabecera y Prepara variables Hoj.Range("A1:G1").Copy fil.Range("A1:G1") Texto = UCase(Buscar2.Text) Tipo = FiltrarPor2.ListIndex Orig = 2 Dest = 1 'Copia los datos filtrados a la hoja Filtro With Hoj While .Cells(Orig, 1) <> "" Copia = False If Tipo = 1 And InStr(UCase(.Range("A" & Orig)), Texto) > 0 Then Copia = True If Tipo = 2 And InStr(UCase(.Range("B" & Orig)), Texto) > 0 Then Copia = True If Tipo = 3 And InStr(UCase(.Range("D" & Orig)), Texto) > 0 Then Copia = True If Copia Then Dest = Dest + 1 .Range("A" & Orig & ":G" & Orig).Copy fil.Range("A" & Dest) End If Orig = Orig + 1 Wend End With 'Carga la tabla de datos al ListBox Set hojaRow = fil.Range(Cells(2, 1), Cells(Dest, 7)) lista.RowSource = "" lista.RowSource = hojaRow.Address fil.Visible = False Sheets("Inicio").Select End Sub
que hace parte de este
Private Sub Buscar2_Change() Application.ScreenUpdating = False 'Deactiva la seleccion de articulo Call Sin_Articulo 'Filtrar Datos - Copia los datos Filtrados a la Hoja FILTRO Call Filtrar Inicio.Select Application.ScreenUpdating = True End Sub
El buscador, Buscar2, busca por criterio seleccionado en textBox FiltrarPor2
Agradecido por la atencio en que puedas prestar a este mi caso