Ghi lại Thời gian nhập Liệu

Liên hệ QC

mymapmap

Thành viên hoạt động
Tham gia
4/5/09
Bài viết
167
Được thích
24
Nghề nghiệp
KTV Điện tử
+-+-+-+Xin các Pro cho hỏi trong excel có cách nào ghi lại thời gian nhập liệu vào một cell không?
Dữ liệu gổm 10 giá trị được bố trí theo dòng hàng ngang
VD: khi nhập dữ liệu vào cell A1 thì cell A2 sẽ ghi nhận lại thời gian nhập vào và nhập liệu vào cell B1 thì B2 sẽ ghi lại thời gian nhập.
Rất mong nhận được sự quan tâm và trả lời của các A/C.
Xin cảm ơn nhiều!
 
+-+-+-+Xin các Pro cho hỏi trong excel có cách nào ghi lại thời gian nhập liệu vào một cell không?
Dữ liệu gổm 10 giá trị được bố trí theo dòng hàng ngang
VD: khi nhập dữ liệu vào cell A1 thì cell A2 sẽ ghi nhận lại thời gian nhập vào và nhập liệu vào cell B1 thì B2 sẽ ghi lại thời gian nhập.
Rất mong nhận được sự quan tâm và trả lời của các A/C.
Xin cảm ơn nhiều!
Thời gian mà bạn nói là NGÀY hay GIỜ
1> Nếu nhập bằng tay thì bấm tổ hợp phím Ctrl + Shift + ; để ra GIỜ ... hoặc Ctrl + ; để ra NGÀY
2> Nếu muốn tự động thì viết 1 code VBA
 
Được bình thường mà. Có điều phải dùng VBA. Mỗi khi các Cell Ai thay đổi giá trị thì các Celll Bi sẽ được cập nhật thời gian thực của máy. Để thời gian thực này đúng bằng thời gian thực tế thì chỉ cần chú ý để điều chỉnh thời gian thôi.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i, Er As Integer
  Dim Rng, Clls As Range
  Er = Range("B1000").End(xlUp).Row + 1
  Set Rng = Range("B2:B" & Er)
  If Not Intersect(Range("B2:B1000"), Target) Is Nothing Then
  Range("D2:D1000").Clear
  For Each Clls In Rng
    If Clls <> "" Then
    Clls.Offset(, 2).Value = Now
   Else
    Clls.Offset(, 2).Value = ""
    End If
  Next
  End If
End Sub
Đại loại là vậy nhưng mà vẫn chưa chính xác lắm cần chỉnh thêm.
 
Chỉnh sửa lần cuối bởi điều hành viên:
+-+-+-+Xin các Pro cho hỏi trong excel có cách nào ghi lại thời gian nhập liệu vào một cell không?
Dữ liệu gổm 10 giá trị được bố trí theo dòng hàng ngang
VD: khi nhập dữ liệu vào cell A1 thì cell A2 sẽ ghi nhận lại thời gian nhập vào và nhập liệu vào cell B1 thì B2 sẽ ghi lại thời gian nhập.
Rất mong nhận được sự quan tâm và trả lời của các A/C.
Xin cảm ơn nhiều!

Bạn xem file đính kèm. Bạn có thể nhập dữ liệu vào ô bất kỳ, sau khi nhập dữ liệu xong nếu bạn muốn ghi lại thời gian của ô nào thì nhập lại con trỏ vào ô đó.
 

File đính kèm

  • Book1.xls
    27 KB · Đọc: 1,117
Cách làm của Bác đúng như mong muốn của em rồi đấy nhưng em vẫn chưa hiểu cách làm của Bác như thế nào.
Và có thể copy vùng nhập liệu đó xuống phía dưới nhưng tính năng ghi nhận thời gian nhập liệu vẫn còn cho vùng mới không?
Xin cảm ơn Bác nhiều lắm!
 
Đơn giản hơn bạn tưởng nhiều. Bạn cứ cho trường đó trên form 1 textbox đi nhưng bạn cho nó Enable=false, thậm chí Visiable=false. Như vậy, người dùng không tự can thiệp hay không trông thấy nữa. Trong code cvủa nút save bạn chèn thêm đoạn code

Me.textxxx=now()
tiếp theo là code bình thường của nút save

Việc chép các nội dung khác bình thường nhưng riêng ô lưu time thì lúc save mới set nên dù có nhập cả giờ 1 rec. cũng mặc.
 
Lần chỉnh sửa cuối:
Bác Sealand ơi! Sao e mò hoài mà không biết Bác làm điều đó như thế nào cả. Thật sự em cũng không giỏi Excel cho lắm. Bác có thể chỉ em chi tiết cách làm của Bác không ạh?
Cảm ơn Bác nhiều lắm!
 
Trước hết mình bỏ lock các ô từ B3-K3 để có 10 ô nhập dữ liệu. Sau khi protect sheet thì chỉ nhập được 10 ô này mà thôi. Các trang trí màu mè không đề cập nữa. Khi mình nhập vào 1 ô thì phát sinh sự kiện Worksheet change (Bảng tính thay đổi). Sự kiện cũng báo cho biết đổi tại ô nào. Như vậy ta chỉ việc gán cho phía dưới =Time hoặc now() là được.
Giờ thì ta vào code cụ thể. Nhấn Alt+F11--> chọn sheet1-->Bạn sẽ thấy code sau


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 3 Then 'Nếu dòng thay đổi =3
Sheet1.Unprotect 'Tạm bỏ Protect
Target.Offset(1, 0) = Time 'Set ô phía duói =time
Sheet1.Protect 'Khóa lai
Sheet1.EnableSelection = xlUnlockedCells 'Cho phép chọn ô không khóa
End If
End Sub

Bạn cứ xem có gì hỏi lại sau
 
Cảm ơn Bác Sealand nhiều lắm lắm em đã hiểu rồi.

Em gởi Bác file tổ chức dữ liệu của em. Với dữ liệu nhập vào từ cột D đến cột M các cột ở ngoài phài thực hiện các phép tính toán dữ liệu nhập vào. Dữ liệu em có nhiều dòng thì code viết như thế nào cho gọn Bác ơi. Đôi khi phải copy các dòng từ 49 đến 102 dán vào 103, dán vào 157... thì phải làm sao duy trì được tính năng ghi lại thời gian của các dòng nhập liệu.
Bác Sealand giúp em nhé! Cảm ơn Bác nhiều!
 

File đính kèm

  • time.xls
    21 KB · Đọc: 317
Chỉnh sửa lần cuối bởi điều hành viên:
Nhìn vào file khó hiểu quá, đáng lẽ có chút dữ liệu mẫu và mô tả chi tiết vận hành ra sao thì mới biết bạn định là thế nào. Mình đoán mãi mà không hiểu cách làm của bạn.
 
Nhìn vào file khó hiểu quá, đáng lẽ có chút dữ liệu mẫu và mô tả chi tiết vận hành ra sao thì mới biết bạn định là thế nào. Mình đoán mãi mà không hiểu cách làm của bạn.

Cho em xin lỗi nhé gì lúc đầu file có dung lượng lớn quá do còn mấy đường link nên xóa mãi mới ra form trắng thế. Vùng nhập dữ liệu không được liên tục (D31:M48, D85:M102, D139:M156.....) do phải link và xuất qua báo cáo của sheet khác nữa.
Em mong muốn khi nhập liệu vào các dòng 31,34,37,40,43,46, 85,88,91,94,97,100.... thì thời gian sẽ ghi vào dòng thời gian tương ứng với từng cell
Rất mong nhận được sự giúp đỡ.
Xin cảm ơn!
 

File đính kèm

  • time.xls
    40 KB · Đọc: 123
Cho em xin lỗi nhé gì lúc đầu file có dung lượng lớn quá do còn mấy đường link nên xóa mãi mới ra form trắng thế. Vùng nhập dữ liệu không được liên tục (D31:M48, D85:M102, D139:M156.....) do phải link và xuất qua báo cáo của sheet khác nữa.
Em mong muốn khi nhập liệu vào các dòng 31,34,37,40,43,46, 85,88,91,94,97,100.... thì thời gian sẽ ghi vào dòng thời gian tương ứng với từng cell
Rất mong nhận được sự giúp đỡ.
Xin cảm ơn!
Thay đoạn code củ thành:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Vung1 As Range, Vung2 As Range
  With Range("D31:N31")
    Set Vung1 = Union(.Offset(0), .Offset(3), .Offset(6), .Offset(9), .Offset(12), .Offset(15))
  End With
  With Range("D85:N85")
    Set Vung2 = Union(.Offset(0), .Offset(3), .Offset(6), .Offset(9), .Offset(12), .Offset(15))
  End With
  If Not Intersect(Union(Vung1, Vung2), Target) Is Nothing And Target.Count = 1 Then
    With ActiveSheet
      .Unprotect: Target.Offset(2) = Time
      .Protect: .EnableSelection = xlUnlockedCells
    End With
  End If
End Sub
 
Vì Sheet sẽ còn chép nối nhiều, nên mình đề xuất phương án kiểm tra dòng tiêu đề là "Time " sẽ gọn và ổn định khi các vùng chép không đồng nhất.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Cells(Target.Row + 2, 2) = "Time" Then
    With ActiveSheet
    If Target.Text <> "" Then
      .Unprotect: Target.Offset(2) = Time
      Else
      .Unprotect: Target.Offset(2) = 0
      End If
      .Protect: .EnableSelection = xlUnlockedCells
    End With
  End If
End Sub

Các bạn thấy không code ngắn và dễ hiểu rất nhiều, hơn nữa còn kèm thêm xóa ô thì cũng đưa thời gian về 0
 

File đính kèm

  • Copy of time.xls
    43 KB · Đọc: 348
Cảnh Báo theo điều kiện

-+*/Cảm ơn các Bác đã quan tâm giúp e vấn đề trên nhiều lắm.
Nhưng hết vấn đền này có vấn đề khác nữa. với hai dòng dữ liệu EUT và REF ở file time có cột là sai lệch nếu tính sai lệch O31 lớn hơn 3 lần con số trong E22 thì cảnh báo thay đổi màu tương tự như các dữ liệu phía dưới O34 vs E23; O37 vs E24........O85 vs E56.......Nhưng gì chỉ thay đổi màu sắc thôi nên không ép phê với người nhập thường họ bỏ qua không quan tâm lắm dẫn đến nhiều lỗi nhập liệu không mong muốn.
Nay em muốn các Bác có cách nào khi nhập hết 20 giá trị của EUT VÀ REF ra độ sai lệch không thỏa mãn điều kiện thì có cảnh báo MessageBox hoặc âm thanh để người nhập xác nhận mới tiến hành dòng dữ liệu kế tiếp.
Các Bác có kinh nghiệm hướng dẫn e thực hiện với. Cảm ơn nhiều!;;;;;;;;;;;
 
Bọn mình mới chỉ giải đáp những yêu cầu cụ thể của bạn, còn file của bạn để làm gì hay tính toán độ lệch ra sao thì bạn chưa nói rõ sao mà biết được. Phải nắm được quy luật vận hành thì mới có giải pháp tốt được. Bạn nên có hướng dẫn cụ thể phương án thực hiện, số liệu ví dụ...
 
Cho em gởi lại file nhé!
 

File đính kèm

  • time.xls
    38 KB · Đọc: 128
Mình sử dụng Excel 2003 không ad-in nên máy không có hàm MROUND() nên không test được.
 
Nếu thay thế MROUND() bằng ROUND() thì có khác chút ít nhưng cũng vẫn phù hợp yêu cầu.
Khi làm thường xuyên bị lỗi số liệu người nhập vào tạo ra sai số quá lớn ( sai số là lớn khi gấp 3 lần con số trong cột E2 đến E6 tương ứng cho các sai số của O10, O13,O16,O19,O22)
E muốn thay cảnh báo màu đỏ (Condition formating) Bằng một cảnh báo âm thanh hoặc MesgBox để người nhập liệu xác nhận mới nhập tiếp tục được.
Rất mong sớm nhận được sự giúp đỡ!
Xin cảm ơn!
 
Có phải là trị tuyệt đối của ô Merge bên cạnh =>1 thì cảnh báo. Nếu vậy, bạn ghi sai O11-O13-O17-O20-O23 chứ không phải như bạn ghi
 
Web KT
Back
Top Bottom