Lock sheet: vba protect sheet with password

vbano1

Admin
Thành viên BQT
Mình thấy nhiều bạn ghi dữ liệu vào sheet thông qua Userform. Tất nhiên cũng có trăm ngàn lý do, chẳng hạn như không muốn người dùng sờ mó vào vùng dữ liệu, nhập tùm lum không theo định dạng mong muốn.
Vì vậy, thông qua UserForm, các bạn sẽ cho macro kiểm tra định dạng dữ liệu có đúng như mình mong muốn không, rồi dữ liệu từ UserForm cập nhật vào sheet trên excel.
Bạn cần đăng nhập để thấy đính kèm

Như vậy: Vấn đề đặt ra là khóa sheet như thế nào để không cho người dùng can thiệp bằng tay, tự ý sửa chữa trực tiếp trên sheet.
Cách làm:
Trước hết tôi giới thiệu thao tác bằng tay để các bạn nhớ lại nhé.
Tại sheet các bạn muốn khóa, các bạn click chuột phải chọn Protect:
Bạn cần đăng nhập để thấy đính kèm


Tại đây các bạn nhập mật khẩu, chẳng hạn là "123456"
Bạn cần đăng nhập để thấy đính kèm


Cửa sổ xác nhận mật khẩu hiện ra, bạn nhập một lần nữa "123456".
Bạn cần đăng nhập để thấy đính kèm


Ấn OK là xong. Như vậy người dùng không thể tùy tiện nhập dữ liệu trên sheet này được nữa.
Cố tình nhập sẽ như thế này:
Bạn cần đăng nhập để thấy đính kèm


Muốn trở lại trạng thái ban đầu, bạn click chuột phải vào sheet đang bị khóa, chọn Unprotect:
Bạn cần đăng nhập để thấy đính kèm


Cửa sổ hiện ra, bạn gõ mật khẩu "123456" và ấn OK, sheet đã trở lại bình thường.
Bạn cần đăng nhập để thấy đính kèm


Như vậy tôi đã giới thiệu xong thao tác bằng tay.
Bây giờ chúng ta quay trở về câu chuyện ban đầu với Userform.
Bạn cần đăng nhập để thấy đính kèm


Chúng ta cần mở khóa sheet trước khi tiến hành cập nhật dữ liệu:
Mã:
ThisWorkbook.Sheets("tuhocvba").Unprotect Password:="YourPassword"
Sau khi cập nhật dữ liệu, bạn tiến hành khóa sheet:
Mã:
ThisWorkbook.Sheets("tuhocvba").Protect Password:="YourPassword"
 

tuhocvba

Administrator
Thành viên BQT
Phát triển chủ đề thêm một chút nữa: Khóa cells.
Trong chủ đề này, tôi sẽ trình bày cách chỉ định cho người dùng nhập liệu vào một vùng Range. Ngoài khu vực đó ra, tôi sẽ khóa toàn bộ, không cho người dùng can thiệp sửa dữ liệu.
1-Bạn chọn vào vùng Range cho phép người dùng nhập liệu.
2-Click thẻ Home
3-Click chọn Format
4-Click chọn Lock cell.
Bạn cần đăng nhập để thấy đính kèm


Tiếp theo bạn click chuột phải vào sheet hiện hành: Chọn Protect Sheet.
Bạn cần đăng nhập để thấy đính kèm


Bạn cần đăng nhập để thấy đính kèm


Chú ý KHÔNG chọn vào "Select locked cells".
Sau đó nhập password hai lần.
Kết quả: Vùng Range màu vàng sẽ được nhập liệu bình thường, còn toàn bộ khu vực khác trên sheet sẽ bị khóa.
 

vbano1

Admin
Thành viên BQT
Áp dụng thực tế:
Đoạn code sau dùng để khóa sheet:
Mã:
Sub khoafile()
    ThisWorkbook.Sheets(1).Activate
    With ThisWorkbook.Sheets(1)
    'Đây là vùng không bị khóa, cho phép nhập'
        Union(.Range(Cells(4, 11), Cells(5, 11)), .Cells(2, 6), .Cells(6, 6), .Cells(12, 6)).Locked = False
    End With
    
    ThisWorkbook.Sheets(1).Protect Password:="tuhocvba.net"
    ThisWorkbook.Sheets(1).EnableSelection = xlUnlockedCells
End Sub
Đoạn code sau dùng để mở sheet:
Mã:
Sub mofile()
    ThisWorkbook.Sheets(1).Activate
    ThisWorkbook.Sheets(1).Unprotect Password:="tuhocvba.net"
End Sub
 
Top