2012-07-06 17 views
5

En Excel, tengo tres columnas:Cómo envolver cursor Excel para mantenerlo dentro de un rango específico

column1, column2, column3 

estoy entrando datos en Excel usando un escáner de código de barras que se adjunta a un IPAD. El escáner de código de barras envía ENTER después de cada escaneo. Creo que puedo fijar sobresalen hacia arriba de tal manera que ENTER causaría la siguiente columna a seleccionar (en lugar de la fila siguiente)

Sin embargo, no saben cómo tener que ir a la siguiente fila después hay una ENTER detectado en column3. En este momento tengo esto:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    If Target.Column = 3 Then 
     If Target.Value = "{enter}" Then 
      MsgBox "SDf" 
     End If 
    End If 
End Sub 

Pero Target.Value sólo detecta la cadena dentro de la célula, que no detecta lo que se ha pulsado.

¿Cómo puedo obtener la próxima fila para seleccionar después de detectar ENTER en column 3?

Respuesta

10

No necesita el código vba para esto.

La manera más fácil es desbloquear las celdas en esas tres columnas y bloquear el resto de las celdas. Una vez hecho esto, proteja toda la hoja. Sin embargo, al proteger, asegúrese de desmarcar la opción llamada Select Locked Cells Ver captura de pantalla. Las columnas amarillas están desprotegidas.

enter image description here

El siguiente paso es configurar Excel para que después se introducen los datos y la tecla Intro se pulsa, el cursor se mueve a la siguiente columna. Usted puede hacer eso (Say en Excel 2010) de la File TAB | Options | Excel Options | Advanced

enter image description here

Cuando el cursor llega a la última columna y se introducen los datos y la se pulsa enter, el cursor se moverá automáticamente a la siguiente fila. Ver instantánea.

enter image description here

HTH

+1

Tengo 10 años de experiencia con Excel y yo no sabía esto. muchas gracias por su increíble ayuda –

+0

Ah, el efecto de máquina de escribir. ¡Bonito! +1 – JimmyPena

4

Además de una excelente sugerencia de Siddharth, aquí es un enfoque basado en eventos:

Private Sub Worksheet_Change(ByVal Target As Range) 

    'named (contiguous) range on input sheet 
    Const DATA_NAME As String = "DATA" 
    Dim rngData As Range, numCols As Long 

    If Target.Cells.Count > 1 Then Exit Sub 

    Set rngData = Me.Range(DATA_NAME) 
    numCols = rngData.Columns.Count 

    If Not Intersect(rngData, Target) Is Nothing Then 
     If Target.Column < rngData.Columns(numCols).Column Then 
      Target.Offset(0, 1).Select 
     Else 
      Target.Offset(1, -(numCols - 1)).Select 
     End If 
    End If 

End Sub 
+0

+ 1 Nice One Tim :) –

+0

esto es genial! ¿Cuál es la razón por la que estás usando NO ES NADA? –

+0

'No es nada' prueba para ver si la celda que se modificó estaba contenida en el rango con nombre" DATA "(es decir, si' Target' se cruza con 'rngData'). Le permite cambiar el comportamiento predeterminado solo para el rango de entrada deseado. –

Cuestiones relacionadas