Karen đang tìm cách in toàn bộ sổ làm việc, ngay cả khi người dùng chọn in một trang tính. Nói cách khác, cô ấy đang tìm cách in toàn bộ sổ làm việc hoặc không in gì cả — không nên có tùy chọn “ở giữa”.

Cách duy nhất để xử lý điều này là thông qua việc sử dụng macro. VBA cho phép bạn tạo các macro được bắt đầu khi các sự kiện nhất định xảy ra. Một trong những sự kiện có thể kích hoạt macro là sự kiện “in”. Khi ai đó yêu cầu in hoặc chọn xem bản xem trước khi in, sự kiện BeforePrint của đối tượng Workbook sẽ được kích hoạt. Bạn có thể tạo macro của riêng mình để thực thi khi sự kiện được kích hoạt.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim sht As Variant     Dim bPreview As Boolean     Dim iResponse As Integer     On Error GoTo ErrHandler

iResponse = MsgBox(prompt:="Do you want to Print Preview?", _         Buttons:=vbYesNoCancel, Title:="Preview?")



Select Case iResponse         Case vbYes             bPreview = True         Case vbNo             bPreview = False         Case Else             GoTo ExitHandler     End Select     Application.EnableEvents = False     For Each sht In Sheets         If sht.Visible Then             sht.PrintOut Preview:=bPreview         End If     Next

ExitHandler:

Application.EnableEvents = True     Cancel = True     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Bất cứ khi nào Excel sẵn sàng in hoặc bất cứ khi nào bản xem trước bản in được gọi, sự kiện BeforePrint sẽ được kích hoạt và macro này sẽ chạy. Trước tiên, macro hỏi người dùng xem họ có muốn xem trước bản in hay không. Cấu trúc Chọn trường hợp được sử dụng để đặt biến bPreview dựa trên câu trả lời cho câu hỏi. Sau đó, cài đặt bPreview sẽ kiểm soát những gì xảy ra.

Nếu người dùng nhấp vào Hủy khi được hỏi về việc xem trước, thì macro sẽ được thoát và quá trình in sẽ bị hủy. Nếu không, mỗi trang tính trong sổ làm việc được kiểm tra để in hoặc xem trước. Nếu trang tính được hiển thị, nó sẽ được in và thuộc tính Preview được đặt bằng bPreview (True có nghĩa là trang tính được xem trước; False có nghĩa là nó thực sự được in).

Lưu ý rằng macro đặt thuộc tính EnableEvents thành Sai. Điều này được thực hiện để không có sự kiện nào khác có thể kích hoạt trong khi in hoặc xem trước.

Nếu EnableEvents được để “bật”, thì mỗi khi phương thức PrintOut được sử dụng, toàn bộ sự kiện BeforePrint lại được kích hoạt — người dùng sẽ kết thúc trong một vòng lặp vô tận nếu xử lý sự kiện không được tắt.

Ngoài ra, hãy lưu ý rằng một trong những điều cuối cùng xảy ra trước khi thoát macro là thuộc tính Cancel được đặt thành True. Điều này được thực hiện để yêu cầu bản in gốc hoặc bản xem trước bản in đã tạo ra sự kiện BeforePrint bị hủy bỏ. Rốt cuộc, không cần phải hoàn thành yêu cầu đó, vì macro đã thực hiện tất cả việc xử lý in cho người dùng.

Tất nhiên, có một lưu ý khi sử dụng cách tiếp cận này để in: Nếu macro không được bật, trình xử lý sẽ không chạy và người dùng có thể in như mong muốn. (Giữ phím Shift trong khi mở sổ làm việc sẽ vô hiệu hóa macro và người dùng thường được hỏi xem họ có muốn bật macro hay không.) Các vấn đề khác của ExcelTips đã thảo luận về thực tế này.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (11629) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.