Microsoft Access 2002 でのプリンタ設定のプログラミング

Mark Roberts
Microsoft Corporation

日本語版最終更新日 2001 年 6 月 8 日

概要 : この記事では、新しい Printers コレクションと Printer オブジェクトを使って、Access Version 2002 でプログラムからプリンタ設定を変更する方法を説明しています。

目次

はじめに
Printers コレクション
Printer オブジェクト
プリンタ機能の取得
Printer プロパティの補足事項

はじめに

以前のバージョンの Access で、プログラムからフォームとレポートのプリンタ設定を取得し、それを使って作業する唯一の方法は、PrtDevMode プロパティ、PrtDevNames プロパティ、および PrtMip プロパティを使用することでした。さらに、これらのプロパティはフォームまたはレポートがデザイン ビューで開かれているときのみ利用できました。PrtDevMode プロパティと PrtDevNames プロパティは、プリンタ設定に関する情報を提供するために Microsoft Windows® が内部的に使用する DEVMODE データ構造体と DEVNAMES データ構造体のコピーを使って機能します。PrtMip プロパティは、プリンタ設定がデータベース オブジェクトと共に保存されるとき、Access がフォームやレポートと共に格納するデータ構造体を使って機能します。これらのプロパティは高度な詳細や制御を提供しますが、作業のために標準の Visual Basic® オブジェクト モデルを提供するのではなく、各プロパティはコードで注意深く解析する必要のあるバイトの単一配列としてすべてのメンバを返すので、使用するのは困難です。これらのプロパティも依然としてサポートされていますが、プリンタ設定を使って作業する場合に、より最適なオブジェクト モデルを用意して欲しいという開発者の要請に応えて、Access Version 2002 ではプリンタ情報の取得および設定のためにプロパティの豊富なセットを持つ新しい Printers コレクションと Printer オブジェクトを提供します。これらのプロパティを使った作業は、PrtDevModePrtDevNames、および PrtMip プロパティを使用するよりもはるかに簡単になっています。

さらに、PrtDevModePrtDevNames、および PrtMip プロパティは、フォームまたはレポートがデザイン ビューで開かれているときにしか利用できないので、.mde または .ade ファイルとして保存された Access アプリケーションまたは Access ランタイム アプリケーションからはこれらのプロパティは使用できません。これらのファイルの種類は、デザイン ビューで開かれているフォームやレポートをサポートしません。しかし、新しい Printers コレクションと Application.Printer オブジェクトは、Access またはデータベース アプリケーションがすべてのデータベース オブジェクトの通常使うプリンタの設定を使って作業するように開かれているときは常に利用できます。また、フォームやレポートの Printer オブジェクトはすべてのビューで使用できます。

Printers コレクション

Application オブジェクトの Printers コレクションには、現在システムにインストールされている各プリンタを表す Printer オブジェクトが含まれています。

次の表は、Printers コレクションに対して使用できるプロパティをまとめたものです。

プロパティ名 説明
Application 実行中の Access のインスタンスの Application オブジェクトに対するアクセサ プロパティ。
Count 現在システムにインストールされているプリンタ数を返します。
Item コレクション内の特定の Printer オブジェクトを返します。オブジェクトは 0 から始まり、Count -1 の値までの位置で指定します。または、Printer オブジェクトの DeviceName プロパティが返すプリンタのデバイス名を示す文字列で指定します。
Parent Printers コレクションの親、すなわち Application オブジェクトを返します。

Application オブジェクトの Printers プロパティを使用して、 Printers コレクションを返します。その後 For Each...Next ステートメントを使用して、Printers コレクション内の各 Printer オブジェクトを列挙できます。ダウンロードした PrinterDemo.mdb サンプル ファイルの frmPrinter の Open イベントから抜粋した以下のコードは、For Each...Next ステートメントと新しい AddItem メソッドを使用して、インストールされているプリンタのリストを cboPrinter コンボ ボックスに設定しています。

Dim prt As Printer
...
For Each prt In Application.Printers
    Me!cboPrinter.AddItem Item:=prt.DeviceName
Next prt

以下の構文形式のいずれかを使用して、Printers コレクション内の特定の Printer オブジェクトへの参照を返すことができます。

構文 説明
Printers!devicename または Printers("devicename") devicename 引数は、DeviceName プロパティが返すプリンタ名を表す String 値です。これは、Access の [印刷] ダイアログ ボックスに表示されるのと同じ名前です。

重要    devicename 引数は大文字と小文字を区別します。参照が正しく機能するように、DeviceName プロパティを使用してプリンタ名の正確な綴りを確認します。

Printers(index) index 引数は、コレクション内でのオブジェクトの位置を表す数値です。有効な値の範囲は 0 から Printers.Count-1 までです。

注意    Printers コレクション内での Printer オブジェクトの順序は、システムにプリンタを追加または削除したときに変化する可能性があります。このため、コードで特定のプリンタを参照する必要がある場合は、その参照に index 値を使用するのではなく、上記で説明した devicename 構文を使用する必要があります。


コードを使って、Printers コレクションに Printer オブジェクトを追加または削除できません。Printer オブジェクトは、ユーザーまたはユーザーのシステムがプリンタをインストールするたびに Printers コレクションに追加されます。同様に、ユーザーがシステムからプリンタを削除したときに、Printer オブジェクトが Printers コレクションから削除されます。

以下の表は、現在のシステムで利用できるプリンタに関する情報を返すために使用できる Printer オブジェクトのプロパティをまとめたものです。これらのプロパティはすべて読み取り専用です。

プロパティ名 説明
DeviceName 指定したプリンタ デバイスの Access の [印刷] ダイアログ ボックスに表示されるものと同じ名前を表す String 値を返します。
DriverName 指定したプリンタが使用するドライバ名を表す String 値を返します。この文字列は、Access の [印刷] ダイアログ ボックスの [種類] フィールドと同じです。

注意    Printers コレクションの Printer オブジェクトまたは Application.Printer オブジェクトから DriverName プロパティを読み取ると、常に "winspool" を返します。これは、Windows Spooler Driver (winspool.drv) の名前です。ただし、Form オブジェクトまたは Report オブジェクトの Printer オブジェクトから DriverName プロパティを読み取ると、実際のプロパティ名が返ります。

Port 指定したプリンタのポート名を表す String 値を返します。

Printer オブジェクトの残りのプロパティの一覧については、この記事の最後にある「Printer プロパティの補足事項」を参照してください。

Printer オブジェクト

Printers コレクションの Printer オブジェクトを使って作業する以外に、 Printer オブジェクトを Application オブジェクトから、および Form オブジェクトと Report オブジェクトから直接使用できます。Application オブジェクトからの Printer オブジェクトを使って作業することにより、アプリケーション全体が通常使うプリンタの設定を取得でき、現在のセッションが通常使うプリンタの設定を一時的にオーバーライドできます。Form オブジェクトおよび Report オブジェクトからの Printer オブジェクトを使って作業することにより、フォームやレポートが通常使うプリンタの設定を一時的または永久的にオーバーライドできます。

Application Printer オブジェクト

Application オブジェクトの Printer オブジェクトを使って、Access アプリケーションが通常使うプリンタの設定を取得または設定できます。これらのプリンタの設定は、テーブルやクエリのデータシート、デザイン ビューのマクロやモジュール、Access プロジェクト .adp ファイルのデータベース ダイアグラムなど、アプリケーションで印刷可能なすべてのオブジェクトに影響します。さらに、特に指定しない限り、すべてのフォームとレポートも通常使うプリンタの設定を使用します。フォームまたはレポートが通常使うプリンタの設定を使用しているかどうかを判断する方法、およびこれらの設定をオーバーライドする方法の詳細については、この記事の後半の「Form と Report Printer オブジェクト」を参照してください。

システム情報および通常使うプリンタの設定を読み取る構文は以下のとおりです。

Application.Printer.PrinterProperty

この構文で、PrinterPropertyPrinter オブジェクトの任意の有効なプロパティです。

たとえば、以下のコードは DeviceName プロパティを使用して、現在の通常使うプリンタの名前を返します。

Application.Printer.DeviceName

注意    システムにプリンタがインストールされていない場合に、コードが Application.Printer オブジェクトを参照すると、Access は以下のエラー メッセージを返します。

実行時エラー '2205':

通常使うプリンタ用のプリンタ ドライバが正しくセットアップされていません。

既定では、Application.Printer オブジェクトの LeftMarginRightMarginTopMarginBottomMarginDataOnlyItemsAcrossRowSpacingColumnSpacingDefaultSizeItemSizeWidthItemSizeHeight、および ItemLayout プロパティは通常 0 を返します。これは、これらの値が Windows DEVMODE および DEVNAMES データ構造体の一部としてプリンタ ドライバから利用できないためです。ただし、これらの値はフォームとレポートと共にのみ保存される Access 固有の MIPS データ構造体の一部です。Application.Printer オブジェクトのこれらの値は設定可能で、これらの値が適用される任意のデータベース オブジェクトの印刷に影響します。さらに、プリンタ設定がフォームまたはレポートと共に保存された場合は、対応するフォームまたはレポートの Form オブジェクトまたは Report オブジェクトの Printer オブジェクトからこれらの値を読み取ることができます。

Application Printer オブジェクトの設定のオーバーライド

Access のセッションを最初に起動したときは、Windows の通常使うプリンタを使用します。Application. Printer オブジェクトに変更を加えない限り、Access は引き続き Windows の通常使うプリンタを使用し、プリンタ設定が保存されているフォームとレポートを除いて、すべての印刷可能なデータベース オブジェクトに対してこの設定が使われます。以下の構文を使用して、現在のセッション中に Application.Printer オブジェクトの読み取り/書き込みのプロパティ設定を一時的にオーバーライドできます。

Application.Printer.PrinterProperty = PropertyValue

この構文で、PrinterProperty は現在のプリンタに適用可能な Printer オブジェクトの任意の読み取り/書き込みプロパティです。PropertyValue は、現在のプリンタの任意の有効な設定です。設定可能なプロパティは、DeviceNameDriverName、または Port プロパティ以外のすべてのプロパティです。これらの Printer プロパティの要約は、この記事の後半の「 Printer プロパティの補足事項」を参照してください。

Application.Printer オブジェクトを Windows の通常使うプリンタ以外のプリンタに切り替える場合、またはいくつかのプロパティ設定を一度に変更する場合、以下の構文を使用して、Application.Printer オブジェクトを設定することにより、これを行うことができます。

Set Application.Printer = PrinterObject

PrinterObject は、オーバーライドするプロパティが設定されている Printer オブジェクト変数、または切り替えるプリンタの Printer オブジェクトを返す式です。たとえば、ダウンロードした PrinterDemo.mdb サンプル内の frmPrinter 上の cmdChangeDefaultPrt ボタンの Click イベントからの以下のコードは、通常使うプリンタをユーザーが cboPrinter コンボ ボックスから選択したプリンタに切り替えます。

Dim prt As Printer

' 選択したプリンタの Printer オブジェクトを取得します。
Set prt = Application.Printers(Me!cboPrinter.Value)

' 選択したプリンタをこのセッションで通常使うプリンタとして設定します。
Set Application.Printer = prt

このコードを実行後、通常使うプリンタを使用していた任意のデータベース オブジェクトの印刷要求は、選択したプリンタに印刷されます。

Application Printer 設定の保存と復元

Application.Printer オブジェクトの設定をオーバーライドし、この設定を再度変更しない場合、Application オブジェクトが有効な間はこれらの設定がそのまま使用されます。つまり、これらの設定はコードが Application オブジェクトの Quit メソッドを呼び出すまで、またはユーザーが Access の現在のセッションを終了するまで有効です。現在のセッション内で Windows の通常使うプリンタの設定と一致するように Application.Printer オブジェクトのすべての設定を復元する場合は、Application.PrinterNothing を設定します。

Application.Printer = Nothing

または、以下のコードで示すように、設定を変更する前に Application.Printer オブジェクトの設定をパブリックの Printer オブジェクト変数に保存しておくことによりその設定に復元できます。

Public prtOriginalPrinter as Printer
    Sub cmdUsePrinter_Click()
    ' 元のプリンタをグローバル変数に保存します。
    prtOriginalPrinter = Application.Printer
    ' プリンタを切り替えます。
    Set Application.Printer = _
        Application.Printers(cboPrinters.Value)
End Sub

コードの適切な位置で、以下のコードを使用してアプリケーションのプリンタの設定を元の値にリセットできます。

Application.Printer = prtOriginalPrinter

重要    Application.Printer オブジェクトまたはその他の Access コードを使用して、 Access で通常使うプリンタを永久的に変更することはできません。ユーザーが Access のセッションを起動するとき、またはコードで Access Application オブジェクトを作成するとき、常に Windows の通常使うプリンタがそのセッションの通常使うプリンタになります。ただし、通常使うプリンタとプリンタの設定をオーバーライドでき、以下の「Form と Report Printer オブジェクト」セクションで説明するように、特定のフォームやレポートにこれらの設定を保存できます。

Form と Report Printer オブジェクト

Form オブジェクトと Report オブジェクトに関連付けられた Printer オブジェクトは、Application.Printer オブジェクトと同じプロパティとプログラミング技法をサポートします。特定のフォームまたはレポートのプリンタ設定を取得または設定するときに、Form または Report オブジェクトの Printer オブジェクトを使用します。フォームとレポートのプリンタ設定を一時的に変更できます。また、これらの設定をフォームやレポートと共に保存できます。

以下のコードは、[印刷プレビュー] で [Customer Labels] レポートを開き、そのレポートのプリンタを Label Printer という名前のプリンタに設定します。

Dim rpt As Report
DoCmd.OpenReport ReportName:="Customer Labels", View:=acViewPreview
Set rpt = Reports("Customer Labels")
rpt.Printer = Application.Printers("Label Printer")

重要    Access Version 2002 では、レポートの Activate イベントで実行しているイベント プロシージャ コードからレポートが開かれているとき、レポートのプリンタ設定を変更できますが、これは行わないでください。レポートを開いているときに起動されたイベントからプリンタの設定が変更された場合、Access はレポートのレイアウトをやり直す機能を現在持っていません。このため Open イベントなど、その他すべてのレポート イベントからレポートのプリンタ設定の変更を試みると実行時エラーが返ります。レポートのプリンタ設定を変更するためには、プリンタの設定を変更し、レポートを印刷する前に、[印刷プレビュー] やデザイン ビューでレポートを開いているのとは別のフォームやモジュールで実行されるコードを使用する必要があります。

また、印刷が開始された後に、フォームやレポートのプリンタのプロパティを変更することもできません。これを試みると以下の実行時エラーが表示されます。

実行時エラー '2191':

印刷が開始した後は、Printer プロパティを設定することはできません。

フォームやレポートと共にプリンタの設定を保存する

フォームやレポートがアプリケーションが通常使うプリンタの設定 (Application.Printer オブジェクトが管理する設定) を使用するかどうかは、そのフォームやレポートが以前にプリンタの設定を保存していたかどうかによって決まります。フォームやレポートのプリンタ設定は次の 2 つの方法で保存できます。

  • ユーザーは、任意のビューでそのフォームまたはレポートを開き、その後 [ファイル] メニューの [ページ設定] コマンドをクリックすることにより、プリンタの設定を保存できます。

  • コードでフォームやレポートの Printer オブジェクトに変更を加えることができます。フォームやレポートを閉じる前に DocCmd.Save メソッドを使用した場合、またはフォームやレポートを閉じるために DoCmd.Close メソッドを使用しているときに、 Save 引数に acSaveYes を指定した場合、これらの変更がフォームやレポートと共に保存されます。

frmPrinters フォームの cmdSaveSettings ボタンの Click イベントからの以下のコードは、現在プレビューされているレポートの設定を保存します。

If CurrentProject.AllReports(Me!lstSelectReport).IsLoaded Then
    ' プレビューされているレポートの設定を読み込みます。
    With Reports(Me!lstSelectReport).Printer
        .PaperSize = modPrinters.GetPaperSize(Me)
        .PaperBin = modPrinters.GetPaperBin(Me)
        .Orientation = Me!fraOrientation
    End With
    ' 設定をレポート共に保存します。
    DoCmd.Save ObjectType:=acReport, ObjectName:=Me!lstSelectReport
Else
    MsgBox "まず、レポートをプレビューしてください。"
End If

注意    プリンタの設定がフォームやレポート共に保存されるとき、Access はそのフォームやレポート用に保存する設定を保持する新しいデータ構造体を作成します。この新しいデータ構造体は、初期値として通常使うプリンタのすべての設定のコピーを持ちます。ユーザーまたはコードがオーバーライドする任意の設定がこのデータ構造体に保存されます。Access は、通常使うプリンタの設定とフォームやレポートと共に保存された設定間でどのような種類の継承も管理しません。フォームやレポートの設定を保存した後に、通常使うプリンタの設定を変更しても、フォームやレポートに保存されている設定が有効になったままです。

フォームやレポートがプリンタの設定を保存したかどうかを調べる

フォームやレポートがプリンタの設定を保存したかどうかを調べるために、次の構文を使用して、Form または Report オブジェクトの UseDefaultPrinter プロパティを読み取ることができます。

expression.UseDefaultPrinter

expression は、Form または Report オブジェクトを返す式です。UseDefaultPrinter プロパティはデザイン ビューで読み取り/書き込みを行えますが、その他のビューではすべて読み取り専用です。

UseDefaultPrinter プロパティはブール値を返します。プリンタの設定が変更されておらず、フォームやレポートと共に保存されていない場合は True を返します。プリンタの設定がフォームやレポートと共に保存されている場合は False を返します。

保存されているプリンタ設定の消去

UseDefaultPrinter プロパティの値を True に設定することにより、フォームやレポートから保存されている設定を消去するメソッドのように UseDefaultPrinter プロパティを使用できます。これは、[ページ設定] ダイアログ ボックスを開き、[ページ] タブで [通常使うプリンタ] を選択することと等価です。

フォームやレポートがデザイン ビューで開かれているときのみ、UseDefaultPrinter プロパティを設定できます。ダウンロードした PrinterDemo.mdb サンプルの ClearFormReportSettings プロシージャからの以下のコードは、現在のプロジェクトの各レポートを開き、設定が保存されているすべてのレポートの設定を消去します。

For Each obj In CurrentProject.AllReports
    DoCmd.OpenReport ReportName:=obj.Name, View:=acViewDesign
    If Not Reports(obj.Name).UseDefaultPrinter Then
        Reports(obj.Name).UseDefaultPrinter = True
        DoCmd.Save ObjectType:=acReport, ObjectName:=obj.Name
    End If
    DoCmd.Close
Next obj

注意    デザイン ビュー以外のビューでフォームやレポートの UseDefaultPrinter プロパティの設定を試みると、Access は "馴染みのある" Access エラーではなく、以下のオートメーション エラーを返します。

実行時エラー '-2147467259 (80004005)':

オブジェクト '<フォームまたはレポート名>' のメソッド 'UseDefaultPrinter' が失敗しました

Form と Report Printer の設定の保存

オブジェクトがデザイン ビュー以外の任意のビューにあるときに、プログラムからフォームやレポートのプリンタ プロパティの設定を変更すると、ユーザーが対話的にフォームやレポートを閉じる場合に、これらの変更は自動的に保存されます。ダウンロードした PrinterDemo.mdb サンプルの modPrinters モジュールからの以下のコード サンプルは、レポートのプリンタ設定を保存し、復元する方法を示しています。

Sub RestoreReportPrinter()
    Dim rpt As Report
    Dim prtOld As Printer
    Dim prtNew As Printer

    ' [印刷プレビュー] で Invoice レポートを開きます。
    DoCmd.OpenReport ReportName:="Invoice", View:=acViewPreview

    ' rpt 変数を初期化します。
    Set rpt = Reports!Invoice

    ' レポートの現在のプリンタ設定を prtOld 変数に
    ' 保存します。
    Set prtOld = rpt.Printer

    ' レポートの現在のプリンタ設定を prtNew 変数に
    ' 読み込みます。
    Set prtNew = rpt.Printer

    ' レポートの Orientation プロパティを変更します。
    prtNew.Orientation = acPRORLandscape

    ' その他の Printer プロパティを変更し、印刷または
    ' その他の操作をここで実行します。

    ' 以下のコード行をコメントにし、ユーザーが対話的に
    ' レポート プレビューを閉じると、レポートの Printer 
    ' オブジェクトに対して行われたすべての変更は、
    ' レポートが閉じられるときに保存されます。
    Set rpt.Printer = prtOld

    ' 保存しないで、レポートを閉じます。
    DoCmd.Close ObjectType:=acReport, ObjectName:="Invoice", Save:=acSaveNo

End Sub

プリンタ機能の取得

Printers コレクションと Printer オブジェクトは、プリンタの設定を取得または設定できるだけです。サポートしている用紙の種類や給紙トレイなどの、プリンタの機能を調べるには、Windows API DeviceCapabilities 関数を呼び出す必要があります。これについてここで詳しく説明することはこの記事の対象範囲外です。しかし、ダウンロードした PrinterDemo.mdb サンプルの modPrinters モジュールの以下のコード サンプルに、プリンタがサポートしている給紙トレイの ID を取得する方法を示しています。

' DeviceCapabilities 関数 API 呼び出しの宣言。
Private Declare Function DeviceCapabilities Lib "winspool.drv" _
    Alias "DeviceCapabilitiesA" (ByVal lpsDeviceName As String, _
    ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, _
    ByVal lpDevMode As Long) As Long

' DeviceCapabilities 関数の定数。
Private Const DC_BINNAMES = 12
Private Const DC_BINS = 6
Private Const DEFAULT_VALUES = 0

Sub GetBinList(strName As String)
    Dim lngBinCount As Long
    Dim lngCounter As Long
    Dim hPrinter As Long
    Dim strDeviceName As String
    Dim strDevicePort As String
    Dim strBinNamesList As String
    Dim strBinName As String
    Dim intLength As Integer
    Dim strMsg As String
    Dim aintNumBin() As Integer

    ' 通常使うプリンタの名前とポートを取得します。
    strDeviceName = Application.Printers(strName).DeviceName
    strDevicePort = Application.Printers(strName).Port

    ' プリンタがサポートする給紙トレイの数を取得します。
    lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_BINNAMES, _
        lpOutput:=ByVal vbNullString, _
        lpDevMode:=DEFAULT_VALUES)
    ' 給紙トレイの数で配列を再確保します。
    ReDim aintNumBin(1 To lngBinCount)

    ' 各トレイ名を 24 バイトで受け取る変数をトレイ数分確保します。
    strBinNamesList = String(Number:=24 * lngBinCount, Character:=0)

    ' プリンタがサポートする給紙トレイ名の文字列バッファ取得します。
    lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_BINNAMES, _
        lpOutput:=strBinNamesList, _
        lpDevMode:=DEFAULT_VALUES)

    ' プリンタがサポートする給紙トレイ番号の配列を取得します。
    lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_BINS, _
        lpOutput:=aintNumBin(1), _
        lpDevMode:=DEFAULT_VALUES)

    ' 使用できる給紙トレイ名を一覧します。
    strMsg = "Paper bins available for " & strDeviceName & vbCrLf
    For lngCounter = 1 To lngBinCount

        ' 文字列バッファから給紙トレイ名を解析します。
        strBinName = Mid(String:=strBinNamesList, _
            Start:=24 * (lngCounter - 1) + 1, _
            Length:=24)
        intLength = VBA.InStr(Start:=1, _
            String1:=strBinName, String2:=Chr(0)) - 1
        strBinName = Left(String:=strBinName, _
            Length:=intLength)

        ' トレイ名と番号をメッセージ ボックスのテキスト文字列に追加します。
       strMsg = strMsg & vbCrLf & aintNumBin(lngCounter) _
            & vbTab & strBinName

    Next lngCounter

    ' 給紙トレイ番号と名前をメッセージボックスに表示します。
    MsgBox Prompt:=strMsg

End Sub

通常使うプリンタがサポートする用紙の一覧を取得するために、DeviceCapabilities API 関数を使用するコード サンプルを参照するには、ダウンロードした PrinterDemo.mdb サンプルの modPrinters モジュールの GetPaperList プロシージャをご覧ください。

Printer プロパティの補足事項

この補足事項の表は、この記事の前半の「Printers コレクション」セクションで説明した DeviceNameDriverName、および Port プロパティを除く、 Printer オブジェクトのすべてのプロパティを説明しています。

注意    Printer オブジェクトのプロパティの効果は、プリンタの製造元が提供するドライバおよびプリンタがサポートする機能によって異なります。一部のプロパティ設定の効果がないことや異なるプロパティが同じ効果を持つこともあります。

以下の表は、指定したプリンタの出力設定を返すため、または設定するために使用できる Printer オブジェクトのプロパティをまとめたものです。

プロパティ名 説明
ColorMode 指定したプリンタがカラーまたはモノクロで出力を印刷するかどうかを決定する AcPrintColor 定数を設定または返します。

AcPrintColor 定数は次のどちらか 1 つです。

  • acPRCMColor

  • acPRCMMonochrome
Copies 印刷部数を示す Long 値を設定または返します。
Duplex 指定したプリンタが両面印刷の印刷の向きを処理する方法を示す AcPrintDuplex 定数を設定または返します。

AcPrintDuplex 定数は次のいずれか 1 つです。

  • acPRDPSimplex 現在の印刷の向き設定で片面印刷を行います。

  • acPRDPHorizontal 左右にページをめくる両面印刷を行います。

  • acPRDPVertical 上下にページをめくる両面印刷を行います。
Orientation 指定したプリンタが印刷するページの向きを決定する AcPrintOrientation 定数を設定または返します。

AcPrintOrientation 定数は次のどちらか 1 つです。

  • acPRORLandscape

  • acPRORPortrait
PaperBin 指定したプリンタがどの給紙トレイを使用するかを示す AcPrintPaperBin 定数を設定または返します。

AcPrintPaperBin 定数は、次のいずれか 1 つです。

  • acPRBNUpper 上段トレイの用紙を使用します。

  • acPRBNLower 下段トレイの用紙を使用します。

  • acPRBNMiddle 中段トレイの用紙を使用します。

  • acPRBNManual 用紙シートごとに手差し給紙を待機します。

  • acPRBNEnvelope 封筒フィーダからの封筒を使用します。

  • acPRBNEnvManual 封筒フィーダからの封筒を使用しますが、手差し給紙を待機します。

  • acPRBNAuto (既定値) 現在の既定の給紙トレイからの用紙を使用します。

  • acPRBNTractor トラクタ フィーダからの用紙を使用します。

  • acPRBNSmallFmt 小型用紙フィーダからの用紙を使用します。

  • acPRBNLargeFmt 大型用紙フィーダからの用紙を使用します。

  • acPRBNLargeCapacity 大容量フィーダからの用紙を使用します。

  • acPRBNCassette 取り付けられたカセット カートリッジからの用紙を使用します。

  • acPRBNFormSource フォーム トレイからの用紙を使用します。
PaperSize 印刷時の用紙サイズを示す AcPrintPaperSize 定数を設定または返します。

AcPrintPaperSize 定数は、次のいずれか 1 つです。

  • acPRPSLetter Letter, 8 1/2 x 11 in.

  • acPRPSLetterSmall Letter Small, 8 1/2 x 11 in.

  • acPRPSTabloid Tabloid, 11 x 17 in.

  • acPRPSLedger Ledger, 17 x 11 in.

  • acPRPSLegal Legal, 8 1/2 x 14 in.

  • acPRPSStatement Statement, 5 1/2 x 8 1/2 in.

  • acPRPSExecutive Executive, 7 1/2 x 10 1/2 in.

  • acPRPSA3 A3, 297 x 420 mm

  • acPRPSA4 A4, 210 x 297 mm

  • acPRPSA4Small A4 Small, 210 x 297 mm

  • acPRPSA5 A5, 148 x 210 mm

  • acPRPSB4 B4, 250 x 354 mm

  • acPRPSB5 B5, 182 x 257 mm

  • acPRPSFolio Folio, 8 1/2 x 13 in.

  • acPRPSQuarto Quarto, 215 x 275 mm

  • acPRPS10x14 10 x 14 in.

  • acPRPS11x17 11 x 17 in.

  • acPRPSNote Note, 8 1/2 x 11 in.

  • acPRPSEnv9 Envelope #9, 3 7/8 x 8 7/8 in.

  • acPRPSEnv10 Envelope #10, 4 1/8 x 9 1/2 in.

  • acPRPSEnv11 Envelope #11, 4 1/2 x 10 3/8 in.

  • acPRPSEnv12 Envelope #12, 4 1/2 x 11 in.

  • acPRPSEnv14 Envelope #14, 5 x 11 1/2 in.

  • acPRPSCSheet C size sheet

  • acPRPSDSheet D size sheet

  • acPRPSESheet E size sheet

  • acPRPSEnvDL Envelope DL, 110 x 220 mm

  • acPRPSEnvC5 Envelope C5, 162 x 229 mm

  • acPRPSEnvC3 Envelope C3, 324 x 458 mm

  • acPRPSEnvC4 Envelope C4, 229 x 324 mm

  • acPRPSEnvC6 Envelope C6, 114 x 162 mm

  • acPRPSEnvC65 Envelope C65, 114 x 229 mm

  • acPRPSEnvB4 Envelope B4, 250 x 353 mm

  • acPRPSEnvB5 Envelope B5, 176 x 250 mm

  • acPRPSEnvB6 Envelope B6, 176 x 125 mm

  • acPRPSEnvItaly Envelope, 110 x 230 mm

  • acPRPSEnvMonarch Envelope Monarch, 3 7/8 x 7 1/2 in.

  • acPRPSEnvPersonal Envelope, 3 5/8 x 6 1/2 in.

  • acPRPSFanfoldUS U.S. Standard Fanfold, 14 7/8 x 11 in.

  • acPRPSFanfoldStdGerman German Standard Fanfold, 8 1/2 x 12 in.

  • acPRPSFanfoldLglGerman German Legal Fanfold, 8 1/2 x 13 in.

  • acPRPSUser ユーザー定義
PrintQuality 指定したプリンタの印刷品質を示す AcPrintObjQuality 定数を設定または返します。

AcPrintQuality 定数は、次のいずれか 1 つです。

  • acPRPQDraft

  • acPRPQLow

  • acPRPQMedium

  • acPRPQHigh

注意    一部のプリンタは独自の値を使用して、PrintQuality プロパティの値を設定または返します。PrintQuality プロパティが正の値を返す場合、300 または 600 などのプリンタがサポートする解像度 (DPI) を示しています。


以下の表は、指定したプリンタの出力設定を返すため、または設定するために使用できる Printer オブジェクトのプロパティをまとめたものです。

プロパティ名 説明
BottomMargin 印刷するページの下部の余白を twips 単位の Long 値で設定または返します。
ColumnSpacing 詳細セクション間の垂直方向の間隔を twips 単位の Long 値で設定または返します。
DataOnly Access がデータシート ビューのテーブルまたはクエリからのデータのみを印刷し、ラベル、コントロールの境界線、グリッド線、および表示されているグラフィックスを印刷しない場合は、 True になるブール値を設定または返します。
DefaultSize 印刷にデザイン ビューの詳細セクションのサイズが使用される場合は TrueItemSizeHeight プロパティおよび ItemSizeWidth プロパティの値が使用される場合は False になるブール値を設定または返します。

このプロパティが True のときは、ItemSizeHeight プロパティと ItemSizeWidth プロパティの値は無視されます。

ItemsAcross 複数列のレポートまたはラベルで 1 ページに印刷する列数を示す Long 値を設定または返します。
ItemLayout 列の印刷レイアウトで左から右へ印刷した後上から下へ印刷するか、上から下へ印刷した後左から右へ印刷するかを示す AcPrintItemLayout 定数を設定または返します。

AcPrintItemLayout 定数は、次のいずれか 1 つです。

  • acPRHorizontalColumnLayout 列を左から右、上から下へ印刷します。

  • acPRVerticalColumnLayout 列を上から下、左から右へ印刷します。
ItemSizeHeight フォームまたはレポートの詳細セクションの高さを twips 単位の Long 値で設定または返します。

DefaultSize プロパティが True の場合は、このプロパティは無視されます。

ItemSizeWidth フォームまたはレポートの詳細セクションの幅を twips 単位の Long 値で設定または返します。

DefaultSize プロパティが True の場合は、このプロパティは無視されます。

LeftMargin 印刷するページの左の余白を twips 単位の Long 値で設定または返します。
RightMargin 印刷するページの右の余白を twips 単位の Long 値で設定または返します。
RowSpacing 詳細セクション間の水平方向の間隔を twips 単位の Long 値で設定または返します。
TopMargin 印刷するページの上部の余白を twips 単位の Long 値で設定または返します。

Private Sub Report_Open(Cancel As Integer)
    'MsgBox "レポート"
    With Me.Printer
'        Debug.Print "TopMargin = " & .TopMargin
'        Debug.Print "BottomMargin = " & .BottomMargin
'        Debug.Print "LeftMargin = " & .LeftMargin
'        Debug.Print "RightMargin = " & .RightMargin
'
'        Debug.Print "ColumnSpacing = " & .ColumnSpacing
'        Debug.Print "RowSpacing = " & .RowSpacing
'
'        Debug.Print "ColorMode = " & .ColorMode
'        Debug.Print "DataOnly = " & .DataOnly
'        Debug.Print "DefaultSize = " & .DefaultSize
'        Debug.Print "ItemSizeHeight = " & .ItemSizeHeight
'        Debug.Print "ItemSizeWidth = " & .ItemSizeWidth
'        Debug.Print "ItemLayout = " & .ItemLayout
'        Debug.Print "ItemsAcross = " & .ItemsAcross
'
'        Debug.Print "Copies = " & .Copies
'        Debug.Print "Orientation = " & .Orientation
'        Debug.Print "Duplex = " & .Duplex
'        Debug.Print "PaperBin = " & .PaperBin
'        Debug.Print "PaperSize = " & .PaperSize
'        Debug.Print "PrintQuality = " & .PrintQuality

End Sub


Option Compare Database
Option Explicit

'http://support.microsoft.com/kb/210283/JA/
Type zwtDevModeStr
RGB As String * 94
End Type

Type zwtDeviceMode
dmDeviceName As String * 16
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperlength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * 16
dmPad As Long
dmBits As Long
dmPW As Long
dmDFI As Long
dmDRr As Long
End Type

Sub CustomPage(strPrt As String, dblTop As Double, dblBot As Double, dblLef
As Double, dblRig As Double, lonSiz As Long, lonSou As Long)
Dim DevString As zwtDevModeStr
Dim DM As zwtDeviceMode
Dim DevModeExtra As String
Dim rpt As Report
    DoCmd.OpenReport strPrt, acViewDesign, , , acHidden
    Set rpt = Reports(strPrt)
    DevModeExtra = rpt.PrtDevMode
    DevString.RGB = DevModeExtra
    LSet DM = DevString
    DM.dmPaperSize = lonSiz                     '用紙設定
    DM.dmDefaultSource = lonSou                 '給紙設定
    With rpt.Printer
        .TopMargin = Round(dblTop * 56.7, 2)    '上余白
        .BottomMargin = Round(dblBot * 56.7, 2) '下余白
        .LeftMargin = Round(dblLef * 56.7, 2)   '左余白
        .RightMargin = Round(dblRig * 56.7, 2)  '右余白
    End With
    LSet DevString = DM
    Mid$(DevModeExtra, 1, 68) = DevString.RGB
    rpt.PrtDevMode = DevModeExtra
    Set rpt = Nothing
    DoCmd.Close acReport, strPrt, acSaveYes
End Sub

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
With Me.Printer
Me.テキスト1 = _
"TopMargin = " & Round(.TopMargin / 56.7, 2) & vbCrLf & _
"BottomMargin = " & Round(.BottomMargin / 56.7, 2) & vbCrLf & _
"LeftMargin = " & Round(.LeftMargin / 56.7, 2) & vbCrLf & _
"RightMargin = " & Round(.RightMargin / 56.7, 2) & vbCrLf & _
"PaperBin = " & .PaperBin & vbCrLf & _
"PaperSize = " & .PaperSize

End With

End Sub