マクロを使用してドキュメントを印刷する場合、マクロが出力の送信先となる実際のプリンターを指定できることは既にご存知でしょう。そのプリンタで使用する特定の用紙トレイも指定したい場合はどうなりますか?残念ながら、これはWordでは少し厄介な改札になります。簡単なツアーと説明は、これが当てはまる理由を明らかにするのに役立ちます。

Wordで使用される用紙トレイは、いくつかの要因によって異なりますが、Word自体の制御下にないものもあります。たとえば、次のことを考慮してください。そのうちのいくつかは、使用しているWordのバージョンによって異なります。

  • [ツール]を選択した場合|オプション|印刷、デフォルトトレイを指定できます。

  • ファイル|を選択した場合ページ設定|給紙方法では、最初のページに使用する用紙トレイと後続のページに使用する用紙トレイを指定できます。

[印刷]ダイアログボックス(Ctrl + P *)内から[プロパティ]をクリックすると、(プリンタによっては)多くの場合、あちこちを探し回って用紙トレイを選択できます。

したがって、Wordには用紙トレイを指定できる場所が2つあり、プリンタには使用する用紙トレイを設定するための独自の場所がある場合があります。この最終設定領域([プロパティ]ボタンを使用)は、VBAの「到達範囲」を超えています。ダイアログボックスには、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

このマクロは、その長さにもかかわらず、[ページ設定]ダイアログボックスの[給紙方法]タブの[最初のページ]設定と[その他のページ]設定の2つの設定のみを設定します。マクロも完全ではありませんが、実際の「設定」を独自のマクロで実行する方法の例にすぎません。この特定のコードは、INIファイルから2つの設定を読み取り(ファイル名はstrIniFile文字列で指定されます)、取得した値に基づいて設定を行います。もちろん、使用するINIファイルの名前を指定する必要があります。また、適切な情報が適切な形式で含まれるように設定されていることを確認する必要があります。 (INIファイルの設定はこのヒントの範囲を超えていますが、他のトピックに関する多くの情報が利用可能です。)設定がINIファイルから読み取られると、Wordが理解できる設定に変換され、最後にWith …​終了構造を使用して、ダイアログボックスの変更が行われます。

前述の理由により、このマクロで例示されているアプローチは、すべての状況で機能するとは限りません。そうでない場合は、少なくともマクロから、プリンタで使用される用紙トレイを制御できない可能性があります。 [プロパティ]ボタンで設定された用紙トレイは実際にはプリンタードライバーの制御下にあり、プリンタードライバーの設定はVBAに「表示」されないことに注意してください。この状況での潜在的な解決策は、単に異なるプリンタードライバーをセットアップすることです。次の一般的な手順に従ってください:

。プリンタで使用する用紙トレイの数を決定します。

。使用する用紙トレイごとに、Windowsで新しいプリンタを定義します。

たとえば、3つの異なる用紙トレイを使用する場合は、それぞれが用紙トレイを表す名前を持つ3つのプリンタを定義します。

。プリンタ定義を右クリックし、プリンタのプロパティを変更して、目的の用紙トレイに印刷されるようにします。

。他のプリンタ定義ごとに手順3を繰り返し、それぞれに異なる用紙トレイを指定していることを確認します。

この時点で、複数のプリンター定義が設定されており、それぞれが同じプリンターの異なる用紙トレイに印刷されます。これで、マクロで目的のプリンタを指定して、印刷出力が目的の用紙トレイに送られるようにすることができます。もちろん、このソリューションの唯一の欠点は、かなりのセットアップ作業が必要になることです。 50人のユーザーがいるオフィスで作業している場合、これは、50人すべてが上記のように各プリンターを定義していることを確認する必要があることを意味します。

このヒントの冒頭で詳しく説明したように、Wordで使用する用紙トレイは、さまざまなダイアログボックスで1つ以上の設定を選択することでユーザーが指定できることに注意してください。このため、SendKeysステートメントを使用して、ユーザーが用紙トレイを指定するために使用するキー押下をエミュレートすることに成功した人もいます。 (SendKeysに関する情報は、Wordで利用できるVBAオンラインヘルプにあります。)

SendKeysが実際に行うことは、ユーザーが入力するのと同じように、キーボードバッファーに一連のキーを押すことです。ただし、SendKeysには潜在的な問題があります。キーストロークが実際に目的の場所に移動することを保証する方法がないため、信頼性が低くなる可能性があります。マルチスレッドオペレーティングシステム(Windowsなど)では、他のプロセスが介入してコマンドを失敗させる可能性があります。

残念ながら、「1つのサイズですべてに対応」することはできません

マクロを使用して用紙トレイを選択するためのソリューション。ある人に有効なソリューションは、別の人には有効でない場合があります。このため、どのソリューションが最適かを確認するために実験する必要がありますが、他のすべての人に有効であるとは期待しないでください。

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ wordribbon-WordTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(1697)は、Microsoft Word 97、2000、2002、および2003に適用されます。Wordのリボンインターフェイス(Word 2007)用のこのヒントのバージョンを見つけることができます。以降)ここ:

link:/ wordribbon-Specifying_a_Paper_Tray_in_a_Macro [マクロでの用紙トレイの指定]