In Tất cả hoặc Không có gì (Microsoft Excel)
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 phương pháp in này: 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 (3329) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: