Situación, un subformulario donde se entran los artículos por referencias
para hacer una Oferta.

Existe una línea por artículo, tiene un total de 12 campos dispuestos en
columnas, lo habitual es poner la referencia, para que salgan todos los
datos, posteriormente el cursor se sitúa en el campo Cantidad para indicar
las unidades de esa referencia, al pulsar intro, nos vamos a un nuevo
registro al campo Referencia.
Por comodidad, he puesto la propiedad Punto de Tabulación a No en todos los
campos excepto el de Referencia y Cantidad, de este modo se introducen los
datos muy rápido, se evita hacer pasar el cursor por campos que
habitualmente no se modifican los datos.

Hasta aquí todo correcto y sin problemas por mi parte y espero explicarme
correctamente.

Pero es posible que el usuario quiera modificar esos datos por los que no
pasa y entonces utilizo la flecha de la izquierda para ir retrocediendo,
campo a campo. En el eventoAl bajar una tecla...

    'Comprobar si es la flecha izq., en este caso, situarse en el campo
anterior.
    If KeyCode = 37 Then
        Me.txtDenominación.SetFocus
    End If

Esto también funciona y es correcto, pero aburrido el tener que poner el
nombre del campo anterior.

¿¿Cual es al idea y la pregunta??

¿¿Como puedo mandar el cursor al campo que tenga el anterior índice de
tabulación, desde el cuadro de texto que estoy situado??

Es decir, estoy en txtMárgen (índice tabulación 6) y quiero situarme en
txtMárgenMínimo (índice 5)

Con Me(Screen.ActiveControl.EventProcPrefix).TabIndex, consigo conocer el
número de índice que estoy situado, perrrrrrrrrrrrro ya no sé continuar.

Seria establecer el foco en lugar del con el nombre del control, con el
número de índice.



Private Sub txtCantidad_KeyDown(KeyCode As Integer, Shift As Integer)
'Al bajar una tecla

    'Comprobar si es la flecha izq., en este caso, situarse en el campo
anterior.
    If KeyCode = 37 Then
        'Esto no funciona, pero es lo que me gustaría.
        Me.SetFocus (Me(Screen.ActiveControl.EventProcPrefix).TabIndex-1)
    End If



RESPONDE HAPPY
==============

Hola Mc, mira a ver si te sirve algo como esto.

Lo primero, debería ser poner la "Tecla de vista previa" del formulario a
Sí. Y después en el evento "al bajar una tecla" del formulario:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim i As Integer
Dim ctl As Control

  i = Me.ActiveControl.TabIndex

  If KeyCode = 37 Then
    For Each ctl In Me.Controls
      Select Case ctl.ControlType
      'compruebo que sea algún tipo de control
      'que admita esta propiedad
      Case acTextBox, acComboBox, acListBox
        'si tiene el punto de tabulación anterior...
        If ctl.TabIndex = i - 1 Then
          ctl.SetFocus
          Exit For
        End If
      End Select
    Next
  End If

End Sub

Esto lo he probado con access 2000, y parece funcionar en un caso estandard.
Es posible que tu formulario (o subformulario) tenga alguna particularidad
diferente que haga cambiar el código. En todo caso, es una manera o una idea
de cómo hacerlo.



    Source: geocities.com/es/ensolva/Descargas/Documentos

               ( geocities.com/es/ensolva/Descargas)                   ( geocities.com/es/ensolva)                   ( geocities.com/es)