Thủ thuật ngăn chặn thêm sheet trong bảng tính excel, không cho in bảng tính,…

Thủ thuật ngăn chặn người sử dụng thực hiện một số hành động nào đó nhất định như ngăn chặn thêm sheet trong bảng tính excel, không cho in bảng tính,…

Mặc định trên Excel có hỗ trợ tính năng bảo vệ cho bảng tính ( như Protect Sheet, Protect Workbook), nhưng các công cụ chưa thể đáp ứng được các nhu cầu cụ thể của người sử dụng, chẳng hạn cho phép lưu nhưng không cho phép thêm sheet mới, cho lưu nhưng không cho phép in,…Do vậy bài viết này xin chia sẻ thủ thuật ngăn chặn thêm sheet trong bảng tính excel, không cho in bảng tính, không cho save as bảng tính excel.

Bạn có thể quản lý việc tương tác với các bảng tính của bạn bằng cách giám sát và đáp ứng các sự kiện. Các sự kiện (event), là những hành động xảy ra khi bạn làm việc với các bảng tính hoặc các Sheet. Những sự kiện này thường bao gồm việc mở (open) một bảng tính, lưu (save) nó, và đóng (close) nó. Bạn có thể bảo Excel chạy những mã Visual Basic (macro) một cách tự động khi xảy ra bất kỳ một trong những sự kiện như thế.

Tuy nhiên, bạn nên biết rằng, người sử dụng có thể vượt qua tất cả những mã bảo vệ bởi Visual Basic bẳng cách vô hiệu hóa việc thực thi các macro: Nhấn nút OfficeExcel OpionsTrust CenterTrust Center SettingMacro Settings [E2003: Tools | Macro | Security]. Nếu đặt mức độ an toàn là Disable all macros with notification [E2003: mức Medium], mỗi khi mở một bảng tính có chứa macro, Excel sẽ xuất hiện một hộp thông báo và cho phép người sử dụng có cơ hội để tắt các macro. Nếu đặt mức độ an toàn là Disable all macros without notification [E2003: mức High], Excel sẽ ngăn không cho chạy tất cả các macro có trong bảng tính. Nói cách khác, khi cần phải dùng các macro có trong bảng tính, người sử dụng sẽ chọn một mức an toàn thích hợp để cho phép sử dụng các macro.

Ngăn chặn việc chèn thêm Sheet vào một bảng tính

Excel có chức năng Protect Workbook, không cho phép thay đổi cấu trúc của bảng tính như thêm, xóa, di chuyển, hay đổi tên các Sheet. Tuy nhiên, có thể bạn chỉ muốn ngăn chận việc thêm Sheet thôi, còn những việc khác thì vẫn cho phép. Đoạn code sau đây giúp bạn làm việc đó:

VBA Excel Code:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Application.DisplayAlerts = False
MsgBox "Sorry, you cannot add any more sheets to this workbook", _
vbInformation
Sh.Delete
Application.DisplayAlerts = True
End Sub

Khi có ai đó chèn thêm một Sheet mới vào trong bảng tính, trước tiên Excel sẽ xuất hiện hộp cảnh cáo: “Xin lỗi, bạn không thể thêm bất kỳ Sheet nào vào trong bảng tính này”, rồi ngay lập tức, Excel sẽ xóa cái Sheet mới thêm vào khi nút OK trong hộp cảnh báo được nhấn. Công dụng của dòng lệnh Application.DisplayAlerts = False là không hiển thị hộp cảnh báo xác nhận việc xóa một Sheet nào đó trong Excel.

Một cách khác để ngăn chận việc chèn thêm Sheet vào bảng tính là bạn chọn Review trên thanh Ribbon, chọn lệnh Protect Workbook trong nhóm Changes, rồi chọn lệnh Protect Structure and Windows [E2003: Tools | Protection | Protect Workbook… đánh dấu kiểm vào tùy chọn Structure] và nhấn OK (có thể đặt password nếu thích). Tuy nhiên, như đã nói ở đầu bài, việc này sẽ ngăn chận hết mọi thao tác với các Sheet trong bảng tính.

Ngăn chặn việc in một bảng tính

Đôi khi bạn phải rời bàn làm việc đi đâu đó mà quên tắt máy (chuyện này là chuyện thường), cho dù bạn đã làm công việc ngăn chận việc có ai đó chép bảng tính của bạn ra ngoài, như đã nói ở trên, có thể bạn còn lo xa hơn, muốn rằng bảng tính này cũng sẽ không bị in ra khi bạn vắng mặt. Nếu thật sự bạn muốn như vậy, bạn hãy dùng sự kiện Before Print. Hãy nhập đoạn code sau trong cửa sổ VBE:

VBA excel Code:
Private Sub workbook_BeforePrint(Cancel As Boolean)
Cancel = True
MsgBox "Sorry, you cannot Print from this workbook", vbInformation
End Sub

Nhấn Ctrl+Q để quay về Excel và lưu lại. Từ bây giờ, nếu có ai có muốn ra lệnh in bảng tính này, sẽ không có gì xảy ra. Dòng lệnh MsgBox ở đoạn code trên chỉ là một tùy chọn, nhưng bạn nên sử dụng nó, vì ít nhất thì nó cũng để lại một thông tin gì đó, để người khác sẽ không tưởng lầm rằng máy in của họ bị hư, hoặc là chương trình Excel có lỗi!

Nếu bạn chỉ muốn ngăn chận in một phần nào đó trong bảng tính, ví dụ không cho in Sheet1 và Sheet2, bạn sử dụng đoạn code sau:

VBA Excel Code:
Private Sub workbook_BeforePrint(Cancel As Boolean)
Select Case ActiveSheet.Name
Case "Sheet1", "Sheet2"
Cancel = True
MsgBox "Sorry, you cannot print this sheet from this workbook", _
vbInformation
End Select
End Sub

Dĩ nhiên bạn có thể thêm vào bất kỳ Sheet nào có trong bảng tính của bạn. Chỉ việc nhập tên của nó vào trong hàng có lệnh Case, và tách biệt Sheet này với Sheet khác bằng dấu phẩy, và nhớ nhập tên Sheet trong một cặp dấu nháy kép. Trong trường hợp bạn chỉ muốn ngăn chận không cho in một Sheet mà thôi, bạn chỉ cần nhập tên của Sheet đó (trong cặp nháy kép) sau chữ Case, và không cần gõ dấu phẩy.

Ngăn chặn việc lưu lại bảng tính với một tên khác

Bạn có thể thiết lập thuộc tính “Read only” cho bất kỳ một bảng tính nào, bằng cách nhấn OfficeSave, nhấn nút Tools, chọn General Options [E2003: File | Save As | Tools | General Options] và kích hoạt hộp kiểm Read only recommended. Việc này ngăn chận người sử dụng lưu lại những thay đổi trên bảng tính, trừ phi họ lưu lại bảng tính với một tên khác hoặc lưu vào một nơi khác.

Tuy nhiên, có thể điều bạn muốn là không cho lưu lại bảng tính của bạn với tên khác, cũng không cho lưu vào một nơi khác. Nói cách khác, bạn muốn người khác chỉ có thể lưu lại bảng tính này với chính tên gốc của nó, chứ không được sao chép nó. Điều này đặc biệt hữu dụng khi có nhiều người cùng sử dụng chung một bảng tính, và bạn không muốn trong ổ cứng của mình đầy dẫy những bản sao của bảng tính này, cho dù là với một tên khác, hay ở một thư mục khác.

Sự kiện Before Save mà tôi sắp nói đến đã có từ thời Excel 97. Đúng như tên gọi của nó, sự kiện này chỉ xuất hiện ngay trước khi bảng tính được lưu, cho phép bạn can thiệp kịp thời việc lưu lại bảng tính, đưa ra một cảnh báo, và không cho Excel lưu bảng tính.

Trước khi tự thực hiện điều này vào bảng tính, hãy chắn chắn rằng bạn đã lưu lại bảng tính của bạn. Bởi vì việc đưa đoạn code sau đây vào môt bảng tính chưa được lưu, có thể sẽ gây cho bạn nhiều rắc rối.

Để đưa đoạn code sau vào bảng tính, bạn hãy chọn DevelopeVisual Basic (hoặc nhấn Alt+F11), và nhấp đúp chuột vào mục ThisWorkbook trong khung
Project Explorer. Nếu trên Ribbon của bạn không có mục Develope, bạn hãy vào trong Excel OptionsPopular, đánh dấu vào tùy chọn Show Develope tab in the Ribbon, rồi nhấn OK. [E2003, nhấn phải chuột vào biểu tượng Excel ở ngay bên trái menu File trên thanh menu, và chọn mục View Code, như minh họa ở hình bên dưới]:


Sử dụng Quick access menu (trong Excel 2003) để nhập code áp dụng cho workbook

Bạn hãy nhập đoạn code sau đây vào cửa sổ VBE. Sau khi nhập xong, nhấn Alt+Q để trở về Excel, rồi lưu lại bảng tính:

VBA Excel Code:
Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Dim lReply As Long
If SaveAsUI = True Then
lReply = MsgBox("Sorry, you are not allowed to save this workbook as another name." _
& "Do you wish to save this workbook?", vbQuestion + vbOKCancel)
Cancel = (lReply = vbCancel)
If Cancel = False Then Me.Save
Cancel = True
End If
End Sub

Thử một tí. Bạn nhấn Ctrl+S (hoặc gọi lệnh Save) xem. Bảng tính của bạn lưu bình thường. Bây giờ bạn nhấn F12 (hoặc gọi lệnh Save as), bạn sẽ gặp một cảnh báo, nói rằng bạn không thể lưu lại bảng tính này dưới bất kỳ một tên nào khác, trừ phi bạn vô hiệu hóa các macro.

Nói thêm, khi bạn lưu một bảng tính có chứa macro hoặc code trong Excel 2007, bạn sẽ được nhắc nhở rằng bạn phải lưu file ở dạng cho phép macro hoạt động (macro-enable workbook), có phần mở rộng là *.xlsm, chứ không thể lưu ở dạng bình thường (*.xlsx).

Add a Comment

Your email address will not be published. Required fields are marked *