Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Druck-Formular

Begonnen von AMB, Februar 02, 2015, 09:56:27

⏪ vorheriges - nächstes ⏩

AMB

Guten Morgen,

ich habe da mal wieder ein kleines Problem bei dem ich auf dem Schlauch stehe:

Um Code zu sparen und ein wenig flexibler zu sein, habe ich mir überlegt, Berichte über ein Druck-Formular zu drucken.

Meine Gedanken:
- Tabelle mit Druckern (PDF, Farbe, SW) anlegen
- Druckformular (zur Auswahl des Druckers) erstellen
- Bericht öffnen
- über ein Objekt im Bericht das Druck-Formular aufrufen
- im Formular den Drucker auswählen
- Druckformular schließen
- Bericht entsprechend der Auswahl drucken
- Bericht schließen
Ich möchte nur ein Druckformular für alle meine Berichte nutzen.

Meine Umsetzung:
- Formular erstellt
- Code:
  Private Sub cmdPDF_Click()
  Dim PDF As String
    PDF = DLookup("Drucker", "tbldatendrucker", "ID=1")
        Set Application.Printer = Application.Printers(PDF)
        DoCmd.Close acForm, Screen.ActiveForm.Name
        DoCmd.OpenReport Screen.Application.CurrentObjectName
        DoCmd.Close acReport, Screen.Application.CurrentObjectName
        Set Application.Printer = Nothing
   End Sub
- Bericht direkt geöffnet und getestet. Perfektes Ergebnis

Mein Problem:
Alle Formulare und Berichte werden als Pop-Up geöffnet. Was ich bei meinem Test nicht bedacht habe, die Berichte werden über Formulare geöffnet. Diese Formulare sind und sollen auch geöffnet bleiben.
Dadurch ist der Bericht aber beim Durchlauf des Codes nicht mehr aktiv, sondern das Hauptformular und ein Fehler ist die Folge.
Kann mir bitte jemand beim Code helfen?! (Ich möchte aber nicht die Standard-Druckauswahl nutzen!!!)

Gruß
Michael

database

Hallo,

ZitatDadurch ist der Bericht aber beim Durchlauf des Codes nicht mehr aktiv
In dem Fall müsstest du die Formulare udgl. beim Namen nennen


        DoCmd.Close acForm, "Formularname"
        DoCmd.OpenReport "Reportname"
        DoCmd.Close acReport, "Reportname"

AMB

Hallo,

dann wäre ich aber nicht mehr so flexibel und müsste auch für jeden Bericht ein eigenes Druck-Formular erstellen (das möchte ich ja gerne vermeiden).
Fehlermeldung:
Laufzeitfehler '2476'
Sie haben einen Ausdruck eingegeben, für den es erforderlich ist, dass das aktive Fenster ein Bericht ist.

Kann man nicht irgendwie den Bericht wieder aktivieren?

Gruß
Michael

DF6GL

Hallo,


das Konzept ist m. E. etwas verbesserungswürdig...
Die Screen.Activeform-Eigenschaft ist sehr von der Umgebungssituation abhängig.

Vorschlag:
Ein ungebundenes Formular erstellen, in dem in einem Kombifeld die "gültigen" Berichte aus Tabelle "MSysObjects" angezeigt werden. Ein "gültiger" Bericht wird mit einem besonderen Prefix im Namen versehen, z. B. "outMeinBericht1", der somit in der Kombifeld-Abfrage gefiltert werden kann.

Weiterhin ein Kombifeld, das die aus dem System ausgelesenen (oder über die Printers-Auflistung ermittelten) Drucker anzeigt.(Die separate Drucker-Tabelle ist natürlich auch verwendbar, ist aber pflegebedürftig.).

Dazu ein Button "btnDrucken", der den ausgewählten Bericht auf den ausgewählten Drucker ausgibt, evtl. mit gleichzeitiger Preview des Berichtes.


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AMB

Hallo,

wenn ich das richtig verstanden habe, wähle ich über ein Kombifeld den entsprechenden Bericht aus!?
Das ist nicht benutzerfreundlich, da ich viele Berichte habe und der Benutzer wahrscheinlich alles (außer den richtigen Bericht) ausdruckt.

Kann ich nicht den Namen für den geöffneten Bericht ermitteln? Es ist nur immer ein Bericht geöffnet.

Gruß
Michael

AMB

So, ich habe es nun hinbekommen:

im Druck-Formular ein Textfeld angelegt:
Private Sub txtBericht_GotFocus()
    Dim r As Report
    Set r = Screen.ActiveReport
     txtBericht = r.Name
End Sub

und den Code angepasst:
Dim strBericht As String
strBericht = Me.txtBericht
Dim SW As String
    SW = DLookup("Drucker", "tbldatendrucker", "ID=3")
        Set Application.Printer = Application.Printers(SW)
        DoCmd.Close acForm, Screen.ActiveForm.Name
        DoCmd.OpenReport "" & strBericht & ""
        DoCmd.Close acReport, "" & strBericht & ""
        Set Application.Printer = Nothing
End Sub

Danke für die Anmerkung mit dem Kombifeld.

Gruß
Michael