Dùng code gì để kiểm tra Sheet có bị Protect hay không?

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

BNTT

Bùi Nguyễn Triệu Tường
Thành viên danh dự
Tham gia
3/7/07
Bài viết
4,946
Được thích
23,208
Nghề nghiệp
Dạy đàn piano
Tôi đang mày mò nghịch VBA, có chỗ này, không biết phải viết làm sao, nhờ các bạn chỉ dùm.
Số là, để bảo vệ dữ liệu ngoài bảng tính không bị xóa bậy, nên tôi đã Proctect Sheet. Nhưng để cho một Form ghi được dữ liệu vào trong Sheet, thì bảng tính đó phải Unprotect, phải không ạ?
Cho nên tôi viết một cái macro để mở Form:
PHP:
Sub OpenForm1()
   Sheet1.Unprotect
   Form1.Show
End Sub
Và trong thủ tục Close Form thì tôi cho nó tự động Proctect Sheet lại:
PHP:
Sub CloseForm1()
   Sheet1.Protect
   Unload Me
End Sub
Chắc tới đây thì không có gì sai phải không ạ.

Khốn nỗi, lỡ như mà, Sheet đó đang ở trạng thái không bị khóa, mà chạy macro ChayForm, thì VBA la làng. Tôi hiểu là tại vì Sheet có Protect đâu mà băt nó Unprotect, nên nó la là phải.

Nhưng làm thế nào để kiểm tra một Sheet có bị Protect hay không?
Ý tôi muốn là, trước khi mở Form, thì kiểm tra xem Sheet1 này có đang bị Protect không. Nếu có, thì chạy tiếp dòng Sheet1.Unprotect, còn nếu như Sheet1 đang "tự do" thì không chạy dòng lệnh đó.
 
.................................Khốn nỗi, lỡ như mà, Sheet đó đang ở trạng thái không bị khóa, mà chạy macro ChayForm, thì VBA la làng. Tôi hiểu là tại vì Sheet có Protect đâu mà băt nó Unprotect, nên nó la là phải.
Em không nghĩ là VBA nó la làng đâu anh BNTT. Code vẫn chạy vô tư mà.


Nhưng làm thế nào để kiểm tra một Sheet có bị Protect hay không?
Ý tôi muốn là, trước khi mở Form, thì kiểm tra xem Sheet1 này có đang bị Protect không. Nếu có, thì chạy tiếp dòng Sheet1.Unprotect, còn nếu như Sheet1 đang "tự do" thì không chạy dòng lệnh đó.
Em đang test thử cái thao tác:
PHP:
Sub CheckProtect()
If Activesheet.ProtectionMode then
Msgbox "Sheet Da bi khoa"
Else
Msgbox "Sheet chua bi khoa"
End If
End Sub
Hic, nhưng toàn ra "Sheer Chua Bi Khoa" (False), kể cả sheet đã bị khóa hay chưa bị khóa đều vậy cả! Em cũng không hiểu luôn.+-+-+-+
 
Lần chỉnh sửa cuối:
Upvote 0
Em không nghĩ là VBA nó la làng đâu anh BNTT. Code vẫn chạy vô tư mà.
Ờ, sao kỳ ghê, mới hồi chiều thì để Sheet không khóa mà chạy macro OpenForm1, thì VBA nó báo lỗi và tô màu vàng ngay ở dòng Sheet1.Unprotect...
Thế nhưng sau khi nghe Ca_Dafi nói, anh cho nó chạy lại thì nó không sao nữa cả! Không hiểu hồi chiều bị cái gì. Nhưng thôi, đó chỉ là chuyện nhỏ. Không báo lỗi thì tốt thôi.

Nhưng vấn đề: Dùng cái gì để kiểm tra xem một Sheet có đang bị khóa hay không? thì vẫn là một vấn đề cần thiết với tôi. Mong các bạn giúp.
 
Upvote 0
Nhưng vấn đề: Dùng cái gì để kiểm tra xem một Sheet có đang bị khóa hay không?

Anh thử lại code này xem nhé:
PHP:
Sub CheckProtect()
If Activesheet.ProtectContents then
Msgbox "Sheet Da bi khoa"
Else
Msgbox "Sheet chua bi khoa"
End If
End Sub
Vấn đề là chỗ này:
PHP:
Nếu Activesheet.ProtectContents = TRUE ==> Sheet đã bị khóa
Nếu Activesheet.ProtectContents = FALSE ==> Sheet chưa bị khóa



 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom