Activar y detener macro con cronometro

Quisiera una Macro que:

Cuando intercecte un caracteres en el textbox del formulario. Se active un cronometro de 5 segundos.

Si en 5 segundo no ha escrito mas de 6 caracteres; el texbox se limpia (borran los datos escritos) para que tengan que volver a comenzar (y sea un bocle). Si antes de 5 segundos ha introducido 6 caracteres o más la macro del cronómetro se detiene y no se borran los caracteres.

Lo que quiero lograr es que no introduzcan caracteres manuales. Solo por lector de tarjetas, cual lo introduce rápido. (En menos de 5 segundos)

Los caracteres contienen números y letras. La macro debería activarse sola cuando detecte caracteres en el textbox.

He intentado con: Application. OnTime Now + TimeValue("00:00:05"). Logro hacer lo que quiero. Pero solo me falta poder detener: Application. OnTime Now + TimeValue("00:00:05"). He intentado de todo con false. Pero no hay manera de detener la aplicación.

1 Respuesta

Respuesta
1

Para detener a "Application.OnTime", hay que usar su parámetro "Schedule" pero, por si acaso, en general "OnTime" es muy inestable, sobre todo cuando lo usas con más de un archivo abierto. Igual mira por aquí:

Deter reloj después de cerrar el formulario

Una cosa más, no tengo un lector de barra y/o de tarjetas para probar pero pon la propiedad "Locked" del "TextBox" en "True" y cuando actives tu "UserForm", así pongas el cursor en el "TextBox" no podrás escribir nada pero inténtalo con el lector y comenta que sucede. No pierdes nada intentando.

Abraham Valencia

¡Gracias! Por contestar; ya lo he resuelto de otra manera!

Lo que me comentas; si bloqueo el textbox. No lee la tarjeta tampoco. Esta bloqueaado completamente.

Lo resolví con 4 eventos diferentes:

1 en un modulo he ingresado un cronometro; que en una celda en la hoja1, en el Worksheet_Change(hoja1) si la celda cambia de nombre llamo 2 macros: 1 - limpia el textbox si en 4 segundo no han escribido más de 6 caracteres. 2- Reinicia el cronometro, para que siempre que llegue a 5, vuelva a comenzar.

En el userform textbox. Con el evento keyup: 2 condiciones:

Si hay más de 6 caracteres detiene la macro limpiar; si no vuelve a llamar al cronometro.

Esto me crea un bocle infinito. Que no deja escribir, porque en 4 segundo no podrán ingresar 10 caracteres manuales de letras y números.(Imposible.); Mientras que con el lector de tarjeta si ha podido. Le di muchas vueltas, pero me salio :). Si alguien necesita algo igual le dejo los códigos. Son bastantes. Por ello no los he puesto.

Nota: todo porque en el userform hay un listbox con un filtro asociado que al pasar la tarjeta le sale un historial de entradas y salida. Si no tuviese ese listbox. Solo llamo la macro limpia cada 5 segundo y es más fácil.

Saludos,

Aja, lo importante es que lo resolviste. Algún día me compraré un lector de ese tipo solo para hacer pruebas je je je

Salu2

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas