Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

BuscarV en textbox

494 views
Skip to first unread message

GRIEGO59

unread,
May 3, 2008, 11:08:01 PM5/3/08
to
Hola!
Estaba usando este codigo para buscar en la hoja productos en funcion de el
textbox2,pero ahora no se por que no me funciona.

Private Sub TextBox2_Change()
Sheets("productos").Select
[a1].Select
On Error GoTo noencontro _
Cells.Find(What:=TextBox2, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:= _
False).Activate

ActiveCell.Offset(0, 1).Select
TextBox18 = ActiveCell
ActiveCell.Offset(0, 4).Select
TextBox34 = ActiveCell
noencontro:
End Sub

me lleva directo al corrector de codigo y se remarca desde
On error hasta
.Activate

Que estare haciendo mal?
Darío

Héctor Miguel

unread,
May 4, 2008, 12:36:33 AM5/4/08
to
hola, Darío !

ELIMINA el espacio y el guion_bajo que tienes en la linea del "On Error ......"
de: -> On Error GoTo noencontro _
a: -> On Error GoTo noencontro

saludos,
hector.

__ la consulta original __
> Estaba usando este codigo para buscar en la hoja productos en funcion del textbox2, pero ahora no se por que no me funciona.

GRIEGO59

unread,
May 4, 2008, 2:26:01 PM5/4/08
to
Hola Hector Miguel!
Gracias, por tu ayuda!
Ya cambié el argumento LookAt de xlPart por xlWhole y sucede lo siguiente:
tengo el código 3 y el código 3124.
Si escribo el codigo 31, o 312, que no exisen, lo toma como si fuese 3.
Que puedo hacer?
Si escribo 3 o 3124, si trabaja bien.

Darío.

"Héctor Miguel" escribió:

Héctor Miguel

unread,
May 4, 2008, 6:20:03 PM5/4/08
to
hola, Darío !

> Ya cambie el argumento LookAt de xlPart por xlWhole y sucede lo siguiente: tengo el codigo 3 y el codigo 3124.


> Si escribo el codigo 31, o 312, que no exisen, lo toma como si fuese 3.
> Que puedo hacer? Si escribo 3 o 3124, si trabaja bien.

(creo que) hay algun detalle que no has expuesto -?- (hasta donde se):
- cuando buscas por el metodo .Find "algo" que NO existe, obtienes un error 91 en tiempo de ejecucion
- es probable que tengas una instruccion del tipo "On Error Resume Next"
y que alguna busqueda anterior se hubiera ya posicionado en la celda con el 3 (cuando buscas el 31 y no existe) -?-

saludos,
hector.


GRIEGO59

unread,
May 4, 2008, 9:35:00 PM5/4/08
to
Hola, Hector Miguel !
El código completo es asi:

Private Sub TextBox2_Change()
Sheets("productos").Select
[a1].Select
On Error GoTo noencontro

Cells.Find(What:=TextBox2, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:= _
False).Activate

ActiveCell.Offset(0, 1).Select
TextBox18 = ActiveCell
ActiveCell.Offset(0, 4).Select
TextBox34 = ActiveCell
noencontro:

Subtotal = Val(TextBox33) + Val(TextBox34) + Val(TextBox35) + Val(TextBox36)
+ Val(TextBox37) + Val(TextBox38) + Val(TextBox39)
IVA = Val(Subtotal) * 0 / 100
Total = Val(Subtotal) + Val(IVA)

End Sub
NO hay busqueda anterior.
Pero creo que no me va a servir este código porque lo que quiereo es buscar
igual que como con la funcion buscarv, eso del error 91 si no está el código
no me va a servir.
Hay una forma de buscar como buscarv ?
que muestre N/A cuando no está el código.
Gracias por tu ayuda!

Darío

"Héctor Miguel" escribió:

Héctor Miguel

unread,
May 4, 2008, 10:55:13 PM5/4/08
to
hola, Darío !

> NO hay busqueda anterior. Pero creo que no me va a servir este codigo porque


> lo que quiereo es buscar igual que como con la funcion buscarv

> eso del error 91 si no esta el codigo no me va a servir.
> Hay una forma de buscar como buscarv ? que muestre N/A cuando no esta el codigo.

yo entendi equivocado... cuando decias: "Si escribo el codigo 31, o 312, que no exisen, lo toma como si fuese 3"
al tu decir "lo toma", entendi que precisamente ERA lo que estabas obteniendo (no lo que estabas buscando obtener)

para el resultado y la condicion que pretendes, es necesario que el rango donde se busca SI este "ordenado" <= OJO
y puedes usar las funciones de excel desde vba (p.e.)...
- la propiedad WorksheetFunction te mostrara las funciones (en ingles)
- como argumentos deberas pasar los objetos completos (p.e.)

si comentas que el dato que se busca esta en el TextBox2 (de algun formulario de usuario)
y si suponemos que la matriz donde se busca esta en un rango con nombre (llamado clientes)
y que necesitas rescatar el dato correspondiente a las columnas 2 y 5 (en el listado nombrado "clientes")
y que dicho listado SI esta ordenado (condicion ineludible para que devuelva 3 cuando buscas 31 que no existe)...
y (finalmente) como si la formula la estuvieras usando en la celda C5 de la hoja activa

lo que seria similar a usar una formula parecida a: =buscarv(b5,clientes,2)

TextBox18 = Application.WorksheetFunction.VLookup(TextBox2, Range("clientes"), 2)
TextBox34 = Application.WorksheetFunction.VLookup(TextBox2, Range("clientes"), 5)

o... si el rango 'cliente' se encuentra en una hoja distinta de la hoja activa (cuando se muestra el formulario)...
TextBox18 = Application.WorksheetFunction.VLookup(TextBox2, Worksheets("otra hoja").Range("clientes"), 2)
TextBox34 = Application.WorksheetFunction.VLookup(TextBox2, Worksheets("otra hoja").Range("clientes"), 5)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector

__ el codigo expuesto __
> El codigo completo es asi:


> Private Sub TextBox2_Change()
> Sheets("productos").Select
> [a1].Select
> On Error GoTo noencontro
> Cells.Find(What:=TextBox2, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
> :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
> MatchCase:= _
> False).Activate
> ActiveCell.Offset(0, 1).Select
> TextBox18 = ActiveCell
> ActiveCell.Offset(0, 4).Select
> TextBox34 = ActiveCell
> noencontro:
> Subtotal = Val(TextBox33) + Val(TextBox34) + Val(TextBox35) + Val(TextBox36) + Val(TextBox37) + Val(TextBox38) + Val(TextBox39)
> IVA = Val(Subtotal) * 0 / 100
> Total = Val(Subtotal) + Val(IVA)
> End Sub

__ las consultas anteriores __

GRIEGO59

unread,
May 5, 2008, 1:50:00 AM5/5/08
to
Hola, Hector Miguel ¡
Habias entendido bien inicialmente.
Cuando escribo en el textbox2 el codigo 3 o 31 o 312 o cualquier codigo de
dos o tres digitos que comience con 3, el textbox18 y el textbox54 me
muestran la información relativa al codigo 3.
Como esos codigos no existen (el 31, el 312 y cualquier codigo de dos o tres
digitos que comience con 3), quiero que el texbox muestre N/A.

Los codigos que tengo actualmente en la hoja productos son los siguientes:
1, 2, 3, 4, 5, 6, 7, 3100, 3101, 3102 … 3272.
Es decir, tengo siete codigos de un solo digito y tengo 170 codigos de
cuatro digitos, los cuales comienzan en el 3100 y terminan en el 3272. No
tengo mas codigos, por los momentos.

Yo queria usar un codigo parecido a la funcion buscarv para obtner
información de la hoja productos y luego enviarla a la hoja compras usando
como puente entre ambas hojas el formulario, sin tener que usar una tercera
hoja.

Es decir que quiero tomar la información de la hoja productos, ponerla en el
formulario y de alli enviarla a la hoja compras.

Actualmente tengo una hoja llamada factura donde con la funcion buscarv tomo
la información de la hoja productos y de alli la llevo al formulario y luego
a la hoja compras, pero justamente, queria eliminar la hoja factura para
llevar la información directamente desde la hoja productos al formulario.

Gracias por tu ayuda.

Dario.


"Héctor Miguel" escribió:

Héctor Miguel

unread,
May 5, 2008, 2:23:37 AM5/5/08
to
hola, Darío !

1) segun parece, esta parte de la segunda (semi)propuesta... sigue en pie:


"> (creo que) hay algun detalle que no has expuesto -?-"

2) por lo que comentas ahora, me da la impresion de que tus codigos (en la hoja de productos ?)...
-> estan "almacenados" NO como datos numericos, sino como datos de texto -???-

3) otra posibilidad, es que se trate de una "mezcla" entre datos numericos y datos de texto -?-
esto, partiendo de que un control TextBox "devuelve" (por omision) datos de tipo String (Text...Box)
a menos que, si el dato en el TextBox se ha de buscar como numero, utilices: Val(TextBox_X) ;)

si cualquier duda (o informacion adicional)... comentas ?
saludos,

hector.

__ la consulta original __

> Habias entendido bien inicialmente.
> Cuando escribo en el textbox2 el codigo 3 o 31 o 312 o cualquier codigo de dos o tres digitos que comience con 3

> el textbox18 y el textbox54 me muestran la informacion relativa al codigo 3.


> Como esos codigos no existen (el 31, el 312 y cualquier codigo de dos o tres digitos que comience con 3)

> quiero que el texbox muestre N/A.
>
> Los codigos que tengo actualmente en la hoja productos son los siguientes:
> 1, 2, 3, 4, 5, 6, 7, 3100, 3101, 3102 ¦ 3272.
> Es decir, tengo siete codigos de un solo digito y tengo 170 codigos de cuatro digitos

> los cuales comienzan en el 3100 y terminan en el 3272. No tengo mas codigos, por los momentos.
>

> Yo queria usar un codigo parecido a la funcion buscarv para obtner informacion de la hoja productos


> y luego enviarla a la hoja compras usando como puente entre ambas hojas el formulario, sin tener que usar una tercera hoja.
>

> Es decir que quiero tomar la informacion de la hoja productos, ponerla en el formulario y de alli enviarla a la hoja compras.
>
> Actualmente tengo una hoja llamada factura donde con la funcion buscarv tomo la informacion de la hoja productos


> y de alli la llevo al formulario y luego a la hoja compras, pero justamente

> queria eliminar la hoja factura para llevar la informacion directamente desde la hoja productos al formulario...


GRIEGO59

unread,
May 5, 2008, 8:55:01 AM5/5/08
to
Hola Hector Miguel !

La verdad no se que información adicional darte. : (
Revisé el formato de mis códigos de producto, es general.
Les asigné formato de número y sigue igual.
Usé el val(textBox2) y sigue igual.

Me di cuenta del comportamiento del cursor al escribir el código del producto.

En un principio el cursor está posicionado en a1.
Vamos a suponer que quiero escribir el código de producto 3125.

Al escribir, en textbox2: el primer dígito del código del producto 3125, es
decir, 3:

La macro no sabe aun si yo quiero buscar el resultado del código de producto
3 o el código del producto 3125.

El cursor se posiciona en b4.

Textbox18 muestra el contenido de b4.

Al escribir, en textbox2: el segundo dígito del código del producto 3125, es
decir, 31:

La macro no consigue el código 31.

El cursor se ubica en a1.

Textbox18 sigue mostrando el contenido de b4.

La macro sabe que ya no estoy buscando el código de producto 3, sino uno con
más dígitos, pero no borra b4.

Al escribir, en textbox2: el tercer dígito del código del producto 3125, es
decir, 312:

Igual que con el segundo dígito.

Al escribir, en textbox2: el cuarto dígito del código del producto 3125, es
decir, 3125:

El cursor se ubica en b142

Textbox18 cambia y muestra el contenido de b142, como debe ser y como deseo.
Pero mientras el código de producto no ha sido completamente escrito en
textbox2, Textbox18 muestra b4, cuando debería mostrar nada o N/A.

No sería bueno indicarle a la macro que no haga nada hasta presionar enter?

Darío


"Héctor Miguel" escribió:

Héctor Miguel

unread,
May 5, 2008, 9:25:19 AM5/5/08
to
hola, Darío !

> La verdad no se que informacion adicional darte. : (
> Revise el formato de mis codigos de producto, es general.
> Les asigne formato de numero y sigue igual. Use el val(textBox2) y sigue igual.
> Me di cuenta del comportamiento del cursor al escribir el codigo del producto.
> En un principio el cursor esta posicionado en a1.
> Vamos a suponer que quiero escribir el codigo de producto 3125.
> Al escribir, en textbox2: el primer digito del codigo del producto 3125, es decir, 3:
> La macro no sabe aun si yo quiero buscar el resultado del codigo de producto 3 o el codigo del producto 3125.
> El cursor se posiciona en b4. (...)
> No seria bueno indicarle a la macro que no haga nada hasta presionar enter?

1) tienes razon... hay un "ligero" detalle que he "pasado por alto" (obviando lo que estaba "frente a mi nariz") :-((
-> las acciones de busqueda las has puesto en el evento '_change' de un control TextBox
-> este evento se dispara por cada "cambio" que ocurre en el contenido del cuadro de texto
(es decir, por cada pulsacion de teclado que hagas mientras ese control tenga el "foco") :-((

2) para indicarle al codigo que no haga nada "hasta presionar enter" (o algun otro control, commandbutton, evento, ...)
prueba cambiando (todas) las instrucciones que tienes en el evento '_change' de ese control (p.e.) al evento '_exit'
o comprobando el Cells.Find(.... hasta que pulses en algun commandbutton (o ?????)

(por esto es que suponia que ya hubiera una (pre)seleccion anterior) :D

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el resto de la consulta __


> Textbox18 muestra el contenido de b4.

> Al escribir, en textbox2: el segundo digito del codigo del producto 3125, es decir, 31:
> La macro no consigue el codigo 31.


> El cursor se ubica en a1.
> Textbox18 sigue mostrando el contenido de b4.

> La macro sabe que ya no estoy buscando el codigo de producto 3, sino uno con mas digitos, pero no borra b4.
> Al escribir, en textbox2: el tercer digito del codigo del producto 3125, es decir, 312:
> Igual que con el segundo digito.
> Al escribir, en textbox2: el cuarto digito del codigo del producto 3125, es decir, 3125:


> El cursor se ubica en b142
> Textbox18 cambia y muestra el contenido de b142, como debe ser y como deseo.

> Pero mientras el codigo de producto no ha sido completamente escrito en textbox2
> Textbox18 muestra b4, cuando deberia mostrar nada o N/A.


GRIEGO59

unread,
May 5, 2008, 9:31:01 PM5/5/08
to
Hola, Hector Miguel !
Gracias por tu ayuda. : )
Ya funciona bien.
Darío.


"Héctor Miguel" escribió:

> hola, Darío !

0 new messages