Если вы используете макросы для печати документов, вы уже знаете, что макрос может указывать фактический принтер, на который следует отправлять выходные данные. Что, если вы хотите также указать конкретный лоток для бумаги, который будет использоваться на этом принтере? К сожалению, в Word это становится чем-то вроде липкой калитки. Краткий обзор и объяснение помогут прояснить, почему это так.

Какой лоток для бумаги используется Word, зависит от ряда факторов, некоторые из которых не зависят от самого Word. Например, рассмотрите следующее, некоторые из которых зависят от версии Word, которую вы используете.

  • Если вы откроете диалоговое окно «Параметры Word» и нажмете «Дополнительно», в группе «Печать» вы можете указать лоток по умолчанию.

  • Если вы отобразите вкладку «Макет страницы» на ленте, а затем щелкните значок в правом нижнем углу группы «Параметры страницы», вы увидите диалоговое окно «Параметры страницы». На вкладке «Источник бумаги» вы можете указать, какой лоток для бумаги использовать для первой страницы, а какой — для последующих страниц.

Если вы нажмете Ctrl + P * для печати, а затем нажмете «Свойства», вы можете часто (в зависимости от вашего принтера) порыться и выбрать лоток для бумаги.

Таким образом, в Word есть два места, где вы можете указать лотки для бумаги, и ваш принтер может иметь собственное место для установки лотка для бумаги. Эта последняя область настроек (с помощью кнопки «Свойства») находится за пределами «досягаемости» VBA — диалоговое окно отображает настройки в драйвере принтера, а не в самом Word.

Что еще хуже, нет четкого объяснения того, какие настройки имеют приоритет в том или ином задании на печать. Переопределяют ли настройки в диалоговом окне «Параметры страницы» настройки драйвера принтера? Параметр драйвера принтера имеет приоритет над параметром диалогового окна Параметры Word? Как настройки диалогового окна «Параметры Word» связаны с настройками страницы? Вы уловили идею; множество настроек в сочетании с капризами различных настроек драйвера принтера и возможностей принтера могут привести к путанице; то, что может работать в одном сочетании условий, может не работать в другом.

При этом есть несколько подходов, которые вы можете попробовать, чтобы управлять выбором лотка для бумаги с помощью макроса. Важно помнить, что ваш макрос может указывать параметры в диалоговом окне «Параметры Word», а также в диалоговом окне «Параметры страницы». Однако ваш макрос не может указывать параметры, доступные через кнопку «Свойства» в диалоговом окне «Печать». (Подробнее об этом чуть позже.)

Если вы хотите настроить параметры области настройки страницы, вы можете сделать это с помощью макроса, подобного следующему:

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

Этот макрос, несмотря на свою длину, устанавливает только два параметра: параметр «Первая страница» и параметр «Другие страницы» на вкладке «Источник бумаги» диалогового окна «Параметры страницы». Макрос также не является полным, а представляет собой лишь пример того, как фактические «настройки» могут быть выполнены в вашем собственном макросе. Этот конкретный код считывает две настройки из файла INI (имя файла указывается в строке strIniFile), а затем выполняет настройки на основе полученных значений. Очевидно, вам нужно будет указать имя INI-файла, который вы хотите использовать, а также убедиться, что он настроен так, чтобы содержать правильную информацию в правильном формате. (Настройка файлов INI выходит за рамки этого совета, но много информации доступно по этой теме в другом месте.) После того, как настройки считываются из файла INI, они переводятся в настройки, которые Word может понять, а затем в финале с помощью …​ Конец В структуре диалогового окна вносятся изменения.

По причинам, упомянутым ранее, подход, проиллюстрированный в этом макросе, может работать не во всех ситуациях. В противном случае вы не сможете управлять лотками для бумаги, используемыми вашим принтером, по крайней мере, с помощью макроса. Помните, что лотки для бумаги, установленные с помощью кнопки «Свойства», фактически находятся под управлением драйвера вашего принтера, и настройки драйвера принтера не «видны» для VBA. Возможное решение в этой ситуации — просто установить другие драйверы принтера. Выполните следующие общие шаги:

  1. Определите, сколько лотков для бумаги вы хотите использовать в принтере.

  2. Определите новый принтер в Windows для каждого лотка для бумаги, который вы хотите использовать.

Например, если вы хотите использовать три разных лотка для бумаги, вы должны определить три принтера, каждый с именем, представляющим лоток для бумаги.

  1. Щелкните правой кнопкой мыши определение принтера и измените свойства принтера, чтобы он печатал на желаемом лотке для бумаги.

  2. Повторите шаг 3 для каждого из других определений принтера, убедившись, что вы указали разные лотки для бумаги для каждого из них.

На этом этапе у вас настроено несколько определений принтера, и каждое будет печатать на разных лотках для бумаги на одном и том же принтере. Теперь вы можете указать желаемый принтер в макросе, чтобы распечатка попадала в нужный лоток для бумаги. Единственным недостатком этого решения, конечно же, является то, что оно требует довольно небольшой работы по настройке. Если вы работаете в офисе с 50 пользователями, это означает, что вам нужно убедиться, что все 50 имеют каждый принтер, определенный, как описано выше.

Помните, что лоток для бумаги, который будет использоваться Word, может быть указан пользователем путем выбора одного или нескольких параметров в различных диалоговых окнах, как подробно описано в первом из советов. Из-за этого некоторые люди успешно использовали оператор SendKeys для имитации нажатия клавиш, которые пользователь использовал бы для указания лотка для бумаги. (Вы можете найти информацию о SendKeys в онлайн-справке VBA, доступной в Word.)

На самом деле SendKeys заполняет буфер клавиатуры серией нажатий клавиш, как если бы они были набраны пользователем. Однако есть потенциальная проблема с SendKeys. Это может быть ненадежным, потому что нет никакого способа гарантировать, что нажатия клавиш действительно идут туда, куда вы хотите. В многопоточной операционной системе (например, Windows) какой-то другой процесс может вмешаться и сорвать выполнение команд.

Суть в том, что, к сожалению, не существует универсального решения

решение выбора лотка для бумаги с помощью макроса. Решение, которое работает для одного человека, может не работать для другого. По этой причине вам нужно будет поэкспериментировать, чтобы увидеть, какое решение подойдет вам лучше всего, но не ожидайте, что оно сработает для всех остальных.

_Примечание: _

Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (9320) применим к Microsoft Word 2007, 2010, 2013 и 2016. Вы можете найти версию этого совета для старого интерфейса меню Word здесь:

link: / word-Specifying_a_Paper_Tray_in_a_Macro [Указание лотка для бумаги в макросе].