Khóa và mở khóa tất cả các sheet cùng lúc trong VBA

Khi sử dụng chức năng Protect Sheet trong Excel, chúng ta chỉ có thể khóa từng trang tính một. Như vậy với những bảng tính có nhiều trang tính (workbook có nhiều sheet) thì việc này khá bất tiện. Để khắc phục vấn đề này, chúng ta có thể ứng dụng VBA để có thể thực hiện khóa tất cả các sheet cùng lúc chỉ với 1 thao tác. Cách thực hiện như sau:

Bước 1: Mở cửa sổ VBA (phím tắt Alt + F11) và tạo 1 Module mới

Bước 2: Trong Module này chúng ta tạo 1 sub, lấy tên là Khoa_TatCa_Sheet

Sub Khoa_TatCa_Sheet

End Sub

Bước 3: Viết code trong sub này như sau:

Việc khóa tất cả các sheet trong Workbook => Cần tạo 1 vòng lặp để chạy trên tất cả các sheet trong workbook

Cần có 1 bảng thông báo để nhập mật khẩu khóa các sheet

Như vậy chúng ta cần có 2 biến:

  • Biến Các Sheet thành phần, gọi là biến Ten_Sheet, biến này được hiểu là các Sheet trong Excel
  • Biến Mật khẩu, gọi là MatKhau => Dạng dữ liệu là dạng chuỗi ký tự (cho phép cả số và chữ) => Mật khẩu sẽ được nhập bởi người dùng => Tạo 1 inputbox để người dùng có thể nhập mật khẩu vào đây

Câu lệnh hoàn chỉnh như sau:

Sub Khoa_TatCa_Sheet()

Dim Ten_Sheet as Worksheet

Dim MatKhauKhoa as String

MatKhauKhoa = InputBox(“Nhap mat khau”, vbOKCancel)

For Each Ten_Sheet in ActiveWorkbook.Worksheets

Ten_Sheet.Protect Password = MatKhauKhoa

Next Ten_Sheet

End Sub

Để mở khóa tất cả các sheet cùng lúc, chúng ta làm tương tự như vậy, chỉ thay câu lệnh Ten_Sheet.Protect thành Ten_Sheet.Unprotect:

Sub MoKhoa_TatCa_Sheet()

Dim Ten_Sheet as Worksheet

Dim MatKhauMo as String

MatKhauMo = InputBox(“Nhap mat khau”, vbOKCancel)

For Each Ten_Sheet in ActiveWorkbook.Worksheets

Ten_Sheet.Unrotect Password = MatKhauMo

Next Ten_Sheet

End Sub

Khi hoàn thành 2 Sub này chúng ta có thể vẽ ra các nút lệnh (Insert>Sharp) và gán Macro vào nút lệnh đó (Assign Macro)

Những điểm cần lưu ý:

  1. Khóa sheet với mật khẩu nào thì mở khóa với đúng mật khẩu đó
  2. Khi khóa sheet bằng câu lệnh VBA thì có thể bạn sẽ không tự mở khóa sheet bằng phương pháp thông thường được (chọn tab Review>Unprotect sheet>Nhập mật khẩu đã khóa) => Buộc phải kết hợp lệnh Mở khóa bằng VBA (khóa bằng VBA thì mở bằng VBA – lỗi này có thể xuất hiện ở 1 số phiên bản Microsoft Excel nhất định, nên bạn có thể kiểm tra lại xem phiên bản mình đang dùng có mắc lỗi này hay không)
  3. Vì vấn đề 2 nên chúng ta cũng nên hạn chế việc thiết lập khóa sheet trong VBA. Khi khóa Sheet bằng VBA cần cân nhắc kỹ và kết hợp thao tác mở khóa bằng câu lệnh VBA để tránh xung đột và phải tự thao tác bằng tay việc mở khóa.
  4. Có thể gắn việc đặt mật khẩu vào 1 vị trí nhất trong sheet thì chúng ta có thể quản lý mật khẩu một cách tốt hơn, tránh bị quên mật khẩu (luôn có khả năng Backup trong trường hợp xấu: quên mật khẩu, nhập sai…)

Chúc các bạn học tốt cùng Học Excel Online!