2012-07-06 14 views
5

以内にそれを維持するために、Excelのカーソルをラップするために、私は3つの列があります。バーコードスキャナは、スキャンごとにENTERを送信します。 ENTERが次の列の代わりに(次の行ではなく)次の列が選択されるようにExcelを設定できると信じていますENTERの後に次の行に移動する方法がわかりませんcolumn3で検出されました。今私は、この持っている:はどのようにExcelで特定の範囲

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 

しかしTarget.Valueセル内の文字列のみを検出し、それが押されたものを検出しません。

ENTERcolumn 3で検出された後、次の行を選択するにはどうすればよいですか?

答えて

10

これにはvbaコードは必要ありません。

最も簡単な方法は、3つの列のセルをロック解除し、残りのセルをロックすることです。完了したら、シート全体を保護します。ただし、保護する場合は、Select Locked Cellsというオプションをオフにしてください。スクリーンショットを参照してください。黄色の列は保護されていません。

enter image description here

次のステップは、データを入力し、入力された後にキーを押すと、カーソルは次の列に移動するようにExcelを設定することです。あなたは行うことができます(例えばエクセル2010年)からFile TAB | Options | Excel Options | Advanced

enter image description here

カーソルが最後の列に達してデータが入力され、押下すると、カーソルが自動的に次の行に移動します。スナップショットを参照してください。

enter image description here

HTH

+1

私はエクセルでの10年の経験を持っており、私はこのことを知りませんでした。あなたの驚くべき助けをありがとう。 –

+0

ああ、タイプライターエフェクト。ニース! +1 – JimmyPena

4

シッダールタの優れた提案に加えて、ここではイベントベースのアプローチです:

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

これは素晴らしいです!!!あなたは何も使っていない理由は何ですか? –

+0

変更されたセルが名前付き範囲 "DATA"に含まれているかどうか( 'Target'が' rngData'と交差するかどうか)は 'Is Nothing'テストによって確認されます。これにより、目的の入力範囲に対してのみデフォルトの動作を変更することができます。 –

関連する問題