TextBox1.SetFocus - no me funciona

23/01/2009 - 22:55 por GRIEGO59 | Informe spam
Hola!
Tengo un formulario "InventarioII" con un Textbox1 y un Textbox2.
La idea es ir pasando un lector de código de barra por los diferentes
productos en existencia física y que se remarquen en color amarillo los
mismos productos en el listado de inventario que tengo en una hoja de Excel.

El lector de código de barras escribe los códigos de los productos en Textbox1
y luego se resalta en color amarillo la línea correspondiente, pero yo
quiero que una vez que el lector capta el codigo, el cursor se posicione
automáticamente en Textbox1, pero en lugar de eso, el cursor se queda en
Textbox2. estoy usando el código TextBox1.SetFocus pero no me funciona. Yo se
que estoy haciendo algunas cosas mal, pero no sé que es:

En m1 tengo la siguiente fórmula
=SI(L1<>0;BUSCARV($L1;InventarioII!$A:$I;9;0);1)

En la cada celda de la columna I tengo esta fórmula =fila()

Y el código del formulario es el siguiente:

Private Sub TextBox1_AfterUpdate()
Sheets("InventarioII").[L1] = TextBox1.Value
If Evaluate("iserror(m1)") Then MsgBox "El código de la blusa no existe!": _
TextBox1.SetFocus: Exit Sub

ultF1 = Sheets("InventarioII").[m1].Value
Sheets("InventarioII").Select
Range(Cells(ultF1, 1), Cells(ultF1, 9)).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
TextBox1 = Empty
TextBox1.SetFocus
End Sub

Que estoy haciendo mal? Alquien puede ayudarme?

Darío.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
24/01/2009 - 04:08 | Informe spam
hola, Darío !

1) "mueve" el codigo del evento '_afterupdate' al evento '_exit' del control textbox1

2) cambia la condicionante del codigo y en vez de tratar de que "mantenga el foco", EVITA que se salga del textbox1
de:
If Evaluate("iserror(m1)") Then MsgBox "El codigo de la blusa no existe!": _
TextBox1.SetFocus: Exit Sub
a:
If [iserror(m1)] Then MsgBox "El codigo de la blusa no existe!": _
Cancel = True: Exit Sub

saludos,
hector.

__ OP __
Tengo un formulario "InventarioII" con un Textbox1 y un Textbox2.
La idea es ir pasando un lector de codigo de barra por los diferentes productos en existencia fisica
y que se remarquen en color amarillo los mismos productos en el listado de inventario que tengo en una hoja de Excel.
El lector de codigo de barras escribe los codigos de los productos en Textbox1 y luego se resalta en color amarillo la linea correspondiente
pero yo quiero que una vez que el lector capta el codigo, el cursor se posicione automaticamente en Textbox1
pero en lugar de eso, el cursor se queda en Textbox2. estoy usando el codigo TextBox1.SetFocus pero no me funciona.
Yo se que estoy haciendo algunas cosas mal, pero no se que es:

En m1 tengo la siguiente formula =SI(L1<>0;BUSCARV($L1;InventarioII!$A:$I;9;0);1)
En la cada celda de la columna I tengo esta formula =fila()
Y el codigo del formulario es el siguiente:

Private Sub TextBox1_AfterUpdate()
Sheets("InventarioII").[L1] = TextBox1.Value
If Evaluate("iserror(m1)") Then MsgBox "El codigo de la blusa no existe!": _
TextBox1.SetFocus: Exit Sub
ultF1 = Sheets("InventarioII").[m1].Value
Sheets("InventarioII").Select
Range(Cells(ultF1, 1), Cells(ultF1, 9)).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
TextBox1 = Empty
TextBox1.SetFocus
End Sub

Que estoy haciendo mal? Alquien puede ayudarme?
Respuesta Responder a este mensaje
#2 GRIEGO59
25/01/2009 - 11:29 | Informe spam
Hola Hector!

Ya hice lo que me recomendaste pero sigue igual.

Debido a que son mas o menos 700 blusas y estan a mas o menos un metro de
distancia de la computadora, es dificil acercarse a la computadora a
presionar enter para que el cursor se posicione en Textbox1 con cada blusa
que se escanea.

Actualmente ese trabajo lo estamos haciendo entre dos personas, uno escanea
y el otro presiona enter con cada escaneo.

Yo creo que como el escaner salta al Textbox2 despues de escribir el código
en Textbox1, las instrucciones asociadas al Textbox1 se ejecutan antes que el
cursor se posicione en Textbox2 y por eso aunque Textbox1 ejecuta la
isntrucción TextBox1.SetFocus luego salta a Textbox2.

Yo intenté poner la instrucción TextBox1.SetFocus en Textbox2 de manera que
cuando el cursor se posicione en Textbox2, se ejecute el TextBox1.SetFocus,
pero no sé cual evento usar.

"Héctor Miguel" escribió:

hola, Darío !

1) "mueve" el codigo del evento '_afterupdate' al evento '_exit' del control textbox1

2) cambia la condicionante del codigo y en vez de tratar de que "mantenga el foco", EVITA que se salga del textbox1
de:
If Evaluate("iserror(m1)") Then MsgBox "El codigo de la blusa no existe!": _
TextBox1.SetFocus: Exit Sub
a:
If [iserror(m1)] Then MsgBox "El codigo de la blusa no existe!": _
Cancel = True: Exit Sub

saludos,
hector.

__ OP __
> Tengo un formulario "InventarioII" con un Textbox1 y un Textbox2.
> La idea es ir pasando un lector de codigo de barra por los diferentes productos en existencia fisica
> y que se remarquen en color amarillo los mismos productos en el listado de inventario que tengo en una hoja de Excel.
> El lector de codigo de barras escribe los codigos de los productos en Textbox1 y luego se resalta en color amarillo la linea correspondiente
> pero yo quiero que una vez que el lector capta el codigo, el cursor se posicione automaticamente en Textbox1
> pero en lugar de eso, el cursor se queda en Textbox2. estoy usando el codigo TextBox1.SetFocus pero no me funciona.
> Yo se que estoy haciendo algunas cosas mal, pero no se que es:
>
> En m1 tengo la siguiente formula =SI(L1<>0;BUSCARV($L1;InventarioII!$A:$I;9;0);1)
> En la cada celda de la columna I tengo esta formula =fila()
> Y el codigo del formulario es el siguiente:
>
> Private Sub TextBox1_AfterUpdate()
> Sheets("InventarioII").[L1] = TextBox1.Value
> If Evaluate("iserror(m1)") Then MsgBox "El codigo de la blusa no existe!": _
> TextBox1.SetFocus: Exit Sub
> ultF1 = Sheets("InventarioII").[m1].Value
> Sheets("InventarioII").Select
> Range(Cells(ultF1, 1), Cells(ultF1, 9)).Select
> With Selection.Interior
> .ColorIndex = 6
> .Pattern = xlSolid
> End With
> TextBox1 = Empty
> TextBox1.SetFocus
> End Sub
>
> Que estoy haciendo mal? Alquien puede ayudarme?



Respuesta Responder a este mensaje
#3 Héctor Miguel
26/01/2009 - 06:22 | Informe spam
hola, Darío !

Ya hice lo que me recomendaste pero sigue igual.



(podrias expones +/- exactamente "como" ha quedado el codigo en tus procedimientos de eventos ?)

Yo creo que como el escaner salta al Textbox2 despues de escribir el codigo en Textbox1
las instrucciones asociadas al Textbox1 se ejecutan antes que el cursor se posicione en Textbox2
y por eso aunque Textbox1 ejecuta la isntruccion TextBox1.SetFocus luego salta a Textbox2.
Yo intente poner la instruccion TextBox1.SetFocus en Textbox2, de manera que
cuando el cursor se posicione en Textbox2, se ejecute el TextBox1.SetFocus pero no se cual evento usar...



1) no puedes "mandar el foco" al objeto que lo retiene mientras no sepas cual (que lo reciba) habra de devolverselo -?-
lo mejor pudera ser "administrando" el evento '_exit' del textbox1 +/- como te indicaba en el mensaje anterior

2) si estas seguro de que al tomar del scaner el codigo de articulo se salta INMEDIATAMENTE al textbox2...
prueba la instruccion de "regresar el foco" al textbox1 (si hay errores) EN EL EVENTO '_enter' del textbox2

saludos,
hector.
Respuesta Responder a este mensaje
#4 GRIEGO59
26/01/2009 - 12:31 | Informe spam
Hola Hector!

(podrias expones +/- exactamente "como" ha quedado el codigo en tus procedimientos de eventos ?)



El código lo probé de dos formas, así:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("InventarioII").[L1] = TextBox1.Value
If [iserror(m1)] Then MsgBox "El codigo de la blusa no existe!": _
Cancel = True: Exit Sub
ultF1 = Sheets("InventarioII").[m1].Value
Sheets("InventarioII").Select
Range(Cells(ultF1, 1), Cells(ultF1, 9)).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End Sub


y así:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("InventarioII").[L1] = TextBox1.Value
If [iserror(m1)] Then MsgBox "El codigo de la blusa no existe!": _
Cancel = True: Exit Sub
ultF1 = Sheets("InventarioII").[m1].Value
Sheets("InventarioII").Select
Range(Cells(ultF1, 1), Cells(ultF1, 9)).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
TextBox1 = Empty
TextBox1.SetFocus
End Sub

Y el cursor salta de textbox1 a textbox2, no se queda en textbox1 para yo
seguir escaneando, por lo que debo presionar enter con cada escaneo.

La idea es que con o sin error el cursor se posicine en Texbox1 al finalizar
la instrucción, de manera de escanear los códigos continuamente,
indefinidamente sin tener que pulsar enter cada vez que se escanea. Porque la
idea es escanear todas las blusas una detras de la otra sin pausa para
terminar mas rápido el inventario.

Por los momentos puse este mismo código que te he señalado arriba en
Textbox1 y Textbox2 simutáneamente, de manera que el cursor salta de textbox1
a textbox2 y de textbox2 a textbox1 cada vez que termina la instrucción, y de
forma indefinida y continua, para escanear indefinidamente las blusas sin
tener que presionar enter con cada escaneo. Aunque mi idea inicial es que
Textbox2 muestre la descripción de la blusa, pero eso de la descripción lo
haré mas adelante cuando termine de resolver esto de la continuidad.

Debido a que la descripcion de la blusa no es algo completa y absolutamente
necesario, porque en teoría el que está escaneando está lejos de la
computadora y no puede leer la descripción, yo intenté eliminar Textbox2 de
manera que si no hay otro Textbox, el cursor no le queda otra alternativa, se
ve obligado a quedarse en Textbox1. Pero esto no funcionó debido a que el
cursor se queda en Texbbox1 porque Excel no sabe si se ha terminado de
escribir el código, Excel se queda esperando que yo le indique que ya debe
ejecutar la instrucción porque ya se ha terminado de escribir el código, es
como cuando uno escribe en una celda pero no presiona Enter.

Ojalá puedas ayudarme, Hector!

Saludos,
Darío.
Respuesta Responder a este mensaje
#5 GRIEGO59
26/01/2009 - 13:05 | Informe spam
Hola Hector!

(podrias expones +/- exactamente "como" ha quedado el codigo en tus procedimientos de eventos ?)



El código lo probé de dos formas, así:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("InventarioII").[L1] = TextBox1.Value
If [iserror(m1)] Then MsgBox "El codigo de la blusa no existe!": _
Cancel = True: Exit Sub
ultF1 = Sheets("InventarioII").[m1].Value
Sheets("InventarioII").Select
Range(Cells(ultF1, 1), Cells(ultF1, 9)).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End Sub


y así:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("InventarioII").[L1] = TextBox1.Value
If [iserror(m1)] Then MsgBox "El codigo de la blusa no existe!": _
Cancel = True: Exit Sub
ultF1 = Sheets("InventarioII").[m1].Value
Sheets("InventarioII").Select
Range(Cells(ultF1, 1), Cells(ultF1, 9)).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
TextBox1 = Empty
TextBox1.SetFocus
End Sub

Y el cursor salta de textbox1 a textbox2, no se queda en textbox1 para yo
seguir escaneando, por lo que debo presionar enter con cada escaneo.

La idea es que con o sin error el cursor se posicine en Texbox1 al finalizar
la instrucción, de manera de escanear los códigos continuamente,
indefinidamente sin tener que pulsar enter cada vez que se escanea. Porque la
idea es escanear todas las blusas una detras de la otra sin pausa para
terminar mas rápido el inventario.

Por los momentos puse este mismo código que te he señalado arriba en
Textbox1 y Textbox2 simutáneamente, de manera que el cursor salta de textbox1
a textbox2 y de textbox2 a textbox1 cada vez que termina la instrucción, y de
forma indefinida y continua, para escanear indefinidamente las blusas sin
tener que presionar enter con cada escaneo. Aunque mi idea inicial es que
Textbox2 muestre la descripción de la blusa, pero eso de la descripción lo
haré mas adelante cuando termine de resolver esto de la continuidad.

Debido a que la descripcion de la blusa no es algo completa y absolutamente
necesario, porque en teoría el que está escaneando está lejos de la
computadora y no puede leer la descripción, yo intenté eliminar Textbox2 de
manera que si no hay otro Textbox, el cursor no le queda otra alternativa, se
ve obligado a quedarse en Textbox1. Pero esto no funcionó debido a que el
cursor se queda en Texbbox1 porque Excel no sabe si se ha terminado de
escribir el código, Excel se queda esperando que yo le indique que ya debe
ejecutar la instrucción porque ya se ha terminado de escribir el código, es
como cuando uno escribe en una celda pero no presiona Enter.

Ojalá puedas ayudarme, Hector!

Saludos,
Darío.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida