進階: 須具備專家編碼、 互操作性與多重使用者技巧。本文適用於 Microsoft Access 資料庫 (.mdb) 或 Microsoft Office Access 2007 資料庫 (.accdb)。本文也適用於 Microsoft Access 專案 (.adp) 中。

徵狀

以程式設計方式變更Application.Printer物件的屬性之後,表單和報表,使用預設的印表機不自動會繼承這些設定。

原因

已儲存的表單和報表儲存印表機資訊,為其定義的一部份。當您預覽或列印已儲存的表單和報表時,這些物件就會使用印表機的資訊儲存在它們,而不是從Application.Printer物件繼承的設定值。

解決方案

有兩個可能的解決方法,以強制該報表以供目前的印表機設定。Microsoft 提供程式設計範例僅供說明,不做任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已相當熟悉使用的我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序中,功能,但它們不會修改這些範例以提供附加功能或建構程序來滿足您特定需求。

將印表機內容設定為 Application.Printer

自訂Application.Printer物件的屬性之後,請將表單或報表的 [印表機] 屬性設Application.Printer物件。這會強制表單或報表來摧毀其目前的DEVMODE結構,並繼承一個新從Application.Printer物件。 請注意,這種方法適用於暫時變更物件的印表機內容。除非您明確地儲存物件之後,印表機設定不會儲存與物件。這也會造成要設定成特定的印表機,它是開啟的時間期間的物件。若要設定物件的印表機內容的Application.Printer物件,請依照下列步驟執行:

  1. 開啟範例資料庫 Northwind.mdb。

  2. 出現時,請關閉 [切換表單。

  3. 請按 ALT + F11 來開啟 Visual Basic 編輯器。

  4. 在 [插入] 功能表上,按一下 [模組]。

  5. 將下列的 Visual Basic for Applications,程式碼加入至新的模組中:

    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. 按一下在上述範例程序,然後按一下 [執行] 功能表上的 [執行 Sub/使用者表單。

  7. 按一下 [檔案] 功能表上的 [關閉並返回至 [Microsoft Access]。

  8. 在 Microsoft Office Access 2003 中或在 Microsoft Access 2002 中,按一下 [檔案] 功能表上 [版面設定,然後按一下 [頁面] 索引標籤。在 Microsoft Office Access 2007 中,按一下 [ Microsoft Office] 按鈕,指向 [列印],然後按一下 [預覽列印]。在 [預覽列印]索引標籤中,按一下 [版面配置] 群組中的 [版面設定,然後按一下 [頁面] 索引標籤。請注意,報表的紙張大小設定為合法,方向設定為 [橫向。

  9. 關閉報表。

  10. 在 [資料庫] 視窗中,請一次列印預覽產品清單依筆劃排] 報表。請注意,印表機設定不會自動儲存報表。

直接指派物件的印表機設定

另一個解決方法是物件的以程式設計方式設定印表機設定本身,而不是物件的將它們設定為 [ Application.Printer ] 屬性。設定物件的印表機屬性的個別屬性,是使用者手動變更 [版面設定] 對話方塊內的印表機設定類似。當您以程式設計方式設定物件的印表機設定直接時,則設定會自動儲存與物件。若要直接設定物件的印表機設定,請依照下列步驟執行:

  1. 開啟範例資料庫 Northwind.mdb。

  2. 出現時,請關閉 [切換表單。

  3. 請按 ALT + F11 來開啟 Visual Basic 編輯器。

  4. 在 [插入] 功能表上,按一下 [模組]。

  5. 將下列的 Visual Basic for Applications,程式碼加入至新的模組中:

    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. 按一下在上述範例程序,然後按一下 [執行] 功能表上的 [執行 Sub/使用者表單。

  7. 按一下 [檔案] 功能表上的 [關閉並返回至 [Microsoft Access]。

  8. 在 [檔案] 功能表中,按一下 [版面設定],然後按一下 [頁面] 索引標籤。在 Microsoft Office Access 2007 中,按一下 [ Microsoft Office] 按鈕,指向 [列印],然後按一下 [預覽列印]。在 [預覽列印]索引標籤中,按一下 [版面配置] 群組中的 [版面設定,然後按一下 [頁面] 索引標籤。請注意,報表的紙張大小設定為合法,方向設定為 [橫向。

  9. 關閉報表。

  10. 在 [資料庫] 視窗中,請一次列印預覽產品清單依筆劃排] 報表。請注意,與報告一起自動儲存印表機設定。

狀態

產生此錯誤是系統刻意為之。

其他相關資訊

表單和報表儲存為其定義的一部份命名DEVMODE結構。DEVMODE結構是一種 Microsoft Windows 的結構定義特定物件的印表機資訊。例如,項目,例如紙張大小、 紙匣及列印方向會儲存為此結構的一部份。當您建立新的表單或報表物件時,表單或報表物件會自動繼承DEVMODE結構從Application.Printer物件。當您儲存表單或報表時,會自動繼承DEVMODE結構取得會一起儲存。根據預設, Application.Printer物件的印表機屬性會為預設印表機,在 Microsoft Windows 內相同。不過,很可能以程式設計方式變更這些屬性,讓 Microsoft Access 會使用一組不同的屬性的預設印表機。資料表、 查詢、 檢視和預存程序不要為其定義的一部份儲存印表機資訊。因此當您列印資料表、 查詢、 檢視或預存程序時,它們將永遠使用目前的Application.Printer物件中所定義的設定。

重現問題的步驟

  1. 在 Access 2003 中或在 Access 2002 中,開啟 [範例資料庫 Northwind.mdb。

  2. 出現時,請關閉 [切換表單。

  3. 在 [檢視] 功能表中,指向資料庫物件],然後按一下報表。

  4. 按一下 [產品清單依筆劃排報表,在 [資料庫] 視窗中的,然後按一下 [檔案] 功能表上的 [版面設定]。

  5. 按一下 [網頁] 索引標籤,確認已選取 [預設的印表機選項] 對話方塊的 [印表機] 區段底下。

  6. 按一下[確定]以關閉 [版面設定] 對話方塊。

  7. 在 [插入] 功能表上,按一下 [模組]。

  8. 您可以將下列的 Visual Basic for Applications,程式碼加入模組:

    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. 按一下在上述範例程序,然後按一下 [執行] 功能表上的 [執行 Sub/使用者表單。

  10. 按一下 [檔案] 功能表上的 [關閉並返回至 [Microsoft Access]。

  11. 在 [檢視] 功能表上指向 [資料庫物件,再查詢。

  12. 按一下產品清單依筆劃排] 查詢,,,然後按一下 [檔案] 功能表上的 [預覽列印]。

  13. 在 [檔案] 功能表上按一下 [頁面設定]。

  14. 按一下 [頁面] 索引標籤,請注意,[方向] 選項設定為 [橫向和紙張大小] 選項設定為合法如預期般運作。

  15. 按一下 [取消] 以關閉 [版面設定] 對話方塊中,並關閉查詢。

  16. 在 [檢視] 功能表中,指向資料庫物件],然後按一下報表。

  17. 在 [資料庫] 視窗中,按一下 [產品清單依筆劃排] 報表中,,然後按一下 [預覽。

  18. 在 [檔案] 功能表上按一下 [頁面設定]。

  19. 按一下 [頁面] 索引標籤,請注意,[方向] 選項設定為 [直向和紙張大小] 選項設定為字母,不同於Application.Printer物件所做的設定]。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×