Got a version of Word that uses the menu interface (Word 97, Word 2000, Word 2002, or Word 2003)? This site is for you! If you use a later version of Word, visit our WordTips site focusing on the ribbon interface.
With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He is president of Sharon Parq Associates, a computer and publishing services company.
Learn more about Allen...
Please Note: This article is written for users of the following Microsoft Word versions: 97, 2000, 2002, and 2003. If you are using a later version (Word 2007 or later), this tip may not work for you. For a version of this tip written specifically for later versions of Word, click here: Specifying a Paper Tray in a Macro.
If you use macros to print documents, you already know that the macro can specify the actual printer to which output should be sent. What if you want to also specify a specific paper tray to be used on that printer? Unfortunately, this gets to be a bit of a sticky wicket in Word. A brief tour and explanation will help to clarify why this is the case.
Which paper tray is used by Word depends on a number of factors, some of them not under the control of Word itself. For instance, consider the following, some of which are dependent on the version of Word you are using.
Thus, Word has two places where you can specify paper trays, and your printer may have its own place to set a paper tray to use. This final setting area (through the Properties button) is beyond the "reach" of VBA—the dialog box displays settings in the printer driver, not in Word itself.
To make matters worse, there is no clear-cut explanation available concerning which settings have precedence in any given print job. Do the settings in the Page Setup dialog box override the printer driver setting? Does the printer driver setting override the Options dialog box setting? How does the Options dialog box setting relate to the Page Setup settings? You get the idea; a multitude of settings, combined with the vagaries of different printer driver settings and printer capabilities can lead to confusion; what may work in one mix of conditions might not work in another.
That being said, there are several approaches you can try in order to control the paper tray selection via a macro. It is important to keep in mind that your macro can specify settings in the Options dialog box, as well as in the Page Setup dialog box. Your macro cannot, however, specify settings accessible through the Properties button of the Print dialog box. (More on this in a moment.)
If you want to set the Page Setup tray settings, you can do so using a macro similar to the following:
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
This macro, despite its length, only sets two settings: the First Page setting and the Other Pages setting on the Paper Source tab of the Page Setup dialog box. The macro is also not complete, but only an example of how the actual "setting" could be done in your own macro. This particular code reads two settings from an INI file (the file name is specified in the strIniFile string), and then makes the settings based on the retrieved values. You would, obviously, need to supply the name of the INI file you wanted to use, as well as make sure that it was set up to contain the proper information in the proper format. (Setting up INI files is beyond the scope of this tip, but much information is available on the topic elsewhere.) Once the settings are read from the INI file, they are translated to settings that Word can understand, and then in the final With ... End With structure the dialog box changes are made.
For the reasons mentioned earlier, the approach exemplified in this macro might not work in all situations. If it doesn't, you may not be able to control the paper trays used by your printer, at least from a macro. Remember that the paper trays set through the Properties button are actually under the control of your printer driver, and the printer driver settings are not "visible" to VBA. A potential solution in this situation is to simply set up different printer drivers. Follow these general steps:
At this point you have multiple printer definitions set up, and each will print to a different paper tray on the same printer. You can now specify the desired printer, in a macro, so that the printout goes to the desired paper tray. The only drawback to this solution, of course, is that it takes quite a bit of setup work. If you work in an office with 50 users, this means you will need to make sure all 50 have each printer defined as described above.
Remember that the paper tray to be used by Word can be specified by the user through the selection of one or more settings in various dialog boxes, as detailed at the first of this tip. Because of this, some people have had success using the SendKeys statement to emulate the keypresses a user would use to specify a paper tray. (You can find information on SendKeys in the VBA online help available with Word.)
What SendKeys actually does is to stuff the keyboard buffer with a series of keypresses, just as they would be typed by the user. There is a potential problem with SendKeys, however. It can be unreliable because there is no way to insure that the keystrokes are actually going where you want. On a multi-threaded operating system (like Windows), some other process could intervene and derail the commands.
The bottom line is that, unfortunately, there is no "one size fits all" solution to selecting a paper tray using a macro. A solution that works for one person may not work for another. For this reason, you will need to experiment to see what solution will work best for you—but don't expect it to work for everyone else.
WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (1697) applies to Microsoft Word 97, 2000, 2002, and 2003. You can find a version of this tip for the ribbon interface of Word (Word 2007 and later) here: Specifying a Paper Tray in a Macro.
Comprehensive VBA Guide Visual Basic for Applications (VBA) is the language used for writing macros in all Office programs. This complete guide shows both professionals and novices how to master VBA in order to customize the entire Office suite for their needs. Check out Mastering VBA for Office 2010 today!