Właściwości drukarki nie są dziedziczone przez obiekty, które używają drukarki domyślnej


Zaawansowane: wymaga specjalistycznej kodowania, interoperacyjności i umiejętności wielu użytkowników. Ten artykuł dotyczy bazy danych programu Microsoft Access (. mdb) lub bazy danych 2007 programu Microsoft Office Access (accdb). Ten artykuł dotyczy również projektu programu Microsoft Access (. adp).

Symptomy


Po programowo zmienić właściwości Application. Printer obiektu, formularze i raporty, które używają drukarki domyślnej nie automatycznie dziedziczą te ustawienia.

Przyczyna


Zapisane formularze i raporty przechowują informacje o drukarce w ramach ich definicji. Podczas wyświetlania podglądu lub drukowania zapisanych formularzy i raportów obiekty te wykorzystują informacje o drukarce przechowywane w nich zamiast dziedziczące ustawienia z obiektu Application. Printer .

Rozwiązanie


Istnieją dwa możliwe obejścia, aby wymusić raport, aby użyć bieżących ustawień drukarki. Firma Microsoft podaje przykłady programowania tylko na ilustracji, bez gwarancji wyrażonej lub dorozumianej. Obejmuje to, ale nie ogranicza się do, dorozumianych gwarancji przydatności handlowej lub przydatności do określonego celu. W tym artykule założono, że znasz języka programowania, który jest demonstrowany i narzędzia, które są używane do tworzenia i debugowania procedur. Inżynierowie pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu funkcjonalności konkretnej procedury, ale nie będą modyfikować tych przykładów, aby zapewnić dodatkowe funkcje lub konstruować procedury spełniające określone wymagania.

Ustaw właściwość Printer na Application. Printer

Po dostosowaniu właściwości dla Application. Printer obiektu, ustaw Printer właściwości formularza lub raportu do Application. Printer obiektu. Wymusza formularza lub raportu, aby zniszczyć jego bieżącą DEVMODE struktury i dziedziczą nowe z Application. Printer obiektu. Należy zauważyć, że takie podejście jest dobre do tymczasowego zmieniania właściwości drukarki obiektu. Ustawienia drukarki nie będą przechowywane z obiektem, chyba że jawnie zapisać obiekt później. Powoduje to również, że obiekt, który ma być ustawiony na określoną drukarkę przez okres czasu, który jest otwarty. Aby ustawić właściwości Printer obiektu Application. Printer obiektu, wykonaj następujące kroki:
  1. Otwórz przykładową bazę danych Northwind. mdb.
  2. Zamknij formularz główny panel przełączania, gdy się pojawi.
  3. Naciśnij kombinację ALT + F11, aby otworzyć Edytor Visual Basic.
  4. W menu Insert (Wstaw) kliknij polecenie Module (Moduł).
  5. Dodaj następujący kod języka Visual Basic for Applications do nowego modułu:
    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. Kliknij powyższą procedurę próbkowania, a następnie w menu Uruchom kliknij polecenie Uruchom Sub/UserForm.
  7. W menu plik kliknij polecenie Zamknij i wróć do programu Microsoft Access.
  8. W programie Microsoft Office Access 2003 lub w programie Microsoft Access 2002 kliknij przycisk Ustawienia strony w menu plik , a następnie kliknij kartę Strona . W programie Microsoft Office Access 2007 kliknij przycisk Microsoft Office, wskaż polecenieDrukuj, a następnie kliknij Podgląd wydruku. Na karciePodgląd wydruku kliknij pozycję Ustawienia strony w grupieUkład strony , a następnie kliknij kartę Strona. Należy zauważyć, że rozmiar papieru raportu jest ustawiony jako prawny, a Orientacja jest ustawiona na pozioma.
  9. Zamknij raport.
  10. W oknie Baza danych ponownie Wydrukuj Podgląd alfabetycznej listy produktów. Należy pamiętać, że ustawienia drukarki nie zostały automatycznie zapisane w raporcie.

Przypisywanie ustawień drukarki bezpośrednio do obiektu

Innym rozwiązaniem jest programowo ustawić ustawienia drukarki samego obiektu, zamiast ustawiania ich do Application. Printer właściwości. Ustawienie poszczególnych właściwości właściwości Printer obiektu jest podobne do użytkownika ręcznego zmieniania ustawień drukarki w oknie dialogowym ustawienia strony . Po ustawieniu programowo ustawienia drukarki obiektu bezpośrednio, ustawienia są zapisywane z obiektem automatycznie. Aby ustawić ustawienia drukarki obiektu bezpośrednio, wykonaj następujące kroki:
  1. Otwórz przykładową bazę danych Northwind. mdb.
  2. Zamknij formularz główny panel przełączania, gdy się pojawi.
  3. Naciśnij kombinację ALT + F11, aby otworzyć Edytor Visual Basic.
  4. W menu Insert (Wstaw) kliknij polecenie Module (Moduł).
  5. Dodaj następujący kod języka Visual Basic for Applications do nowego modułu:
    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. Kliknij powyższą procedurę próbkowania, a następnie w menu Uruchom kliknij polecenie Uruchom Sub/UserForm.
  7. W menu plik kliknij polecenie Zamknij i wróć do programu Microsoft Access.
  8. W menu plik kliknij polecenie Ustawienia strony, a następnie kliknij kartę Strona . W programie Microsoft Office Access 2007 kliknij przycisk Microsoft Office, wskaż polecenieDrukuj, a następnie kliknij Podgląd wydruku. Na karciePodgląd wydruku kliknij pozycję Ustawienia strony w grupieUkład strony , a następnie kliknij kartę Strona. Należy zauważyć, że rozmiar papieru raportu jest ustawiony jako prawny, a Orientacja jest ustawiona na pozioma.
  9. Zamknij raport.
  10. W oknie Baza danych ponownie Wydrukuj Podgląd alfabetycznej listy produktów. Należy pamiętać, że ustawienia drukarki zostały automatycznie zapisane w raporcie.

Stan


To zachowanie jest według projektu.

Więcej informacji


Formularze i raporty przechowują strukturę o nazwie DEVMODE w ramach ich definicji. DEVMODE struktura jest strukturą systemu Microsoft Windows, która definiuje informacje o drukarce dla określonego obiektu. Na przykład elementy takie jak rozmiar papieru, kosz papieru i orientacja są przechowywane jako część tej struktury. Podczas tworzenia nowego formularza lub obiektu raportu, formularz lub obiekt raportu automatycznie dziedziczy DEVMODE struktury z Application. Printer obiektu. Podczas zapisywania formularza lub raportu, DEVMODE strukturę, która została odziedziczona automatycznie pobiera zapisane z nim. Domyślnie właściwości drukarki dla Application. Printer obiektu będzie taka sama jak drukarki domyślnej w systemie Microsoft Windows. Jednak można programowo zmienić te właściwości, tak aby program Microsoft Access używa innego zestawu właściwości drukarki domyślnej. Tabele, kwerendy, widoki i procedury przechowywane nie przechowują informacji o drukarce w ramach ich definicji. W związku z tym podczas drukowania tabel, kwerend, widoków lub procedur przechowywanych, będą zawsze używać bieżących ustawień zdefiniowanych w Application. Printer obiektu.

Kroki prowadzące do odtworzenia problemu

  1. W programie Access 2003 lub w programie Access 2002 Otwórz przykładową bazę danych Northwind. mdb.
  2. Zamknij formularz główny panel przełączania, gdy się pojawi.
  3. W menu Widok wskaż polecenie obiekty bazy danych, a następnie kliknij polecenie raporty.
  4. Kliknij przycisk alfabetycznej listy produktów raportu w oknie bazy danych, a następnie w menu plik kliknij Ustawienia strony.
  5. Kliknij kartę Strona i sprawdź, czy w sekcji drukarka w oknie dialogowym zaznaczono opcję drukarka domyślna .
  6. Kliknij przycisk OK , aby zamknąć okno dialogowe Ustawienia strony .
  7. W menu Insert (Wstaw) kliknij polecenie Module (Moduł).
  8. Dodaj następujący kod języka Visual Basic for Applications do modułu:
    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. Kliknij powyższą procedurę próbkowania, a następnie w menu Uruchom kliknij polecenie Uruchom Sub/UserForm.
  10. W menu plik kliknij polecenie Zamknij i wróć do programu Microsoft Access.
  11. W menu Widok wskaż polecenie obiekty bazy danych, a następnie kliknij polecenie kwerendy.
  12. Kliknij kwerendę alfabetyczną listę produktów , a następnie w menu plik kliknij polecenie Podgląd wydruku.
  13. W menu plik kliknij polecenie Ustawienia strony.
  14. Kliknij kartę Strona . należy pamiętać, że opcja Orientacja jest ustawiona na pozioma , a opcja rozmiar papieru jest ustawiona na legalne zgodnie z oczekiwaniami.
  15. Kliknij przycisk Anuluj , aby zamknąć okno dialogowe Ustawienia strony , a następnie zamknij kwerendę.
  16. W menu Widok wskaż polecenie obiekty bazy danych, a następnie kliknij polecenie raporty.
  17. W oknie Baza danych kliknij pozycję Raport alfabetyczny Lista produktów , a następnie kliknij przycisk Podgląd.
  18. W menu plik kliknij polecenie Ustawienia strony.
  19. Kliknij kartę Strona . należy pamiętać, że opcja Orientacja jest ustawiona na pionowa , a opcja rozmiar papieru jest ustawiona na Letter, która różni się od ustawień wprowadzonych do obiektu Application. Printer .