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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Héctor Miguel
12/07/2007 - 05:22 | Informe spam
hola, Cristian !

... la instruccion ".find(What:=..)"... no logro dominarla siempre... me manda a otro rango de celdas y me salen errores
... me posiciono en la hoja y celda que elija y comienzo un bucle para buscar solo en esa columna... al valor del textbox: [...]
... que busque en los registros el valor mas parecido a lo que le consulte
por ejemplo si quiero buscar Cristian, que pueda hacerlo escribiendo solamente Cris [...]



dependiendo de lo que requieras hacer despues con alguno/cualuiera/todos/... los datos *parecidos* obtenidos -?-
por que no intentas con los filtros avanzados y llenando un control de lista para... ???

saludos,
hector.
Respuesta Responder a este mensaje
#3 galtor
12/07/2007 - 18:41 | Informe spam
On 11 jul, 16:13, "KL" wrote:
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



Gracias KL lo veo interesante,

voy a probarlo puede ser lo que necesito.

Saludos
Cristian
Respuesta Responder a este mensaje
#4 galtor
12/07/2007 - 19:05 | Informe spam
On 11 jul, 22:22, "Héctor Miguel"
wrote:
hola, Cristian !

> ... la instruccion ".find(What:=..)"... no logro dominarla siempre... me manda a otro rango de celdas y me salen errores
> ... me posiciono en la hoja y celda que elija y comienzo un bucle para buscar solo en esa columna... al valor del textbox: [...]
> ... que busque en los registros el valor mas parecido a lo que le consulte
> por ejemplo si quiero buscar Cristian, que pueda hacerlo escribiendo solamente Cris [...]

dependiendo de lo que requieras hacer despues con alguno/cualuiera/todos/... los datos *parecidos* obtenidos -?-
por que no intentas con los filtros avanzados y llenando un control de lista para... ???

saludos,
hector.



Hola Hector

Pues bien te detallo un poco más el proceso.
Lo que requiero es buscar en la hoja donde almaceno a los clientes, en
la columna A guardo un id para diferenciarlos, en la columna B están
los nombres y en otras columnas están otros datos -domicilio, ciudad,
tels, etc.-, donde requiero que la busqueda se haga es en la columna
B, del nombre, desde el renglón 1 hasta el "n" (mientras tengan
informacion, así está mi función)..., ahí es donde me está fallando el
find, no le entiendo bien al SearchOrder:=xlByColumns o usar xlByRows,
¿a donde se va en cada caso?... he probado ambas y no la logro
entender, por poner un ejemplo he buscado Javier y a veces me resulta
posicionada en la columna de colonia en un registro que es "San
Javier", al fin de cuentas es un resultado parecido.

Ahora bien mi libro funciona casi en su totalidad en base a
formularios y macros, la mayoría de las hojas están ocultas, la
busqueda es mediante un formulario con textboxes, al encontrar el
nombre del cliente copio el id (que esta en la celda de al lado) a una
variable y de ahí se derivan otras sub-busquedas en otras hojas para
encontrar las ventas que tenga ese ID y otros detalles.
Los demás campos finalmente se rellenan con los datos encontrados de
todo ese proceso.
Te digo que funciona bien, pero tengo que escribir exactamente el
nombre que busco porque si no, no lo encuentra.

Espero haberme explicado.

Gracias
Cristian
Respuesta Responder a este mensaje
#5 Héctor Miguel
13/07/2007 - 08:52 | Informe spam
hola, Cristian !

[segun entiendo] lo que requieres es un 'sistema' de busqueda *dinamica* incluyendo datos parciales y/o parecidos/similares -?-
[creo que] tu mejor alternativa [datos conocidos hasta ahora] siguen siendo los filtros avanzados y [posiblemente] controles de lista -?-
asumiendo que tu libro contiene ya *suficientes* codigos/formularios/hojas/... [probablemente]...
te serviria revisar las siguientes conversaciones: -> http://tinyurl.com/2wkam4
[estoy seguro que de alguna de ellas podras obtener *tips* para complementar/adaptar/... lo que ya tienes desarrollado]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la cosulta original __
... requiero... buscar en la hoja donde almaceno a los clientes
en la columna A guardo un id para diferenciarlos
en la columna B estan los nombres y en otras columnas estan otros datos -domicilio, ciudad, tels, etc.-
donde requiero que la busqueda se haga es en la columna B, del nombre, desde el renglon 1 hasta el "n"
... no le entiendo bien al SearchOrder:=xlByColumns o usar xlByRows, a donde se va en cada caso?
... ejemplo he buscado Javier y a veces me resulta... en un registro que es "San Javier", al fin de cuentas es un resultado parecido.
... mi libro funciona casi en su totalidad en base a formularios y macros, la mayoría de las hojas están ocultas
la busqueda es mediante un formulario con textboxes, al encontrar el nombre del cliente copio el id
(que esta en la celda de al lado) a una variable y de ahi se derivan otras sub-busquedas en otras hojas
para encontrar las ventas que tenga ese ID y otros detalles.
Los demas campos finalmente se rellenan con los datos encontrados de todo ese proceso.
Te digo que funciona bien, pero tengo que escribir exactamente el nombre que busco porque si no, no lo encuentra...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida