MATCH CASE sin usar .FIND

11/07/2007 - 22:20 por galtor | Informe spam
Hola de nuevo

Hola he intentado usar la instruccion ".find(What:=..)" pero no
logró dominarla siempre sale algo que me manda a otro rango de celdas
y me salen errores, funciona a medias, por lo que mejor creé otra
funcion.

Dicha funcion está estructurada así, al hacer click en un boton mando
llamar un modulo donde me posiciono en la hoja y celda que elija y
comienzo un bucle para buscar solo en esa columna hacia abajo que se
ejecute siempre que el valor de la celda no este vacío y sea diferente
al valor del textbox:

call posicion_busqueda(6,"B4")
While Not IsEmpty(ActiveCell) And ActiveCell.Value <> NomCliente.Text
ActiveCell.Offset(1, 0).Activate
Wend

de modo que se detendría por dos razones: 1) si está vacía la celda y
2) si encontró el valor, lo reviso así:

If ActiveCell <> Empty Then
MsgBox "REGISTRO ENCONTRADO"
else
MsgBox "REGISTRO NO ENCONTRADO"
end if

Funciona perfecto!
...salvo por una razón: TENGO QUE ESCRIBIR CON EXACTITUD EL NOMBRE A
BUSCAR de lo contrario me manda al segundo msgbox.
Me gusta la instruccion ".find" porque puedo elegir el matchCase, para
que encuentre lo más parecido, por ejemplo en mi caso son nombres si
no está capturado como yo lo busco no lo encontrará jamás y me va a
crear conflictos si el error fue de captura o mío al consultar.

Quiero saber si puedo habilitar el "matchCase" en mi función para que
busque en los registros el valor más parecido a lo que le consulte,
por ejemplo si quiero buscar Cristian, que pueda hacerlo escribiendo
solamente Cris (además me he topado en estos días es que si busco un
cliente que sea una empresa tengo que escribir tooooodo el nombre
completo, lo que además hace perder valioso tiempo).

De antemano gracias.
Cristian
 

Leer las respuestas

#1 KL
11/07/2007 - 23:13 | Informe spam
Hola galtor,

"galtor" wrote in message
news:
Hola he intentado usar la instruccion ".find(What:=..)" pero no
logró dominarla siempre sale algo que me manda a otro rango de celdas
y me salen errores, funciona a medias, por lo que mejor creé otra
funcion.
...Me gusta la instruccion ".find" porque puedo elegir el matchCase...

Prueba el siguiente codigo (obviamente lo puedes adaptar a un UserForm para
no usar la propiedad InputBox). Sera mucho mas rapido y mas flexible que tu
rutina:

Sub test()
Dim rng As Range
Dim rngResult As Range
Dim lngCount As Long
Dim strSearch As String
Dim Msg As String
Dim i As Long

On Error Resume Next
Set rng = Application.InputBox( _
Prompt:="Seleccione el rango de busqueda", _
Title:="BUSCAR DONDE", _
Type:=8)
On Error GoTo 0
If rng Is Nothing Then Exit Sub

strSearch = Application.InputBox( _
Prompt:="Introduzca el valor buscado" & Chr(13) & _
"(se puede usar los caracteres especiales '*', '?', '~')", _
Title:="BUSCAR QUE")

If strSearch = "" Then Exit Sub

lngCount = Application.CountIf(rng, strSearch)
If lngCount = 0 Then Exit Sub

Set rngResult = rng.Find(strSearch, rng(1), , xlWhole)
Msg = "Valor" & strSearch & "encontrado en las siguientes celdas:" _
& Chr(13) & rngResult.Address & Chr(13)

For i = 1 To lngCount - 1
Set rngResult = rng.Find(strSearch, rngResult, , xlWhole)
Msg = Msg & rngResult.Address & Chr(13)
Next i
MsgBox Msg
End Sub

Saludos,
KL

Preguntas similares