2012-07-06 5 views
5

Trong Excel, tôi có ba cột:Làm thế nào để quấn Excel con trỏ để giữ nó trong một phạm vi cụ thể

column1, column2, column3 

Tôi đang nhập dữ liệu vào excel sử dụng một máy quét mã vạch được gắn liền với một iPad. Máy quét mã vạch gửi ENTER sau mỗi lần quét. Tôi tin rằng tôi có thể đặt excel lên sao cho ENTER sẽ khiến cột tiếp theo được chọn (thay vì hàng tiếp theo)

Tuy nhiên, tôi không biết làm thế nào để chuyển sang hàng tiếp theo sau khi có ENTER được phát hiện trong column3. Ngay bây giờ tôi có điều này:

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 

Nhưng Target.Value chỉ phát hiện chuỗi bên trong ô, nó không phát hiện những gì đã được nhấn.

Làm cách nào để nhận hàng tiếp theo được chọn sau khi ENTER được phát hiện trong column 3?

Trả lời

10

Bạn không cần mã vba cho việc này.

Cách dễ nhất là mở khóa các ô trong ba cột đó và khóa phần còn lại của các ô. Sau khi thực hiện, bảo vệ toàn bộ trang tính. Tuy nhiên khi bảo vệ, hãy đảm bảo bạn bỏ chọn tùy chọn có tên là Select Locked Cells Xem ảnh chụp màn hình. Các cột màu vàng không được bảo vệ.

enter image description here

Bước tiếp theo là thiết excel để sau khi dữ liệu được nhập và phím Enter được nhấn, di chuyển con trỏ đến cột tiếp theo. Bạn có thể làm điều đó (Say trong Excel 2010) từ File TAB | Options | Excel Options | Advanced

enter image description here

Khi con trỏ đến cột cuối cùng và dữ liệu được nhập và nhập được nhấn, con trỏ sẽ tự động di chuyển đến dòng kế tiếp. Xem ảnh chụp nhanh.

enter image description here

HTH

+1

tôi có 10 năm kinh nghiệm với excel và tôi đã không biết điều này. cảm ơn bạn rất nhiều vì sự giúp đỡ tuyệt vời của bạn –

+0

Ah, hiệu ứng máy đánh chữ. Tốt đẹp! +1 – JimmyPena

4

Ngoài gợi ý tuyệt vời Siddharth của, đây là một cách tiếp cận dựa trên sự kiện:

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 Đẹp Một Tim :) –

+0

điều này thật tuyệt vời !!! lý do bạn đang sử dụng IS NOTHING là gì? –

+0

'Không có gì' kiểm tra để xem liệu các tế bào đã được thay đổi đã được chứa trong phạm vi được đặt tên" DATA "(tức là liệu' Mục tiêu' giao cắt với 'rngData'). Nó cho phép bạn thay đổi hành vi mặc định chỉ cho phạm vi nhập mong muốn. –