Hiển thị ngày giờ tự động trong Excel gặp vấn đề? (1 người xem)

  • Thread starter Thread starter Benkai
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Benkai

Thành viên mới
Tham gia
10/4/14
Bài viết
3
Được thích
0
Mình đang làm một bảng tính quản lý bãi xe. Gồm các cột sau:

STT Biển số xe Loại xe Số tiền Ngày vào Ngày ra
1 15C12345 40T 240.000 10/4/2014 7:00AM 10/4/2014 3:00PM
2
...
...

Trong đó, mình muốn khi nhập dữ liệu vào cột Biển số xe (cột B) ngày giờ sẽ tự động hiển thị ở cột "Ngày vào", khi nhập dữ liệu vào cột "Số tiền" ngày giờ sẽ tự động hiển thị ở cột "Ngày ra"

Mình đã sử dụng hàm =IF(B3<>0,NOW(),"") ở cột Ngày ra và Ngày vào. Tuy nhiên, khi thay đổi dữ liệu của bất kỳ cột nào, ngày giờ đều tự động điều chỉnh đến thời gian hiện tại. Nếu mình muốn lưu ngày giờ xe ra vào mà không bị thay đổi như trên thì sửa như thế nào? Xin nhờ các cao thủ chỉ giúp. Cảm ơn nhiều nhiều.
 
Mình đang làm một bảng tính quản lý bãi xe. Gồm các cột sau:

STT Biển số xe Loại xe Số tiền Ngày vào Ngày ra
1 15C12345 40T 240.000 10/4/2014 7:00AM 10/4/2014 3:00PM
2
...
...

Trong đó, mình muốn khi nhập dữ liệu vào cột Biển số xe (cột B) ngày giờ sẽ tự động hiển thị ở cột "Ngày vào", khi nhập dữ liệu vào cột "Số tiền" ngày giờ sẽ tự động hiển thị ở cột "Ngày ra"

Mình đã sử dụng hàm =IF(B3<>0,NOW(),"") ở cột Ngày ra và Ngày vào. Tuy nhiên, khi thay đổi dữ liệu của bất kỳ cột nào, ngày giờ đều tự động điều chỉnh đến thời gian hiện tại. Nếu mình muốn lưu ngày giờ xe ra vào mà không bị thay đổi như trên thì sửa như thế nào? Xin nhờ các cao thủ chỉ giúp. Cảm ơn nhiều nhiều.
Bài này bạn sử dụng sự trợ giúp của VBA (lập trình VB trong Excel), bạn tham khảo code trong file đính kèm:
[gpecode=vb]
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False
If Not Intersect(Target, [B2:H22]) Is Nothing Then
Range("I" & Target.Row) = Now
End If
Application.ScreenUpdating = True
End Sub
[/gpecode]
 

File đính kèm

Mình chưa biết gì về VB, bạn có thể cảm phiền dẫn đường link hướng dẫn nào có sẵn hoặc chỉ dẫn chi tiết hơn cho mình được không? Cảm ơn nhiều.
 
Mình chưa biết gì về VB, bạn có thể cảm phiền dẫn đường link hướng dẫn nào có sẵn hoặc chỉ dẫn chi tiết hơn cho mình được không? Cảm ơn nhiều.
Hàm NOW, TODAY lấy thời gian theo hệ thống, vì vậy mà khi Excel thực hiện tính toán (Calculation) thì kết quả NOW, TODAY được cập nhật. Nên phải dùng VBA để VALUE lại giá trị thời gian đó. VBA hỗ trợ được điều này. Code trong VBA thực hiện các lệnh, để xem hoặc chỉnh sửa code bạn phải vào cửa sổ VB của Excel, nhấn Ctrl+F11 để vào hoặc chuột phải tên Sheet và nhấn vào View Code. Để chạy các lệnh trong VBA bạn phải mở chế độ Marco.
Với Excel 2007: Excel Options > Trust Center > Trust Center Settings > Marco Settings > Enable all marcos > OK.
Với Excel 2003 tôi không nhớ lắm: Tool > Marco > ...
Còn lệnh VBA thực hiện như thế nào thì bạn phải học, xem nhiều chứ không chỉ dăm ba câu hỏi là biết được.
 
Cảm ơn bạn leonguyenz đã chỉ dẫn, mình đã tham khảo đoạn code trong file bạn gửi và chỉnh sửa cho phù hợp trong bảng tính của mình thành công. Tuy nhiên mình muốn hỏi thêm, ví dụ mình copy thêm 1 đoạn code như trên vào để ghi lại thời gian xe ra có được không. Mình đã làm thử và bị báo lỗi.

Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False
If Not Intersect(Target, [B2:B22]) Is Nothing Then
Range("I" & Target.Row) = Now
End If
Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False
If Not Intersect(Target, [D2:D22]) Is Nothing Then
Range("K" & Target.Row) = Now
End If
Application.ScreenUpdating = True
End Sub
 
Cảm ơn bạn leonguyenz đã chỉ dẫn, mình đã tham khảo đoạn code trong file bạn gửi và chỉnh sửa cho phù hợp trong bảng tính của mình thành công. Tuy nhiên mình muốn hỏi thêm, ví dụ mình copy thêm 1 đoạn code như trên vào để ghi lại thời gian xe ra có được không. Mình đã làm thử và bị báo lỗi.

Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False
If Not Intersect(Target, [B2:B22]) Is Nothing Then
Range("I" & Target.Row) = Now
End If
Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False
If Not Intersect(Target, [D2:D22]) Is Nothing Then
Range("K" & Target.Row) = Now
End If
Application.ScreenUpdating = True
End Sub
Sự kiện Worksheet_Change chỉ được dùng 1 lần cho mỗi sheet thôi bạn, nếu muốn thực hiện nhiều thao tác với sự kiện này thì bạn lồng tất cả câu lệnh vào trong sub này.
Code có thể là như sau:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, [B2:B22,D2:D22]) Is Nothing Then Intersect(Target, [B2:B22,D2:D22]).Offset(, 7) = Now
Application.ScreenUpdating = True
End Sub[/GPECODE]
 
Web KT

Bài viết mới nhất

Back
Top Bottom