Sử dụng sự kiện worksheets_change tự động nhảy ô khi nhập liệu

Liên hệ QC

Tungtron

Thành viên mới
Tham gia
5/7/19
Bài viết
10
Được thích
1
Xin chào mọi người!
Mình có một file nhập dữ liệu có style như đính kèm. Cột A và C là dữ liệu nhập bằng tay,
Khi nhập giá trị ở ô A7 (sau khi nhấn Enter) nó tự select ô C7 và nhập dữ liệu ô C7 xong nó nhảy xuống A8.
Mình muốn chỉ gõ dữ liệu và Enter thôi nó tự select theo lộ trình hình zic zac: A7 -> C7 -> A8 -> C8 -> A9 -> C9....
Mình đang có ý tưởng dùng Worksheets_change nhưng loay hoay một hồi bị "loạn" vì kiến thức eo hẹp.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lR As Long
lR = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & lR).Select
Selection.Offset(0, 2).Select
' doan nay khong biet tiep nhu nao de no ve range("A",x +1)
End Sub
Mọi người cho mình xin một vài gợi ý với.
Cám ơn nhiều
 

File đính kèm

  • nhaplieunhanh.xls
    39 KB · Đọc: 14
Xin chào mọi người!
Mình có một file nhập dữ liệu có style như đính kèm. Cột A và C là dữ liệu nhập bằng tay,
Khi nhập giá trị ở ô A7 (sau khi nhấn Enter) nó tự select ô C7 và nhập dữ liệu ô C7 xong nó nhảy xuống A8.
Mình muốn chỉ gõ dữ liệu và Enter thôi nó tự select theo lộ trình hình zic zac: A7 -> C7 -> A8 -> C8 -> A9 -> C9....
Mình đang có ý tưởng dùng Worksheets_change nhưng loay hoay một hồi bị "loạn" vì kiến thức eo hẹp.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lR As Long
lR = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & lR).Select
Selection.Offset(0, 2).Select
' doan nay khong biet tiep nhu nao de no ve range("A",x +1)
End Sub
Mọi người cho mình xin một vài gợi ý với.
Cám ơn nhiều
Bạn thử code này.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim lR As Long
    lR = Cells(Rows.Count, 1).End(xlUp).Row
    If Not Intersect(Target, Range("A7:A" & lR)) Is Nothing Then
       If Target.Count = 1 Then
          If Target.Value <> Empty Then
             Target.Offset(, 2).Value = Target
             'Target.Offset(1).Select
          End If
       End If
   End If
Application.EnableEvents = True
End Sub
 
Upvote 0
Cảm ơn @snow25 ! Tuy mình chưa thông hết được code của bạn nhưng khi mình chạy thử thì thấy dữ liệu cột C giống dữ liệu cột A.
Mình khó ở chỗ dữ liệu ở cột A và C là nhập bằng tay. Vì nhập dữ liệu cột A sự kiện worksheets_change nó load một lần, và khi nhập dữ liệu cột C nó lại load đúng cái đó. Nghe có vẻ như là đệ quy mà dang loạn. Sắp deadline rồi lên "rối" quá chả nghĩ ra được ý tưởng gì
 
Upvote 0
Cảm ơn @snow25 ! Tuy mình chưa thông hết được code của bạn nhưng khi mình chạy thử thì thấy dữ liệu cột C giống dữ liệu cột A.
Mình khó ở chỗ dữ liệu ở cột A và C là nhập bằng tay. Vì nhập dữ liệu cột A sự kiện worksheets_change nó load một lần, và khi nhập dữ liệu cột C nó lại load đúng cái đó. Nghe có vẻ như là đệ quy mà dang loạn. Sắp deadline rồi lên "rối" quá chả nghĩ ra được ý tưởng gì
Bạn giải thích rõ chỗ.Khi nhập cột C thì nó lại load lại đúng cái đó là sao.Mình không hiểu.
 
Upvote 0
Mình đã chạy được đúng như yêu cầu của công việc. Vì chưa hiểu cách dừng bắt sự kiện lên hơi lòng vòng. Cám ơn bạn @snow25 đã gợi ý.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim lR As Long
lR = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & lR).Select
Application.EnableEvents = False
    If Not Intersect(Target, Range("A7:A" & lR)) Is Nothing Then
       If Target.Count = 1 Then
          If Target.Value <> Empty Then
             Target.Offset(, 2).Select
          End If
       End If
   End If
Application.EnableEvents = True
End Sub
 
Upvote 0
Cái dụ này là đồng ý bạn phuocam nè. LON còn bị cấm thì nói chi cái hình đó.
 
Upvote 0
Xin chào mọi người!
Mình có một file nhập dữ liệu có style như đính kèm. Cột A và C là dữ liệu nhập bằng tay,
Khi nhập giá trị ở ô A7 (sau khi nhấn Enter) nó tự select ô C7 và nhập dữ liệu ô C7 xong nó nhảy xuống A8.
Mình muốn chỉ gõ dữ liệu và Enter thôi nó tự select theo lộ trình hình zic zac: A7 -> C7 -> A8 -> C8 -> A9 -> C9....
Mình đang có ý tưởng dùng Worksheets_change nhưng loay hoay một hồi bị "loạn" vì kiến thức eo hẹp.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lR As Long
lR = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & lR).Select
Selection.Offset(0, 2).Select
' doan nay khong biet tiep nhu nao de no ve range("A",x +1)
End Sub
Mọi người cho mình xin một vài gợi ý với.
Cám ơn nhiều
Bài này mình thấy bạn có thể sử dụng chức năng "Protect Sheet" -> "Select Unlock Cells" và dùng phím Tab để di chuyển từ trái qua phải, từ trên xuống dưới để nhập liệu sau khi đã "Protect Sheet".
 
Upvote 0
Web KT
Back
Top Bottom