Xin giải pháp chống sửa, xóa dữ liệu đã nhập vào từ ngày hôm trước. (3 người xem)

Liên hệ QC

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

Đương nhiên là được nhưng bạn có thể record macro để xem excel tự code thế nào thì sẽ sửa code được
Em thử macro rồi nhưng mà vẫn không được bác ak. khi gọi Macro thì do đã bị unprotect nên chương trình bị run error. Biết mình tài năng có hạn, Thủ đoạn vô biên mà không giúp được gì. nhờ bác cao tay giúp em với. !$@!!
 
mọi người có cao kiến gì không, giúp mình voi
 
Thiết nghĩ bạn chỉ nên để bình thường bảng tính , gv nhập điểm thoải mái ngày hôm trước hoặc vài ngày trước đó .... bạn chỉ cần tạo 1 cột phụ bằng công thức để kiểm tra , hễ gv nào vào sửa ô nào thì dòng đó sẽ hiện màu lên là biết rồi . trường học thì cao lắm 1/3 gv là biết tin học dạng cơ bản ,còn lại 2/3 không biết hoặc biết quờ quạng thì vẫn chỉ muốn làm bằng tay,( Số rành và siêu VBA thì ít lắm ) ...và dù làm trên máy thì nhà trường vẫn yêu cầu gv phải nộp kết quả bằng giấy có đóng mộc ký tên của CBQL để làm bằng chứng sau này.
Bạn không rành về code mà xài mấy cái phức tạp thì " tự đao giết mình " là cái chắc ( quỳ hoa bảo điển )
 
http://php-dukkha.rhcloud.com/thpt/demo/bangdiem.php

Đây là một giải pháp của mình:( rất tiếc là không phải excel , nhưng có thể ctrl +c và ctrl +v ) để copy qua lại với excel.

Nếu bạn đăng nhập bằng quyền admin với pass 123 thì có thể sửa toàn bộ.

Nếu bạn đăng nhập bằng user thường: abc với pass 123 thì chỉ có thể sửa được 1 lần duy nhất với các ô trống, còn các ô nào mà đã có dữ liệu rồi thì không thể sửa được.
Còn chức năng xóa dòng của user thường (tức là giáo viên) chỉ có thể xóa những dòng cập nhật trong ngày, không thể xóa dòng cập nhật từ hôm trước.

Bạn có thể cấp cho mỗi giáo viên một user để họ cập nhật điểm từ xa qua mạng. Và họ chỉ có thể cập nhật được một lần duy nhất. Nếu họ muốn sửa lại thì phải nhờ đến admin.(tức là bạn đấy, phải thông qua bạn thì mới có thể sửa được)

Ví dụ minh họa các thao tác:

Bạn chọn dòng cần xóa bằng cách kích vào ô check chọn del, sau đó kích chọn save. Bạn đợi một lúc sẽ có thông báo xóa thành công, đối với các dòng của ngày hôm trước, cũng có thông báo xóa thành công nhưng(thông báo chỉ là thông báo thôi).
Sau đó kích vào nút load để kiểm tra thành quả , xem đã xóa được chưa. (Thình thoảng mạng hơi chậm thì có thể không xóa được).

Mình có làm một dòng là của ngày hôm trước , bạn test thử xem .

Tạm thời , tới thời điểm này thì , giáo viên chỉ có thể insert một lần, không thể sửa được, muốn sửa dữ liệu trong ngày thì lại phải xóa dòng đó đi và insert lại.
Còn dữ liệu của hôm trước, tức là các ô trống thì chỉ có thể insert được 1 lần, không sửa và cũng không xóa được.

insert: ở đây là insert toàn bộ một dòng mới.
update : cập nhật các ô trống , sửa lại (đối với user có quyền admin). Muốn xoá dữ liệu trong một ô thì xoá dữ liẹu trong ô đó và để trống chọn update ở cột check , sau đó kích chọn save. Kích load de xem lại ket quả hoặc ấn F5, nhưng kích load sẽ nhanh hơn.
del:xoá toàn bộ dòng.

Cột điểm trung bình M91 mình để trống vì không biết công thức tính điểm trung bình ra sao cả bạn tính theo kiểu gì hệ số như thế nào.
 
Lần chỉnh sửa cuối:
Mình cũng muốn ý thưởng giống chủ đề ở trên. Muốn nội dung đã nhập của hôm qua thì sang hôm nay và về sau kg thay đổi được. ( Nếu muốn thay đổi thì dùng pass hoặc ký tự đặc biệt ). Nhờ các cao nhân giúp đỡ chỉnh sửa file đính kèm giúp. Xin cảm ơn rất nhiều !
 

File đính kèm

Mình cũng muốn ý thưởng giống chủ đề ở trên. Muốn nội dung đã nhập của hôm qua thì sang hôm nay và về sau kg thay đổi được. ( Nếu muốn thay đổi thì dùng pass hoặc ký tự đặc biệt ). Nhờ các cao nhân giúp đỡ chỉnh sửa file đính kèm giúp. Xin cảm ơn rất nhiều !
Có cách này: Khi đầu ngày, mở file (giả sử ngày 2/5/2025, từ dòng 19-31) thì chỉ có các dòng 19-31 là unlocked, các dòng còn lại là "locked".
Sang hôm sau 3/5, mở file thì tương tự dòng 32-44 unlocked, còn lại thì locked.
Có passwords để có thể unlocked dòng bất kỳ để chỉnh sữa bất kỳ thời gian nào.
Bạn thấy gợi ý này thế nào?
 
Nhờ các anh em GPE giúp mình xem có giải pháp nào để chống thay đổi hoặc xóa các dữ liệu đã được nhập từ thời điểm trước. Cụ thể là mình có một file bảng tính điểm, có một vùng cho giáo viên nhập điểm và mình muốn ngày hôm sau giáo viên không thể chỉnh sửa hay xóa được điểm đã ghi vào từ hôm trước nhưng vẫn có thể thêm điểm vào các ô chưa có dữ liệu. Rất mong mọi người phản hồi và góp ý cho mình.
em xin góp ý các giải pháp sau :
1. sử dụng protect sheet
- viết sự kiện change khi dữ liệu thay đổi thì khóa các sheet đã có dữ liệu
- tất nhiên vẫn code thêm để ví dụ click đúp thì nhập mật khẩu sửa dữ liệu được
* Ưu điểm : dễ code
* Nhược điểm : chỉ bảo vệ với người không biết code VBA chứ người biết phá mật khẩu vào sửa code bình thường
2. đưa toàn bộ dữ liệu lên máy chủ ( có thể thuê VPS loại rẻ tầm 100k/ tháng)
- đưa dữ liệu lên MySQL cài ở VPS để lưu trữ lịch sử dữ liệu
- mỗi khi chỉnh sửa thì cần mật khẩu
* Ưu điểm : Bảo mật an toàn tuyệt đối
* Nhược điểm: code phức tạp hơn, mất tiền hàng tháng
( note : có thể dùng chính máy tính của mình làm máy chủ cũng đc, ko phải thuê VPS nữa )
 
Bạn có thể thực hiện điều này bằng VBA bằng cách giới hạn chỉnh sửa trong một khoảng thời gian cụ thể, Chẳng hạn từ 3 giờ chiều đến 6 giờ chiều. Dĩ nhiên không ngăn được người biết... Sau đây là phác thảo cơ bản:
Sử dụng "Workbook Open Event" để kiểm tra thời gian hiện tại. Chỉ cho phép chỉnh sửa trong phạm vi thời gian bằng cách khóa/mở khóa các trang tính cho phù hợp.
Tắt chức năng lưu bên ngoài cửa sổ bằng cách sử dụng sự kiện BeforeSave.

Private Sub Workbook_Open()
Dim currentTime As Date
currentTime = Time

If currentTime >= TimeValue("15:00") And currentTime <= TimeValue("18:00") Then
Worksheets("Sheet1").Protect UserInterfaceOnly:=False ' Allow edits
Else
Worksheets("Sheet1").Protect UserInterfaceOnly:=True ' Lock edits
End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim currentTime As Date
currentTime = Time

If currentTime < TimeValue("15:00") Or currentTime > TimeValue("18:00") Then
MsgBox "Saving is only allowed between 3 PM and 6 PM.", vbCritical, "Restricted Save"
Cancel = True
End If
End Sub
 
Nên đưa code vào trong thẻ code cho gọn.
Bạn có thể thực hiện điều này bằng VBA
Mã:
Private Sub Workbook_Open()
Dim currentTime As Date
currentTime = Time

If currentTime >= TimeValue("15:00") And currentTime <= TimeValue("18:00") Then
Worksheets("Sheet1").Protect UserInterfaceOnly:=False ' Allow edits
Else
Worksheets("Sheet1").Protect UserInterfaceOnly:=True ' Lock edits
End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim currentTime As Date
currentTime = Time

If currentTime < TimeValue("15:00") Or currentTime > TimeValue("18:00") Then
MsgBox "Saving is only allowed between 3 PM and 6 PM.", vbCritical, "Restricted Save"
Cancel = True
End If
End Sub
 
Web KT

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

Back
Top Bottom