Cho mình hỏi về code khóa các cells chứa công thức, các cell không có công thức sửa bình thường, lặp lại trong nhiều sheet của một workbook được không ạ?
Bài viết của Gitiho dưới đây chỉ đề cập khóa sheet thông thường thôi ạ,
Chào bạn bạn recon macro khoá công thức rồi dùng vòng lặp chạy toàn bộ workbook là được nhé.
1. Trước hết bạn cần hiểu cơ chế vận hành của ProtectSheet:
- Khi khóa là khóa toàn bộ các ô được lock (trong format cells)
- việc lock các ô dựa vào thao tác format cells, chứ không phải tự nhận biết dựa theo giá trị trong ô.
Do đó việc ô chứa công thức hay giá trị, hay ô trống về bản chất không liên quan gì khi bạn khóa sheet.
2. Có thể làm như thế nào với mục tiêu của bạn:
Đầu tiên bạn record macro cho thao tác Format cells > Protection > bấm chọn lock => có code lock ô
Record tiếp cho thao tác format cells > Protection > bỏ chọn lock => có code bỏ lock ô
Sau đó bạn sẽ xác định phạm vi cần khóa: ví dụ tính từ Range("E5:G" & dongcuoi)
vùng chứa công thức nên là vùng liền nhau để dễ viết code. Nếu là các ô riêng lẻ cách nhau thì việc xác định vùng cần lock sẽ phức tạp.
code mẫu:
Range("E5:G" & dongcuoi).Locked = True
nếu là True thì là lock, False là bỏ lock.
Quy trình:
Bước 1: bỏ lock toàn bộ các ô trong sheet:
bạn có thể thao tác tay bước này (không cần code)
Bước 2: code khóa những ô có công thức
Sub Khoa_O()
ActiveSheet.Unprotect
Range("E5:G" & dongcuoi).Locked = True
ActiveSheet.Protect
End Sub
Bước 3: tạo 1 hình khối (Shape) và gán sub trên vào => mỗi khi muốn khóa vùng chứa công thức (phạm vi từ E5 tới dòng cuối cột G) thì bạn bấm vào shape này là được.
Vâng em cám ơn, để em tìm hiểu kỹ thêm rồi có gì thắc mắc em hỏi thêm ạ
Chúc bạn học tốt cùng gitiho