通常使うプリンタを使用するオブジェクトに継承されないプリンタ プロパティ


上級: 専門的なコーディング、相互運用性、およびマルチユーザースキルが必要です。この資料は、Access データベース (.mdb) または Access 2007 データベース (.accdb) に適用されます。この資料は、Access プロジェクト (.adp) にも適用されます。

現象


Application.Printerオブジェクトのプロパティをプログラムで変更しても、通常使うプリンタを使用するフォームおよびレポートは、これらの設定を自動的に継承しません。

原因


保存されたフォームおよびレポートには、プリンタ情報が定義の一部として格納されます。保存したフォームやレポートをプレビューまたは印刷する場合、これらのオブジェクトはApplication.Printerオブジェクトから設定を継承する代わりに、その中に格納されているプリンタ情報を使用します。

解決方法


レポートで現在のプリンタ設定を強制的に使用させる回避策は 2 つあります。マイクロソフトでは、明示または黙示を問わず、説明のみを目的とするプログラミング例を提供しています。これには、特定の目的に対する商品性または適合性に関する黙示の保証が含まれますが、これらに限定されません。この資料は、デモンストレーションされているプログラミング言語と、プロシージャの作成とデバッグに使用するツールに精通していることを前提としています。Microsoft サポート エンジニアは、特定の手順の機能を説明するのに役立ちますが、これらの例を変更して追加機能を提供したり、特定の要件を満たす手順を作成したりはしません。

[プリンタ] プロパティを [アプリケーション.

Application.Printerオブジェクトのプロパティをカスタマイズしたら、フォームまたはレポートのPrinterプロパティをApplication.Printerオブジェクトに設定します。これにより、フォームまたはレポートは、現在のDEVMODE構造体を破棄し、Application.Printerオブジェクトから新しい構造体を継承します。 この方法は、オブジェクトのプリンタプロパティを一時的に変更する場合に適しています。後で明示的にオブジェクトを保存しない限り、プリンタの設定はオブジェクトと共に保存されません。これにより、オブジェクトが開いている間、オブジェクトが特定のプリンタに設定されます。オブジェクトのPrinterプロパティをApplication.Printerオブジェクトに設定するには、次の手順を実行します。
  1. サンプル データベース Northwind.mdb を開きます。
  2. [メイン スイッチボード] フォームが表示されたら閉じます。
  3. Alt キーを押しながら F11 キーを押して、Visual Basic エディタを開きます。
  4. [挿入] メニューの [標準モジュール] をクリックします。
  5. 次の VBA コードを新しいモジュールに追加します。
    Sub ChangePrinterSettingsForReport()   Dim rpt As Access.Report   Dim prtr As Access.Printer      Set Application.Printer = Nothing   Set prtr = Application.Printer      'Set the default printer's orientation to landscape   prtr.Orientation = acPRORLandscape   'Set the default printer's paper size to legal   prtr.PaperSize = acPRPSLegal   'Print Preview the Alphabetical List of Products Report   DoCmd.OpenReport "Alphabetical List of Products", acPreview   Set rpt = Reports("Alphabetical List of Products")   'Set the Printer property of the report to the   'Application.Printer object   Set rpt.Printer = prtr   'Uncomment the following line if you wish to save the object   'with the current settings   'DoCmd.Save acReport, rpt.NameEnd Sub
  6. 上記のサンプル プロシージャをクリックし、[ファイル名を指定して実行]メニューの [サブ/ユーザー フォームの実行]をクリックします。
  7. [ファイル]メニューの[閉じて Access に戻る]をクリックします。
  8. Access 2003 または Access 2002 では、[ファイル]メニューの[ページ設定]をクリックし、[ページ]タブをクリックします。Access 2007 で、[Officeボタン]をクリックし、[印刷]をポイントします。[印刷プレビュー]タブの [ページレイアウト]で [ページ設定]をクリックし、[ページ]タブをクリックします。レポートの用紙サイズ[法的]に設定され、[向き][横]に設定されていることに注意してください。
  9. レポートを閉じます。
  10. データベース ウィンドウで、[製品のアルファベット順リスト] レポートを再度印刷プレビューします。プリンタの設定がレポートと共に自動的に保存されなかったことに注意してください。

オブジェクトのプリンタ設定を直接割り当てる

もう 1 つの回避策は、オブジェクト自体のプリンタ設定をApplication.Printerプロパティに設定するのではなく、プログラムで設定することです。オブジェクトのPrinterプロパティの個々のプロパティの設定は、[ページ設定]ダイアログ ボックスでプリンタの設定を手動で変更するユーザーと似ています。プログラムでオブジェクトのプリンタ設定を直接設定すると、設定はオブジェクトと共に自動的に保存されます。オブジェクトのプリンタ設定を直接設定するには、次の手順を実行します。
  1. サンプル データベース Northwind.mdb を開きます。
  2. [メイン スイッチボード] フォームが表示されたら閉じます。
  3. Alt キーを押しながら F11 キーを押して、Visual Basic エディタを開きます。
  4. [挿入] メニューの [標準モジュール] をクリックします。
  5. 次の VBA コードを新しいモジュールに追加します。
    Sub ChangePrinterSettingsForReport()   Dim rpt As Access.Report     DoCmd.OpenReport "Alphabetical List of Products", acPreview   Set rpt = Reports("Alphabetical List of Products")         'Set the default printer's orientation to landscape   rpt.Printer.Orientation = acPRORLandscape   'Set the default printer's paper size to legal   rpt.Printer.PaperSize = acPRPSLegalEnd Sub
  6. 上記のサンプル プロシージャをクリックし、[ファイル名を指定して実行]メニューの [サブ/ユーザー フォームの実行]をクリックします。
  7. [ファイル]メニューの[閉じて Access に戻る]をクリックします。
  8. [ファイル]メニューの[ページ設定]をクリックし、[ページ]タブをクリックします。Access 2007 で、[Officeボタン]をクリックし、[印刷]をポイントします。[印刷プレビュー]タブの [ページレイアウト]で [ページ設定]をクリックし、[ページ]タブをクリックします。レポートの用紙サイズ[法的]に設定され、[向き][横]に設定されていることに注意してください。
  9. レポートを閉じます。
  10. データベース ウィンドウで、[製品のアルファベット順リスト] レポートを再度印刷プレビューします。プリンタの設定はレポートと共に自動的に保存されることに注意してください。

状態


この動作は仕様です。

詳細情報


フォームとレポートには、定義の一部としてDEVMODEという名前の構造体が格納されます。DEVMODE構造体は、特定のオブジェクトのプリンター情報を定義する Windows 構造体です。たとえば、用紙サイズ、用紙ビン、向きなどの項目は、この構造の一部として格納されます。新しいフォームまたはレポート オブジェクトを作成すると、フォームオブジェクトまたはレポートオブジェクトは、Application.PrinterオブジェクトからDEVMODE構造体を自動的に継承します。フォームまたはレポートを保存すると、自動的に継承されたDEVMODE構造体も一緒に保存されます。既定では、アプリケーション.プリンタオブジェクトのプリンタ プロパティは、Windows 内の通常使うプリンタと同じになります。ただし、プログラムを使用してこれらのプロパティを変更して、通常使うプリンタで異なるプロパティ セットを使用するようにすることもできます。テーブル、クエリ、ビュー、およびストアド プロシージャは、プリンタ情報を定義の一部として格納しません。したがって、テーブル、クエリ、ビュー、またはストアド プロシージャを印刷する場合、常にApplication.Printerオブジェクトで定義されている現在の設定が使用されます。

現象の再現手順

  1. Access 2003 または Access 2002 で、サンプル データベース Northwind.mdb を開きます。
  2. [メイン スイッチボード] フォームが表示されたら閉じます。
  3. [表示]メニューの [データベース オブジェクト]をポイントし、[レポート]をクリックします。
  4. データベース ウィンドウで[製品のアルファベット順リスト]レポートをクリックし、[ファイル]メニューの [ページ設定]をクリックします。
  5. [ページ]タブをクリックし、ダイアログ ボックスの [プリンタ]セクションで [通常使うプリンタ]オプションが選択されていることを確認します。
  6. [OK] をクリックして [ページ設定]ダイアログ ボックスを閉じます。
  7. [挿入] メニューの [標準モジュール] をクリックします。
  8. 次の VBA コードをモジュールに追加します。
    Sub ChangePrinterSettings()   'Set the default printer's orientation to landscape   Application.Printer.Orientation = acPRORLandscape   'Set the default printer's paper size to legal   Application.Printer.PaperSize = acPRPSLegalEnd Sub
  9. 上記のサンプル プロシージャをクリックし、[ファイル名を指定して実行]メニューの [サブ/ユーザー フォームの実行]をクリックします。
  10. [ファイル]メニューの[閉じて Access に戻る]をクリックします。
  11. [表示]メニューの [データベース オブジェクト]をポイントし、[クエリ]をクリックします。
  12. [製品のアルファベット順リスト]クエリをクリックし、[ファイル]メニューの [印刷プレビュー]をクリックします。
  13. [ファイル] メニューの [ページ設定] をクリックします。
  14. [ページ]タブをクリックします。
  15. [キャンセル] をクリックして [ページ設定]ダイアログ ボックスを閉じ、クエリを閉じます。
  16. [表示]メニューの [データベース オブジェクト]をポイントし、[レポート]をクリックします。
  17. データベース ウィンドウで、[製品のアルファベット順リスト]レポートをクリックし、[プレビュー]をクリックします。
  18. [ファイル] メニューの [ページ設定] をクリックします。
  19. [ページ]タブをクリックします。