Programar una tecla o teclas de función y que ejerza cierta acción

Tengo un formulario donde registro las visitas de pacientes que acuden en cierto tiempo programado a sus chequeos. En el mismo formulario llevamos el historial clínico (relacionado a otra tabla) en otro formulario (subformulario).

La pregunta es: Como puedo programa una tecla para que presionándola (si es posible que fueran las teclas de función F1, F2... F12) me hagan cierta acción, como por ejemplo.
Si estoy capturando en un campo Memo y si presiono la tecla F12 me escriba la fecha actual, si presiono la tecla F11 me escriba la palabra Diagnostico, etc.
Puede que sea algo sencillo, pero acudo a tus conocimientos para poder eficientar los procesos.

1 Respuesta

Respuesta
1

Porque es un proceso laborioso, pues tendrás que programar cada botón en cada control:

Lo primero de todo, es sacar las propiedades del formulario, y en la pestaña Eventos, le pones la propiedad "Tecla de vista previa" a Sí.

Luego, por ejemplo, en tu campo Memo, vas a la pestaña Eventos, y en "Al bajar una tecla" le das a generar código y pones:

Private Sub NombredelcampoMemo_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF12 Then
Me.Refresh
mivalor = Nz(Me.txt0.Value, "")
Me.txt0.Value = mivalor & " " & Date
End If
If KeyCode = vbKeyF11 Then
Me.Refresh
mivalor = Nz(Me.txt0.Value, "")
Me.txt0.Value = mivalor & " Diagnóstico "

Me.txt0.SelStart = Len(Me.txt0.Value) + 1
End If
End Sub

Y esto lo tendrás que hacer con cada campo y para cada tecla que quieras programar.

Sólo tienes que cambiar lo que está en negrita por los nombres de tus cajas de texto, etc...

Para no tener que declarar la variable miValor en cada procedimiento, pon en el módulo esta línea debajo de Option Compare Database: Dim mi valor as variant.

Por último, comentarte que la línea Me.Txt0.SelStart = Len(Me.Txt0. Value) + 1 lo que hace es desplazar el cursor una posición a la derecha, para que puedas seguir escribiendo, pues si no la pones al introducir un valor de texto, te queda seleccionado todo el campo.

Espero que te sirva y sea lo que estás buscando.

Primeramente gracias por la respuesta Sveinbojorn.

Te comento lo que sucede después de agregar el código.

Envía el siguiente error de compilación.

"No se encontró el método o dato miembro" y hace referencia a txt0.

He de comentarte que txt0 a como lo entiendo en tu ejemplo, no se refiere a un campo que este en la base de datos, sino que sea una expresión (palabra) que se escriba por si sola (solo en el campo memo cuando este describiendo la conclusión de la visita medica) al presionar cualquier tecla de función que se programe (como una equivalencia).

Ejemplo:

Fecha: <- Aquí tuve que presionar la tecla F11 (Se supone que debe de poner esa palabra en automático)

Diagnostico: <- Aquí tuve que presionar la tecla F12 y ya continuo escribiendo (Igual se supone que puso esa palabra y ya continuo escribiendo)

Tal vez no me de a entender por lo que te pido una disculpa.

En espera y gracias nuevamente por tu ayuda.

Tienes que cambiar en el código que te propuse txt0 por el nombre que tenga tu campo donde vas a introducir los datos a través de las teclas de función F11, F12... El nombre lo puedes ver en vista diseño del formulario, propiedades del cuadro de texto en cuestión, pestaña otras, nombre.

Si se llama, por ejemplo, Observaciones, el código sería:

Private Sub Observaciones_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF12 Then
Me.Refresh
mivalor = Nz(Me.Observaciones.Value, "")
Me.Observaciones.Value = mivalor & " " & Date
End If

.... etc

En este código, al pulsar F12 (el fragmento que puse aquí arriba), te pone en el cuadro de texto la fecha actual (por ej, 14/11/2012). Si lo que quieres es que escriba "Fecha", tienes que hacerlo igual que para "Diagnóstico":

Me.Observaciones.Value = mivalor & " Fecha:"
Me.Observaciones.SelStart = Len(Me.Observaciones.Value) + 1

Ahora una pregunta: ¿Los valores que quieres introducir (Fecha, Diagnóstico...) son siempre la primera palabra del campo? Si fueras así, el código lo puedes simplificar más:

Private Sub Observaciones_KeyDown(KeyCode As Integer, Shift As Integer)

`Pulsamos F11 y escribe Fecha:
If KeyCode = vbKeyF11 Then
Me.Observaciones.Value = mivalor & " Fecha:"
Me.Observaciones.SelStart = Len(Me.Observaciones.Value) + 1
End If

'Pulsamos F12 y escribe Diagnóstico

If KeyCode = vbKeyF12 Then
Me.Observaciones.Value = mivalor & " Diagnóstico:"
Me.Observaciones.SelStart = Len(Me.Observaciones.Value) + 1
End If

End Sub

Hola,

Al parecer ya funciona, pero tengo ahora este problema.

Resulta ser que si presiono F11 o F12 me activa las funciones de access, como

F11 Abre el panel de tablas

F12 Guardar como ...

No hay alguna manera para que cuando este en el campo memo, solo apliquen las funciones en ese momento o sugiéreme que combinación de teclas puedo usar.

Otra cosa, cuando presiono las teclas previamente programadas (F11, F12) el texto siempre se va al final de la ultima palabra.

Ejemplo:

Pac 33 años, masculino, acude por... (di un enter)

(aquí presione F12) y hace lo siguiente:

Pac 33 años, masculino, acude por... Diagnostico <-- se regresa al final de esta linea y aquí lo pone.

En espera de tus comentarios

Gracias.

Prueba así. La función la saqué de www.lawebdelprogramador.com:

Private Sub Observaciones_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF11
Me.Refresh
miValor = Nz(Me.Observaciones.Value, "")
Me.Observaciones.Value = miValor & vbCrLf & "Fecha: "
Me.Observaciones.SelStart = Len(Me.Observaciones.Value) + 1
Case vbKeyF12
Me.Refresh
miValor = Nz(Me.Observaciones.Value, "")
Me.Observaciones.Value = miValor & vbCrLf & "Diagnóstico: "
Me.Observaciones.SelStart = Len(Me.Observaciones.Value) + 1
End Select
Call AnulaTecla(KeyCode, vbKeyF11, vbKeyF12)
End Sub

Function AnulaTecla(KeyCode As Integer, ParamArray Keys() As Variant) As Integer
Dim Tecla As Variant
For Each Tecla In Keys
If KeyCode = Tecla Then
KeyCode = 0
Exit Function
End If
Next
End Function

Comentarios:
Tendrás que poner un Case vbKeyF.. por cada tecla de función que vayas a usar.
En Call AnulaTecla, tendrás que poner también los mismos vbKeyF...
& VbCrLf & Esto sirve para insertar un salto de línea (como si le dieras a Enter). Entiendo que lo que intentas hacer es algo así:

Pac 33 años, masculino, acude por... (siguiente linea)
Diagnostico: el que sea (siguiente linea)
Fecha: la que sea...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas