SendKeys y Num Lock

15/02/2006 - 06:43 por Marianoh | Informe spam
Hola de nuevo KL y quien quiera darme una mano:

Mi codígo:

Private Sub Workbook_Activate()
Application.OnKey "{Enter}", "Tabular"
End Sub

Private Sub Workbook_Deactivate()
Application.OnKey "{Enter}"
End Sub

'Y en un modulo normal...
Private Sub Tabular()
SendKeys "{Tab}"
End Sub

Mi problema: Cuando se procesa el SendKeys, sobre todo en una celda
en la que el ingreso desata mucho cálculo y en una máquina lenta, se
produce un parpadeo del Num Lock en el teclado. Esto, si el usuario es
muy rápido cargando, provoca que el siguiente número que ingrese (en
la celda a donde lo envía el SendKeys) la máquina lo reciba con Num
Lock desactivado y por ej. en vez de tomar "3", tome PgDown y el
usuario (que normalemente mira poco y nada la pantalla) termina
cargando datos 20 filas abajo.
Se me ocurre que esto es un problema del Sistema Operativo (por
cierto W98) y no se si tenga solución, pero si alguién sabe o le
paso...bueno en fin...Gracias a todos.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
16/02/2006 - 00:59 | Informe spam
hola, Mariano !

Mi codigo:
Private Sub Workbook_Activate()
Application.OnKey "{Enter}", "Tabular"
End Sub
Private Sub Workbook_Deactivate()
Application.OnKey "{Enter}"
End Sub
Y en un modulo normal...
Private Sub Tabular()
SendKeys "{Tab}"
End Sub
... SendKeys... en una celda... que... desata mucho calculo y... maquina lenta ... produce un parpadeo del Num Lock en el teclado
... si el usuario es muy rapido... provoca que el siguiente numero que ingrese... la maquina lo reciba con Num Lock desactivado y
... en vez de... "3", tome PgDown y el usuario (que normalemente mira poco y nada la pantalla) termina cargando datos 20 filas abajo...



[tal parece que] combinar a un usuario 'rapido'... en una maquina 'lenta'... y usar el 'sendkeys'... no resulta muy 'confiable' :-(
prueba con las siguientes lineas de codigo...
en el modulo del libro [ThisWorkbook] ==Dim MoverSeleccion As Boolean
Private Sub Workbook_Open()
MoverSeleccion = Application.MoveAfterReturn
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlToRight
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.MoveAfterReturnDirection = xlDown
Application.MoveAfterReturn = MoverSeleccion
End Sub
Respuesta Responder a este mensaje
#2 Marianoh
17/02/2006 - 11:56 | Informe spam
Hector, otra vez muchas gracias por tu interés:

Otra vez el problema es que he omitido incluir un detalle que
consideré [erroneamente] irrelevante.

En este libro necesito hacer un SendKeys "{Tab}" porque así salteo
algunas columnas protegidas y voy directamente a la columna que recibe
datos del usuario, para colmo estoy limitado en esto porque la
dispocición de las columnas es un requerimiento del cliente.

Por ahora me arreglé cambiando el teclado (que algo ayuda) y
advirtiéndole a los usuarios que si no les cambian su PII voy a
martillarles un dedo.

Por cierto el código de Simular el Tab con SendKeys, si mal no
recuerdo te lo pedí prestado hace tiempo, asique para no perder la
costumbre, me sigo llevando ideas tuyas... [esta vez los corchetes] :-)

Saludos:Mariano
Respuesta Responder a este mensaje
#3 Héctor Miguel
18/02/2006 - 04:56 | Informe spam
hola, Mariano !

... el problema es que he omitido incluir un detalle que considere [erroneamente] irrelevante.
En este libro necesito hacer un SendKeys "{Tab}" porque asi salteo algunas columnas protegidas
y voy directamente a la columna que recibe datos del usuario
... estoy limitado en esto porque la disposicion de las columnas es un requerimiento del cliente.
... me arregle cambiando el teclado (que algo ayuda) y advirtiendole... que si no les cambian su PII voy a martillarles un dedo...



suponiendo que 'la proteccion' de las columnas es por efectos de proteger 'esa/s' hoja/s...
solo agrega en el evento '_open' la siguiente instruccion [suponiendo que se trata de la 'hoja1']...
-> Worksheets("Hoja1").EnableSelection = xlUnlockedCells

es decir... puedes 'mantener' el resto de los codigos propuestos 'intactos'... y modificar el '_open' del libro a...
Private Sub Workbook_Open()
MoverSeleccion = Application.MoveAfterReturn
Worksheets("Hoja1").EnableSelection = xlUnlockedCells
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Marianoh
18/02/2006 - 15:59 | Informe spam
Hector:

Mi solución:

1- Ingresar la base de datos (+/- 200 registros de 3 campos) en una
matriz al abrir el libro.
2- Cada vez que el usuario ingresa datos en la columna que me traia
problemas, reemplazar el Sendkey y posicionarlo por código.
3- Para evitar el delay, remplazar los buscarv por busqueda binaria
dentro de la matriz.

Tamaño de mi solución: Cambiar digamos 10 líneas ["ineficientes"]
por alrededor de 30 líneas de código.

Tu solución: agregar 1 línea.

Asique ahora te dejo otro problema, este solo con fórmulas y ya
resuelto:

Celda A1: 18/02/06 00:56
Celda A2: 17/02/06 07:56
Celda A3: ¡-A2 (formato: "[h]:mm")
Valor de A3: 17:00

Quiere decir que te tomaste 17 horas para solucionarme otra vez la
existencia.

Otra vez muchisimas gracias.
Mariano
Respuesta Responder a este mensaje
#5 Héctor Miguel
19/02/2006 - 08:56 | Informe spam
hola, Mariano !

... ahora te dejo otro problema, este solo con formulas y ya resuelto:
Celda A1: 18/02/06 00:56
Celda A2: 17/02/06 07:56
Celda A3: ¡-A2 (formato: "[h]:mm")
Valor de A3: 17:00
... te tomaste 17 horas para solucionarme otra vez la existencia...



[creo que] 'me tome' un tiempo [ligeramente] menor que las 17 horas que transcurrieron...
entre la aparicion en el grupo, de la consulta y la respuesta :D [digamos que]
-> lo que me tarde en 'asociar' la propiedad aplicable [xlunlockedcells]...
-> con el 'permiso de navegar' por celdas en una hoja protegida ;)
[el resto del tiempo, estuve 'desconectado', y alejado de la pc] :))

[por cierto]... tu 'uso horario' va 3 horas delante del mio [hora central de Canada, EUA y Cd. de Mexico] :)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida