VBA khoá password vùng theo điều kiện!

Liên hệ QC

nguyenkhamam

Thành viên mới
Tham gia
12/7/11
Bài viết
39
Được thích
2
Xin các thầy chỉ giúp em nội dung ghi theo file đính kèm với ạ!
 

File đính kèm

  • New Microsoft Office Excel Worksheet.rar
    13 KB · Đọc: 26
Anh xem lại code xem có trục trặc chỗ nào không mà cái vùng màu đỏ em thay đổi tiêu đề A thành B rồi gõ pass:456 thì không được mà gõ 123 lại OK.
Sau đó đổi sang C hoặc A,B chẳng hạn thì vung đó lại không khóa! Em thấy như của thầy Viethoan là ngon cho vùng màu vàng nhưng vùng màu đỏ thì không thấy gì cả.
Mình thấy bình thường mà. Bạn thử thay đổi giá trị các ô D6, I8, J8, K8. Sau đó lưu file, đóng rồi mở ra lại xem có ổn không.
 
Upvote 0
Mình thấy bình thường mà. Bạn thử thay đổi giá trị các ô D6, I8, J8, K8. Sau đó lưu file, đóng rồi mở ra lại xem có ổn không.
Anh xem lại cho em cột I,và cột J khi em thay đổi dữ liệu rồi lưu lại.
File đây ạ!
Đã cập nhật lại file ở bài #12. Bạn tải lại file đi
Thầy ơi! sao mở 1 pass mà các pass kia cũng mở theo vậy thầy! nếu vậy thì hỏng hết bánh kẹo thầy ạ!
 

File đính kèm

  • Pass4.xls
    41.5 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
Anh xem lại cho em cột I,và cột J khi em thay đổi dữ liệu rồi lưu lại.
File đây ạ!

Thầy ơi! sao mở 1 pass mà các pass kia cũng mở theo vậy thầy! nếu vậy thì hỏng hết bánh kẹo thầy ạ!
Toàn bộ code trong bài #18 của mình có thể thay bằng đoạn sau cho gọn:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Or Intersect(Target, Union([D6], [I8:K8])) Is Nothing Then Exit Sub
    With ActiveSheet
        .Unprotect "GPE"
        .Protection.AllowEditRanges("Range1").ChangePassword IIf([D6] = "A", "123", IIf([D6] = "B", "456", IIf([D6] = "C", "789", "")))
        .Protection.AllowEditRanges("Range2").ChangePassword IIf([I8] = "A", "123", IIf([I8] = "B", "456", IIf([I8] = "C", "789", "")))
        .Protection.AllowEditRanges("Range3").ChangePassword IIf([J8] = "A", "123", IIf([J8] = "B", "456", IIf([J8] = "C", "789", "")))
        .Protection.AllowEditRanges("Range4").ChangePassword IIf([K8] = "A", "123", IIf([K8] = "B", "456", IIf([K8] = "C", "789", "")))
        .Protect "GPE"
    End With
End Sub
Tuy nhiên, mình cũng vừa phát hiện ra vấn đề tương tự như bạn: Trong tất cả những vùng có cùng password (cùng giá trị tại ô tiêu đề), chỉ cần nhập password cho vùng này thì có thể nhập dữ liệu vào vùng kia, nó chỉ yêu cầu nhập lại password khi có sự thay đổi tại 1 trong các ô D6, I8, J8, K8. Kiểu này chắc phải cho mỗi ô tiêu đề này chứa 1 Validation list khác nhau thôi.
 
Upvote 0
Cũng khá ổn rồi đó anh ạ! nhưng sao cột K tiêu đề là C lại không thấy pass anh nhỉ?
Cũng không fair là như vậy mà chính xác hơn khi nhập dữ liệu lại tiêu đề cột K thì mới có tác dụng còn bình thường mờ file ra thì chưa thấy jif
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Phuc và các thầy trong ban Ạ!
Vấn đề Pass theo đề khá ổn rồi nhưng nếu ta nhập dữ liệu vào các vùng như vùng màu vàng và đỏ chẳng hạn.
Giả sử có 3 anh A,B và C mỗi anh một pass như đã cho. Khi anh A nhập dữ liệu vào vùng của anh A với tiêu đề là A.
Vì anh B không biết pass của anh A sau đó sửa lại tiêu đề của anh A thành B. Thế là anh B thao tác được nội dung của anh A.
Còn anh A thì không trừ khi anh A thay đổi lại tiêu đề là A.
Các thầy có cách nào khắc phục tình trạng này không ạ!
 
Upvote 0
Web KT
Back
Top Bottom