Home » VBA Excel » Bảo mật Worksheets, Workbooks và mã VBA

Bảo mật Worksheets, Workbooks và mã VBA

viết bởi Lê Quốc Thái
36 lượt xem

Excel cung cấp các phương pháp mà bạn có thể ngăn người dùng sửa đổi cửa sổ làm việc (workbooks), trang tính (worksheets) và mã VBA (VBA code). Khi bạn bảo vệ cửa sổ làm việc, bạn ngăn người dùng thêm hoặc xóa trang tính và ngăn người dùng di chuyển trang tính trong cửa sổ làm việc. Khi bạn bảo vệ trang tính, bạn đang ngăn người dùng thay đổi giá trị trong ô và thực hiện các thay đổi khác đối với trang tính. Trong khi bảo vệ cửa sổ làm việc áp dụng cho toàn bộ cửa sổ làm việc, bảo vệ trang tính hoạt động ở cấp trang tính và do đó các trang tính khác nhau có thể có các mức bảo vệ khác nhau. Cả bảo vệ cửa sổ làm việc và trang tính đều có thể được gán mật khẩu.

Bảo vệ cửa sổ làm việc (Workbook Protection)

Các mục Protect WorkbookProtect Worksheet nằm trong bảng Changes của tab Review của Ribbon. Khi bạn bảo vệ một sổ làm việc, bạn sẽ có hai tùy chọn bảo vệ. Kiểm tra tùy chọn Structure ngăn người dùng di chuyển, thêm hoặc xóa trang tính trong sổ làm việc. Tùy chọn Windows ngăn người dùng tạo các cửa sổ bổ sung cho sổ làm việc. Theo mặc định, Structure được bật và Windows bị tắt. Bạn có thể gán mật khẩu cho cài đặt bảo vệ sổ làm việc.

Review tab trong Excel
Review tab trong Excel

Bảo vệ trang tính (Worksheet Protection)

Bảo vệ trang tính nâng cao hơn một chút. Theo mặc định, tất cả các ô đều bị khóa, nhưng điều này không có hiệu lực cho đến khi bạn bảo vệ trang tính. Khi bạn bảo vệ trang tính, tất cả các ô đều bị khóa ngoại trừ những ô mà bạn đã mở khóa cụ thể. Khi bạn bảo vệ trang tính, bạn sẽ nhận được hộp thoại liệt kê một số thao tác mà bạn muốn cho phép người dùng thực hiện (chẳng hạn như định dạng ô) ngay cả khi trang tính được bảo vệ. Bạn có thể cung cấp mật khẩu để bảo vệ trang tính.

Nếu bạn chỉ muốn khóa một vài ô và mở khóa phần còn lại của trang tính, hãy chọn tất cả các ô bằng cách nhấp vào nút Select All  (hình vuông màu xám phía trên số hàng và ở bên trái các chữ cái của cột), sau đó chuyển đến tab Home của Ribbon và chọn mục Format trong bảng Cells ở phía bên phải của Ribbon. Tại đây, bạn hãy bỏ chọn mục Lock Cell. Điều này sẽ mở khóa tất cả các ô. Bây giờ, quay lại và khóa những ô bạn muốn khóa. Khi bạn bảo vệ trang tính, những ô đó sẽ được mở khóa và người dùng có thể thay đổi trang tính. Nếu bạn muốn khóa tất cả trừ một vài ô, hãy chọn những ô đó rồi bỏ chọn mục Lock Cell trong mục Cells trên tab Home của Ribbon. Vậy là bạn đã khóa trang tính.

Tùy chọn UserInterfaceOnly

Khi bạn khóa các ô trên một trang tính, bảo vệ đó sẽ áp dụng cho các hoạt động VBA cũng như các hành động của người dùng. Nếu mã VBA của bạn cố gắng sửa đổi một ô bị khóa, bạn sẽ gặp lỗi runtime error 1004. Một cách để khắc phục điều này là bỏ bảo vệ trang tính trước khi VBA liên quan chạy và sau đó bảo vệ lại nó sau khi VBA kết thúc. Đây là một giải pháp khá lằng nhằng. Cách tốt hơn là sử dụng gắn cờ UserInterfaceOnly khi bạn bảo vệ trang tính qua VBA. Bạn có thể chỉ định UserInterfaceOnly chỉ trong mã VBA. Không có phần tử giao diện người dùng (thanh lệnh, menu, v.v.) cho tùy chọn này; bạn phải sử dụng VBA. Khi bạn bảo vệ trang tính bằng UserInterfaceOnly, tính năng bảo vệ được áp dụng cho các hành động của người dùng (về cơ bản, hoạt động của bàn phím và chuột), nhưng VBA có thể tự do sửa đổi trang tính như thể không có biện pháp bảo vệ. Cài đặt UserInterfaceOnly không được lưu khi bạn đóng cửa sổ làm việc, vì vậy bạn cần đặt nó khi mở cửa sổ làm việc. Nơi tốt nhất để làm điều này là trong thủ tục sự kiện Workbook_Open. Ví dụ:

Private Sub Workbook_Open ()
Me.Worksheets (“Sheet1”). Protect UserInterfaceOnly: = True
Me.Worksheets (“Sheet2”). Protect UserInterfaceOnly: = True
Me.Worksheets (“Sheet3”). Protect UserInterfaceOnly: = True
End Sub


Mã này phải được đặt trong module ThisWorkbook của VBA Project của cửa sổ làm việc.

Ẩn công thức (Hiding Formulas)

Ngoài việc bảo vệ trang tính, bạn có thể ẩn các công thức trên trang tính. Thông thường, Excel sẽ hiển thị công thức của ô trong thanh công thức khi ô được chọn, ngay cả khi ô được bảo vệ. Để ẩn công thức của ô, hãy bấm vào Format trong bảng Cells của tab Home đầu của ribbon và chọn tùy chọn Format Cells. Trong hộp thoại đó, chọn tab Protection và chọn mục Hidden. Bây giờ, khi bạn bảo vệ trang tính, công thức sẽ không hiển thị trong thanh công thức. Bảo vệ này là yếu. Công thức có thể được truy xuất bằng mã VBA đơn giản.

Bảo mật dự án VBA (VBA Project Security)

Bạn có thể ẩn và khóa mã VBA của mình. Trong trình soạn thảo VBA, hãy chuyển đến menu Tools và chọn VBA Project. Trong hộp thoại đó, nhấp vào tab Protection và tích chọn tùy chọn Lock project for viewing. Khi cửa sổ làm việc được lưu và đóng, bảo vệ sẽ có hiệu lực và người dùng sẽ không thể xem hoặc chỉnh sửa mã VBA.

Cảnh báo bảo mật (Security Caveat)

Phải nói rằng khả năng bảo vệ trong Excel rất yếu, gần như không đáng để sử dụng. Có rất nhiều phần mềm có sẵn trên internet có thể phá vỡ lớp bảo vệ và cung cấp mật khẩu để vượt qua bất kỳ biện pháp bảo vệ bằng mật khẩu nào.

Tôi đã sử dụng VBAKey và ExcelKey để phá mật khẩu, bao gồm cả những mật khẩu trong Excel 2013 chỉ trong vài giây. Những phần mềm này có giá khoảng vài chục đến vài trăm đô la Mỹ, vì vậy chúng nằm trong tầm tay của những người muốn mua công thức và mã của bạn. Khả năng bảo vệ trong năm 2013 tốt hơn so với các phiên bản trước đó, nhưng vẫn còn yếu. Hầu hết các tiện ích phá mật khẩu không nhất thiết phải cung cấp cho bạn cùng một mật khẩu đã được sử dụng để bảo vệ đối tượng, nhưng cung cấp cho bạn một mật khẩu sẽ hoạt động. Bạn nên có các biện pháp bảo vệ cửa sổ làm việc, trang tính và VBA để ngăn người dùng dòm ngó sản phẩm trí tuệ của bạn hoặc sở hữu có giá trị. Nếu ai đó muốn xem và sửa đổi các công thức và mã của bạn, họ có thể làm điều đó với một chút nỗ lực.

Một yếu tố khác liên quan đến tính bảo mật của cửa sổ làm việc và trang tính trong Excel 2007 trở về sau thực sự không phải là một tệp Excel duy nhất mà thực sự là một tập hợp của hàng tá tệp XML. Các tệp này có thể được trích xuất bằng một chương trình zip đơn giản như WinZip, Winrar hoặc Secure Zip, sau đó nội dung của XML có thể đọc và ghi được. Đây là những tệp XML rất phức tạp và yêu cầu trình độ chuyên gia về XML. Đây là một lỗ hổng bảo mật khác trong các phiên bản Excel 2007 về sau.

Để có được bảo mật tốt hơn và bảo vệ tài sản trí tuệ của mình, bạn nên tạo COM Add-in trong VB6 hoặc .NET để thay thế mã VBA và chuyển đổi tất cả các chức năng của bạn thành mã được lưu trữ trong Automation Add-in hóa hoặc thư viện hàm trong VBNET. Trong những trường hợp này, bạn đang cấp cho người dùng mã chỉ có thể đọc bằng máy, trong khi mã nguồn vẫn an toàn với bạn. Một giải pháp thay thế khác là biên dịch tất cả các hàm của bạn trong NET Class và gọi chúng trong XLL do Excel DNA tạo ra. (Excel DNA là một công cụ rất thú vị để tạo XLL bằng cách sử dụng NET Class Libraries và sẽ được nhà phát triển trình độ trung cấp và cao cấp quan tâm).

Các bài viết liên quan:

Bài viết liên quan

2 những nhận xét

Excel VBA: Xóa dòng Excel dựa trên điều kiện đã xác định - LeQuocThai.Com Tháng Mười 17, 2020 - 11:49 Sáng

[…] Excel Version 3.0 Excel VBA: Xóa dòng Excel dựa trên điều kiện đã xác định Bảo mật Worksheets, Workbooks và mã VBA Phím Tắt Trong Excel 2007, 2010, 2013, 2016, 2019 Thông Dụng nhất Các Bạn Nên Nhớ […]

Trả lời
Excel VBA: Xóa dòng/xóa dòng trống - LeQuocThai.Com Tháng Mười 17, 2020 - 11:09 Chiều

[…] dòng trống Excel VBA: Xóa dòng Excel dựa trên điều kiện đã xác định Bảo mật Worksheets, Workbooks và mã VBA Phím Tắt Trong Excel 2007, 2010, 2013, 2016, 2019 Thông Dụng nhất Các Bạn Nên Nhớ […]

Trả lời

Viết ý kiến của bạn

LeQuocThai.Com - Chuyên trang Excel | Sử dụng cookies để tăng trãi nghiệm người dùng. Đồng ý Xem thêm

viVI
en_USEN viVI