2012-07-06 4 views
5

In Excel, ho tre colonne:Come avvolgere il cursore Excel per mantenerlo entro una gamma specifica

column1, column2, column3 

sto entrando dati in Excel utilizzando uno scanner di codici a barre che è collegato a un IPAD. Lo scanner di codici a barre invia ENTER dopo ogni scansione. Credo che posso impostare eccellono in modo tale che ENTER causerebbe la colonna successiva da selezionare (al posto della riga successiva)

Tuttavia, non so come farlo andare alla riga successiva dopo c'è un ENTER rilevato in column3. In questo momento ho questo:

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 

Ma Target.Value rileva solo la stringa all'interno della cellula, che non rileva ciò che è stato premuto.

Come si ottiene la riga successiva da selezionare dopo ENTER rilevato in column 3?

risposta

10

Per questo non è necessario il codice vba.

Il modo più semplice è sbloccare le celle in queste tre colonne e bloccare il resto delle celle. Una volta fatto, proteggi l'intero foglio. Tuttavia, quando proteggi, assicurati di deselezionare l'opzione chiamata Select Locked Cells Vedi screenshot. Le colonne gialle non sono protette.

enter image description here

Il passo successivo è quello di impostare eccelle in modo che dopo i dati vengono immessi e partecipa a chiave viene premuto, il cursore si sposta alla colonna successiva. Si può fare (Say in Excel 2010) dal File TAB | Options | Excel Options | Advanced

enter image description here

Quando il cursore raggiunge l'ultima colonna e viene immesso dei dati e la si preme ENTER, il cursore si sposterà automaticamente alla riga successiva. Vedi l'istantanea.

enter image description here

HTH

+1

Ho 10 anni di esperienza con Excel e io non lo sapevo. grazie mille per il tuo straordinario aiuto –

+0

Ah, l'effetto della macchina da scrivere. Bello! +1 – JimmyPena

4

Oltre alla eccellente suggerimento di Siddharth, ecco un approccio basato su eventi:

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

questo è fantastico !!! qual è la ragione per cui stai usando NULLA? –

+0

'Is Nothing' verifica se la cella che è stata modificata è contenuta nell'intervallo denominato" DATA "(cioè se 'Target' si interseca con' rngData'). Ti consente di modificare il comportamento predefinito solo per l'intervallo di input desiderato. –