Chỉ định Khay giấy trong Macro (Microsoft Word)
Nếu bạn sử dụng macro để in tài liệu, bạn đã biết rằng macro có thể chỉ định máy in thực tế mà đầu ra sẽ được gửi đến. Điều gì xảy ra nếu bạn muốn chỉ định một khay giấy cụ thể được sử dụng trên máy in đó? Thật không may, điều này trở nên hơi khó khăn trong Word. Một chuyến tham quan và giải thích ngắn gọn sẽ giúp làm rõ lý do tại sao lại như vậy.
Việc Word sử dụng khay giấy nào phụ thuộc vào một số yếu tố, một số yếu tố không nằm trong sự kiểm soát của chính Word. Ví dụ, hãy xem xét những điều sau đây, một số trong số đó phụ thuộc vào phiên bản Word bạn đang sử dụng.
-
Nếu bạn chọn Công cụ | Tùy chọn | In, bạn có thể chỉ định Khay Mặc định.
-
Nếu bạn chọn File | Thiết lập trang | Nguồn giấy, bạn có thể chỉ định khay giấy nào sẽ sử dụng cho trang đầu tiên và khay giấy nào sẽ sử dụng cho các trang tiếp theo.
Nếu bạn nhấp vào Thuộc tính từ bên trong hộp thoại In (Ctrl + P *), bạn có thể thường xuyên (tùy thuộc vào máy in của mình) lục lọi và chọn khay giấy.
Do đó, Word có hai nơi để bạn có thể chỉ định khay giấy và máy in của bạn có thể có nơi riêng để đặt khay giấy để sử dụng. Vùng cài đặt cuối cùng này (thông qua nút Thuộc tính) nằm ngoài “tầm với” của VBA — hộp thoại hiển thị cài đặt trong trình điều khiển máy in, không phải trong chính Word.
Để làm cho vấn đề tồi tệ hơn, không có lời giải thích rõ ràng nào liên quan đến cài đặt nào được ưu tiên trong bất kỳ lệnh in nhất định nào. Các cài đặt trong hộp thoại Thiết lập Trang có ghi đè cài đặt trình điều khiển máy in không? Cài đặt trình điều khiển máy in có ghi đè cài đặt hộp thoại Tùy chọn không? Cài đặt hộp thoại Tùy chọn liên quan như thế nào đến cài đặt Thiết lập Trang? Bạn có được ý tưởng; vô số cài đặt, kết hợp với sự mơ hồ của các cài đặt trình điều khiển máy in khác nhau và khả năng của máy in có thể dẫn đến nhầm lẫn; những gì có thể hoạt động trong một hỗn hợp các điều kiện có thể không hoạt động trong một điều kiện khác.
Như đã nói, có một số cách tiếp cận bạn có thể thử để kiểm soát việc lựa chọn khay giấy thông qua macro. Điều quan trọng cần ghi nhớ là macro của bạn có thể chỉ định cài đặt trong hộp thoại Tùy chọn, cũng như trong hộp thoại Thiết lập trang. Tuy nhiên, macro của bạn không thể chỉ định các cài đặt có thể truy cập được thông qua nút Thuộc tính của hộp thoại In. (Thông tin thêm về điều này trong giây lát.)
Nếu bạn muốn đặt cài đặt khay Thiết lập Trang, bạn có thể thực hiện việc này bằng cách sử dụng macro tương tự như sau:
Sub CustomPageSetup() Dim strTrayFirst As String Dim strTrayOther As String Dim lngTrayFirst As Long Dim lngTrayOther As Long 'Other setup code goes here strTrayFirst = System.PrivateProfileString(strIniFile, _ "Printer Trays", "Letter First") If strTrayFirst <> "" Then Select Case strTrayFirst Case "Automatic Sheet Feed" lngTrayFirst = wdPrinterAutomaticSheetFeed Case "Default Bin" lngTrayFirst = wdPrinterDefaultBin Case "Large Capacity Bin" lngTrayFirst = wdPrinterLargeCapacityBin Case "Large Format Bin" lngTrayFirst = wdPrinterLargeFormatBin Case "Lower Bin" lngTrayFirst = wdPrinterLowerBin Case "Manual Feed" lngTrayFirst = wdPrinterManualFeed Case "Middle Bin" lngTrayFirst = wdPrinterMiddleBin Case "Upper Bin" lngTrayFirst = wdPrinterUpperBin Case Else lngTrayFirst = wdPrinterLowerBin End Select End If strTrayOther = System.PrivateProfileString(strIniFile, _ "Printer Trays", "Letter Other") If strTrayOther <> "" Then Select Case strTrayOther Case "Automatic Sheet Feed" lngTrayOther = wdPrinterAutomaticSheetFeed Case "Default Bin" lngTrayFirst = wdPrinterDefaultBin Case "Large Capacity Bin" lngTrayOther = wdPrinterLargeCapacityBin Case "Large Format Bin" lngTrayOther = wdPrinterLargeFormatBin Case "Lower Bin" lngTrayOther = wdPrinterLowerBin Case "Manual Feed" lngTrayOther = wdPrinterManualFeed Case "Middle Bin" lngTrayOther = wdPrinterMiddleBin Case "Upper Bin" lngTrayOther = wdPrinterUpperBin Case Else lngTrayOther = wdPrinterUpperBin End Select End If With ActiveDocument.PageSetup .FirstPageTray = lngTrayFirst .OtherPagesTray = lngTrayOther End With End Sub
Macro này, bất chấp chiều dài của nó, chỉ đặt hai cài đặt: cài đặt Trang đầu tiên và cài đặt Trang khác trên tab Nguồn giấy của hộp thoại Thiết lập trang. Macro cũng không hoàn chỉnh, nhưng chỉ là một ví dụ về cách “cài đặt” thực tế có thể được thực hiện trong macro của riêng bạn. Mã cụ thể này đọc hai cài đặt từ tệp INI (tên tệp được chỉ định trong chuỗi strIniFile), sau đó thực hiện cài đặt dựa trên các giá trị được truy xuất. Rõ ràng là bạn cần cung cấp tên của tệp INI mà bạn muốn sử dụng, cũng như đảm bảo rằng tệp đó được thiết lập để chứa thông tin thích hợp ở định dạng thích hợp. (Thiết lập tệp INI nằm ngoài phạm vi của mẹo này, nhưng nhiều thông tin có sẵn về chủ đề ở nơi khác.) Khi cài đặt được đọc từ tệp INI, chúng được dịch sang cài đặt mà Word có thể hiểu được và sau đó ở phần cuối cùng với … Kết thúc Với cấu trúc hộp thoại thay đổi được thực hiện.
Vì những lý do đã đề cập trước đó, cách tiếp cận được nêu trong macro này có thể không hoạt động trong mọi tình huống. Nếu không, bạn có thể không kiểm soát được các khay giấy được máy in của mình sử dụng, ít nhất là từ macro. Hãy nhớ rằng các khay giấy được đặt thông qua nút Thuộc tính thực sự nằm dưới sự kiểm soát của trình điều khiển máy in của bạn và cài đặt trình điều khiển máy in không “hiển thị” với VBA. Một giải pháp tiềm năng trong tình huống này là chỉ cần thiết lập các trình điều khiển máy in khác nhau. Làm theo các bước chung sau:
-
Xác định số lượng khay giấy bạn muốn sử dụng trên máy in.
-
Xác định máy in mới trong Windows cho mỗi khay giấy bạn muốn sử dụng.
Ví dụ: nếu bạn muốn sử dụng ba khay giấy khác nhau, bạn sẽ xác định ba máy in, mỗi máy có tên đại diện cho khay giấy.
-
Nhấp chuột phải vào định nghĩa máy in và thay đổi các thuộc tính của máy in để máy in in ra khay giấy mong muốn.
-
Lặp lại bước 3 cho từng định nghĩa máy in khác, đảm bảo bạn chỉ định các khay giấy khác nhau cho từng định nghĩa.
Tại thời điểm này, bạn đã thiết lập nhiều định nghĩa máy in và mỗi định nghĩa sẽ in ra khay giấy khác nhau trên cùng một máy in. Bây giờ bạn có thể chỉ định máy in mong muốn, trong macro, để bản in chuyển đến khay giấy mong muốn. Tất nhiên, hạn chế duy nhất của giải pháp này là nó tốn khá nhiều công việc thiết lập. Nếu bạn làm việc trong một văn phòng với 50 người dùng, điều này có nghĩa là bạn sẽ cần đảm bảo rằng cả 50 người đều có từng máy in được xác định như mô tả ở trên.
Hãy nhớ rằng người dùng có thể chỉ định khay giấy được sử dụng bởi Word thông qua việc lựa chọn một hoặc nhiều cài đặt trong các hộp thoại khác nhau, như được trình bày chi tiết ở phần đầu tiên của mẹo này. Do đó, một số người đã thành công khi sử dụng câu lệnh SendKeys để mô phỏng các lần nhấn phím mà người dùng sẽ sử dụng để chỉ định khay giấy. (Bạn có thể tìm thông tin về SendKeys trong trợ giúp trực tuyến VBA có sẵn với Word.)
Những gì SendKeys thực sự làm là nhồi vào bộ đệm bàn phím bằng một loạt các lần nhấn phím, giống như chúng sẽ được người dùng gõ. Tuy nhiên, có một vấn đề tiềm ẩn với SendKeys. Nó có thể không đáng tin cậy vì không có cách nào để đảm bảo rằng các lần nhấn phím thực sự đi đến nơi bạn muốn. Trên hệ điều hành đa luồng (như Windows), một số quy trình khác có thể can thiệp và làm trật bánh các lệnh.
Điểm mấu chốt là, thật không may, không có “một kích thước phù hợp với tất cả”
giải pháp chọn khay giấy bằng macro. Một giải pháp hiệu quả với người này có thể không hiệu quả với người khác. Vì lý do này, bạn sẽ cần phải thử nghiệm để xem giải pháp nào sẽ phù hợp nhất với bạn — nhưng đừng mong đợi nó hiệu quả với những người khác.
_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 các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.
(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (1697) áp dụng cho Microsoft Word 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 Word (Word 2007 và sau này) tại đây: