Please Note: This article is written for users of the following Microsoft Excel versions: 2007, 2010, 2013, 2016, 2019, Excel in Microsoft 365, and 2021. If you are using an earlier version (Excel 2003 or earlier), this tip may not work for you. For a version of this tip written specifically for earlier versions of Excel, click here: Specifying a Paper Tray in a Macro.
Written by Allen Wyatt (last updated June 15, 2024)
This tip applies to Excel 2007, 2010, 2013, 2016, 2019, Excel in Microsoft 365, and 2021
If you use macros to print your worksheets, 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. The problem is that when you click on the Options button in the Page Setup dialog box in order to set which paper tray to use, what you see is completely under the control of your printer driver, not under the control of Excel.
What does this mean to you? It means there are no commands you can use in an Excel macro to specify a printer tray. There are some workarounds that you can try, however. The first workaround is to simply define different printer definitions in Windows, each one tailored to use a specific printer tray. 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. Within Excel you can specify the desired printer, in a macro, so that the printout goes to the desired printer definition, and hence 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.
Another workaround involves the use of the SendKeys statement in your macro. You can find information on SendKeys in the VBA online help available with Excel, but what it basically does is to stuff the keyboard buffer with a series of keypresses, just as they would be typed by the user. Thus, you could theoretically set up the macro to emulate the keypresses you would follow to open the Page Setup dialog box, click on Options, and select a different printer tray.
There is a potential problem with SendKeys, however, and it is a big one. It can be unreliable because there is no way to ensure 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. In addition, if SendKeys works on your computer, it may not work on someone else's computer unless they have the same version of Excel, same printer, and same printer driver version.
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (7010) applies to Microsoft Excel 2007, 2010, 2013, 2016, 2019, Excel in Microsoft 365, and 2021. You can find a version of this tip for the older menu interface of Excel here: Specifying a Paper Tray in a Macro.
Professional Development Guidance! Four world-class developers offer start-to-finish guidance for building powerful, robust, and secure applications with Excel. The authors show how to consistently make the right design decisions and make the most of Excel's powerful features. Check out Professional Excel Development today!
Need to print more than a single copy of a worksheet? You can do it easily by using the printing controls provided by Excel.
Discover MoreIf you need to change the size of paper on which your worksheets will be printed, it can be bothersome to make the change ...
Discover MoreShould you print in portrait or in landscape? The decision can greatly affect the way your printout looks. Wouldn't it be ...
Discover MoreFREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
2024-06-16 16:02:09
J. Woolley
The Tip discusses SendKeys. Here are three such methods you can apply in a macro:
1. VBA.SendKeys Keys, [Wait]
2. Application.SendKeys Keys, [Wait]
3. CreateObject("WScript.Shell").SendKeys Keys
Keys must be a text string representing the keys to send; for example,
"Hello World!{ENTER}{DOWN}"
Wait is optional; if True, keystrokes are supposedly processed before control is returned to the procedure. Default is False to return control immediately. I find the use of Wait to be problematical.
If your macro uses SendKeys to send keystrokes to Excel, the macro should end shortly after; there must be no user interaction such as MsgBox or InputBox after using SendKeys. If you need to perform additional processing after using SendKeys, you can apply Application.OnTime to initiate another macro.
You might experience NumLock problems after using SendKeys; in this case, method #3 might be more reliable.
Got a version of Excel that uses the ribbon interface (Excel 2007 or later)? This site is for you! If you use an earlier version of Excel, visit our ExcelTips site focusing on the menu interface.
FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2024 Sharon Parq Associates, Inc.
Comments