Chặn Người Dùng In Dữ Liệu Trong Excel Với VBA

Chia sẻ bởi:api_publisher
★★★★★
Quảng cáo

Tóm tắt: Hướng dẫn thực hành Excel, trình bày theo từng bước, có công thức mẫu và lưu ý áp dụng nhanh trong công việc.

Đôi khi trong file Excel của bạn có chứa những thông tin nhạy cảm và bạn muốn ngăn chặn việc các dữ liệu này bị truyền ra ngoài. Trong bài viết này, bạn sẽ được học các cách để ngăn cản bất cứ ai thực hiện chức năng in từ tabs Excel của bạn.

Một Vài Lưu Ý Khi Vô Hiệu Hóa Chức Năng Print

Đầu tiên, cần phải làm rõ rằng: cách làm này có thể chặn người khác in worksheet của bạn nhưng hoàn toàn không thể ngăn cản việc người đó chụp màn hình và in chúng ra. Điều này chỉ để làm khó cho việc in dữ liệu ra và hy vọng nó như là một  lời nhắc nhở với người xem rằng không nên in nội dung được lưu trữ trong workbook này.

Thứ hai, mã VBA bạn sử dụng sẽ bị kích hoạt bởi hành động “Printing” và vì vậy nó sẽ chỉ hoạt động nếu VBA Events được cho phép trong Excel. VBA Events được mặc định và chỉ có thể tắt nó đi khi macros bị vô hiệu hóa hoặc khi bạn dùng mã VBA để tắt VBA Events.

Hầu hết người dùng Excel không đủ trình độ để tắt tính năng VBA Events, nhưng có thể tạo nút trong workbook của bạn để người dùng phải click vào để sử dụng. Một thực tế phổ biến là có thể ẩn tất cả worksheet với  tính năng xlVeryHidden và để lại một worksheet với nút được gán tới một macro. Khi click , nút này có thể thực hiện mã lệnh để bỏ ẩn tất cả các worksheets và đảm bảo rằng VBA Events đang hoạt động. Mã này có thể viết như sau:

Sub FileStartup()

Dim sht As Worksheet

‘Optimize Code Application.ScreenUpdating = True

‘Loop Through Each Worksheet And Unhide For Each sht In ThisWorkbook.Worksheets sht.Visible = xlVisible Next sht

‘Ensure VBA Events Are Turned On Application.EnableEvents = True

End Sub

Nơi Lưu Trữ Macros

Chặn Người Dùng In Dữ Liệu Trong Excel Với VBA

Không giống như các hàm và macros VBA thông thường, những macros được dùng để kích hoạt event cần được lưu trữ trong Worksheet Object Module và trong bài viết này đó là Workbook Object Module. Để tạo module, bạn cần nhấn đúp chuột vào tên  ThisWorkbook Object trong Microsoft Excel Objects folder trong Project Window của bạn( trong phạm vi Visual Basic Editor). Sau khi nhấn đúp chuột, bạn sẽ thấy một sheet trắng xuất hiện và bạn có thể tiếp tục quá trình lưu trữ những macros của mình.

Tạo Macros VBA Để Chặn Lệnh In

Chúng ta sẽ bắt đầu với một mã VBA có thể vô hiệu hóa lệnh in toàn bộ workbook.  Nó sẽ được kích hoạt tại BeforePrint event… có nghĩa là mã này sẽ chạy trước khi bất cứ lệnh in nào diễn ra.

Mã này rất đơn giản bởi nó chỉ làm thay đổi biểu tượng nút Cancel (ie True) và thông báo tới người dùng là họ không thể thực hiện lệnh in với file Excel này.

Private Sub Workbook_BeforePrint(Cancel As Boolean) ‘PURPOSE: Prevent user from printing this workbook ‘NOTES: This Code Must Reside in the ThisWorkbook Object ‘SOURCE: www.TheSpreadsheetGuru.com/the-code-vault’Cancel the Print Request Cancel = True

‘Notify User They Cannot Print this workbook MsgBox “You do not have permission to print this file”, vbOKOnly, “Cannot Print”

End Su

Chặn Lệnh In Trong Một Worksheet Cụ Thể

Bây giờ giả định rằng bạn chỉ quan tâm tới việc in một worksheet nào đó. Bạn cần cung cấp tên  worksheet bạn muốn vô hiệu hóa và mã sẽ chạy để kiểm tra xem liệu nó có phải worksheet đang được lựa chọn để in ra hay không?

Hoặc bạn có thể chỉ cần thay đổi tên của worksheet và bỏ qua chức năng này của macros. Tuy nhiên để tăng tính chắc chắn của macros hơn nữa, nên tham chiếu bằng  tên mã thay vì tên bằng văn bản bởi hầu hết mọi người không biết cách thay đổi tên mã của một worksheet.

Private Sub Workbook_BeforePrint(Cancel As Boolean) ‘PURPOSE: Prevent user from printing A Specific Worksheet ‘NOTES: This Code Must Reside in the ThisWorkbook Object ‘SOURCE: www.TheSpreadsheetGuru.com/the-code-vaultDim WorksheetName As String Dim sht As Worksheet

WorksheetName = “Sheet1”

For Each sht In ThisWorkbook.Windows(1).SelectedSheets

If sht.Name = WorksheetName Then ‘Cancel the Print Request Cancel = True Exit For End If Next sht

‘Notify User They Cannot Print this workbook MsgBox “You do not have permission to print the [” _ & WorksheetName & “] worksheet”, vbOKOnly, “Cannot Print”

End Sub

Vô Hiệu Hóa Chức Năng In Với Nhiều Worksheet

Dưới đây là một dạng khác cho phép bạn chặn tính năng in cho nhiều worksheet cụ thể trong file Excel của mình. Lần nữa, bạn có thể tăng tính chắc chắn bằng cách sử dụng tên mã worksheet thay vì tên của nó.

Private Sub Workbook_BeforePrint(Cancel As Boolean) ‘PURPOSE: Prevent user from printing Specific Worksheets ‘NOTES: This Code Must Reside in the ThisWorkbook Object ‘SOURCE: www.TheSpreadsheetGuru.com/the-code-vaultDim DoNotPrintList As String Dim DisablePrint As Variant Dim sht As Worksheet

‘Store Names of worksheets that can’t be printed DisablePrint = Array(“Sheet1”, “Sheet3”, “Sheet5”)

‘Create a list of all the sheets not allowed to be printed For x = LBound(DisablePrint) To UBound(DisablePrint) DoNotPrintList = DoNotPrintList & DisablePrint(x) & “;” Next x

Mã VBA mẫu
'Loop through each worksheet that is currently selected
For Each sht In ThisWorkbook.Windows(1).SelectedSheets 'Cancel the Print Request
    if Sheet Name Should not be printed
        If DoNotPrintList Like "*" & sht.Name & ";*" Then Cancel = True Exit
            For End
                If
            Next sht

‘Notify User They Cannot Print this worksheet MsgBox “You do not have permission to print the [” _ & sht.Name & “] worksheet”, vbOKOnly, “Cannot Print”

End Sub

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

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

Quảng cáo

Cũ vẫn chất

Xem thêm