Word.Tips.Net WordTips (Menu Interface)

Specifying a Paper Tray in a Macro

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.

  • If you choose Tools | Options | Print, you can specify a Default Tray.
  • If you choose File | Page Setup | Paper Source, you can specify which paper tray to use for the first page and which to use for subsequent pages.
  • If you click Properties from within the Print dialog box (Ctrl+P), you can often (depending on your printer) rummage around and select a paper tray.

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:

  1. Determine how many paper trays you want to use on the printer.
  2. Define a new printer in Windows for each paper tray you want to use. For instance, if you want to use three different paper trays, you would define three printers, each with a name representative of a paper tray.
  3. Right-click on a printer definition and change the properties of the printer so it prints to the desired paper tray.
  4. Repeat step 3 for each of the other printer definitions, making sure you specify different paper trays for each one.

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.

Related Tips:

Create Custom Apps with VBA! Discover how to extend the capabilities of Office 2013 (Word, Excel, PowerPoint, Outlook, and Access) with VBA programming, using it for writing macros, automating Office applications, and creating custom applications. Check out Mastering VBA for Office 2013 today!


Leave your own comment:

  Notify me about new comments ONLY FOR THIS TIP
Notify me about new comments ANYWHERE ON THIS SITE
Hide my email address
*What is 5+3 (To prevent automated submissions and spam.)
           Commenting Terms

Comments for this tip:

There are currently no comments for this tip. (Be the first to leave your comment—just use the simple form above!)

Our Company

Sharon Parq Associates, Inc.

About Tips.Net

Contact Us


Advertise with Us

Our Privacy Policy

Our Sites


Beauty and Style




DriveTips (Google Drive)

ExcelTips (Excel 97–2003)

ExcelTips (Excel 2007–2016)



Home Improvement

Money and Finances


Pests and Bugs

Pets and Animals

WindowsTips (Microsoft Windows)

WordTips (Word 97–2003)

WordTips (Word 2007–2016)

Our Products

Helpful E-books

Newsletter Archives


Excel Products

Word Products

Our Authors

Author Index

Write for Tips.Net

Copyright © 2017 Sharon Parq Associates, Inc.