Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Bericht aus Formular heraus anzeigen





Frage

Hallo ! Ich würde gerne aus einem Formular heraus einen Bericht drucken, und zwar soll es so sein, wenn ich die Drucken- Taste anklicke, dass die aktuelle Formularansicht in einen Bericht "gelenkt" wird. (Aktuelle Formularansicht wird wird per VBA+SQL- Abfragen erzeugt) Thankx !

Antwort 1 von Armin



1. per vba das formular als bericht abspeichern

2. den bericht aufrufen.


ungetestet und gruss armin

Antwort 2 von BenztownCitizen

Wie geht das unter Punkt 1 genannte Verfahren ungefähr....

Gruß Sam



Antwort 3 von Coolpix

hallo,

wenn du in der Entwurfsansicht deines Formulars einne Befehlsschaltfläche hinzufügst, erschein ein kleiner Assistent.
Dort kann man unter Formularoperationen den Befehl Formular drucken auswählen !!


Greetings ;-)

Antwort 4 von BenztownCitizen

Das ist nicht so ganz das was ich möchte, weil er mir ja das Formular mit allen Schaltflächen, Rahmen usw. druckt.

Ich hätte gerne aus der aktuellen Formularansicht einen Ausdruck in Berichtsform.


Yes, and only that

Antwort 5 von Coolpix

hallo nochmal,

wenn du aus einem geöffneten Formular die aktuell angezeigten Datensätze in Berichtform ausdrucken willst, solltest du auch danach fragen.

Ich würde mir eine Abfrage basteln, welche das gleiche Ergebnis liefert, daraus einen Bericht erstellen un den per Befehlsschaltfläche ausdrucken.

bin gerne bereit dir dabei zu helfen aber dann brauche ich Infos wie du die Datensätze in deinem Formular selektierst !

Greetings ;-)



Antwort 6 von BenztownCitizen

Hallo !

Ich selektiere die Datensätze über Kombinationsfelder die über SQL- Abfragen gefüllt werden, der jeweils gewählte Ausdruck wird in VBA übergeben und über SQL wird der Datensatz selektiert un im Formular dargestellt(Endlosformular).

Bsb.:


Private Sub ComboPlace_AfterUpdate()
   Me.RecordSource = "SELECT DEVICES.name, DEVICES.inventory, DEVICES.purchase, DEVICES.serial, DEVICES.lastcheck, " & _
   "DEVICES.nextcheck, DEVICES.nocalibration, DEVICES.internalcheck, DEVICES.nocheck, DEVICES.internalcal, " & _
   "DEVICES.checkcycle, DEVICES.checkdone, DEVICES.maintenance, DEVICES.remark, DEVICETYPNAME.name, MANUFACTURER.name, " & _
   "PLACE.name FROM PLACE INNER JOIN (MANUFACTURER INNER JOIN (DEVICETYPNAME INNER JOIN DEVICES ON " & _
   "DEVICETYPNAME.id = DEVICES.devtyp) ON MANUFACTURER.manid = DEVICES.manid) " & _
   "ON PLACE.placeid = DEVICES.placeid WHERE (((Place.name)= '" & Me![ComboPlace] & "'));"
End Sub


Jetzt werden wie im obigen Beispiel alle Geräte angezeigt (Name,Messbereich,Eichdatum usw) welche sich an einem bestimmten Standort befinden.

Diese Auswahl soll nun ansehnlich ausgedruckt werden das man eine Übersicht hat die man weitergeben kann.
Am besten über einen Button, der dann meinetwegen mit dem Kommentar" Aktuelle Ansicht drucken" versehen wird.

So stell ich mir das vor

Gruß



Antwort 7 von Armin

... hab´s gerade ausprobiert:



Private Sub btnCreateReport_Click()

    DoCmd.Close
    DoCmd.RunCommand acCmdSaveAsReport
    
End Sub



der befehl saveas steht aber evtl nur bei geschlossenem form zur verfügung, daher das close.

gruesse armin


Antwort 8 von Coolpix

hallo nochmal,

um eine dynamische Abfrage zur Laufzeit zu erstellen machst du einfach folgendes:


Private Sub ComboPlace_AfterUpdate()
    Dim db As Database
    Dim StrSql As String
    Set db = CurrentDb

    StrSql = "SELECT DEVICES.name, DEVICES.inventory, DEVICES.purchase, DEVICES.serial, DEVICES.lastcheck, " & _
             "DEVICES.nextcheck, DEVICES.nocalibration, DEVICES.internalcheck, DEVICES.nocheck, DEVICES.internalcal, " & _
             "DEVICES.checkcycle, DEVICES.checkdone, DEVICES.maintenance, DEVICES.remark, DEVICETYPNAME.name, MANUFACTURER.name, " & _
             "PLACE.name FROM PLACE INNER JOIN (MANUFACTURER INNER JOIN (DEVICETYPNAME INNER JOIN DEVICES ON " & _
             "DEVICETYPNAME.id = DEVICES.devtyp) ON MANUFACTURER.manid = DEVICES.manid) " & _
             "ON PLACE.placeid = DEVICES.placeid WHERE (((Place.name)= '" & Me![ComboPlace] & "'));"
    Me.RecordSource = StrSql
Qry_Neu:
    On Error GoTo Qry_Err
    db.CreateQueryDef "qryName", StrSql
    Exit Sub
Qry_Err:
    db.QueryDefs.Delete "qryName"
    GoTo Qry_Neu
End Sub


(danke an elBobele :) )


jetzt hast du eine Abfrage mit dem Namen qryName
auf deren Basis du einen Bericht generieren kannst der deinen Ansprüchen genügt !
Den kannst du dann immer aktuell aus dem Formular ausdrucken .

Der Name der Abfrage muß natürlich immer der gleiche sein !

Feedback wäre nett !!

Greetings ;-)


Antwort 9 von BenztownCitizen

Danke erstmal !

Da ich erst seit zwei Wochen VBA + Acces mache, aber schon länger C++ mache leuchtet mir obige Syntax schon ein, nur wie "create" ich jetzt einen Report auf Basis der in qryName gespeicherten Abfrage ?

Gruß

Antwort 10 von Coolpix

hallo nochmal,

das war eigentlich so gedacht, daß du im Datenbankfenster einen Bericht anlegst...
so richtig von Hand zu Fuss ...(Oder per Assistent)
der hat als Datenbasis die Abfrage qryName...
und wenn die Datensätze in der Datenbasis sich ändern , ändert sich auch der Inhalt des Berichtes.

also EIN fixer Bericht und EINE variable Abfrage.

Greetings ;-)

Antwort 11 von Armin

... ähm, vielleicht noch einmal der hinweis auf das "DoCmd.RunCommand acCmdSaveAsReport" .

access erzeugt hier wirklich einen kompletten report mit allen ?! feldern und den daten aus deinem form.

... war selber erstaunt. armin


Antwort 12 von Coolpix

@ Armin,

ich habe ein Beispielformular mit Unterformular.
und da meint ACCESS:

"Der Befehl oder die Funktion 'AlsBerichtSpeichern' steht momentan nicht zur Verfügung"

also funktioniert's nicht immer ??

hast du 'ne Ahnung warum ?


Greetings ;-)

Antwort 13 von BenztownCitizen

Hallo !

Also die Methode mit der abgespeicherten Abfrage ist echt super, weil man auch nach dem Schließen darauf zugreifen kann.

Jetzt habe ich in mühevoller Kleinarbeit ein Formular erstellt, funktioniert aber super.

Nun brauche ich nur noch einen schicken Printdialog wenn ich die Drucken- Taste klicke, aber das dürfte wohl kein Problem sein.

Vielen Dank für eure Hilfe, jetzt weiß ich ja wo ich fragen kann. *g*


Thankx a lot.

Sam

Antwort 14 von Armin

@Coolpix,

... ging mir auch so, daher habe ich einfach zunächst das formular (das ich als bericht ausgeben will) mit dem docmd.close geschlossen, da aber der vba code noch läuft, kann ich trotzdem mein kommando noch absetzen (siehe meinen beitrag oben.

gruesse armin

Antwort 15 von Coolpix

@Armin,
danke für die Info.
Manchmal sind es die Kleinigkeiten...

@Sam,
im Klickereignis deines Druck-Buttons:


Private Sub cmdPrintBericht_Click()
'alles mit # ist automatisch vom Assistenten erstellt

'Abfrage ob gedruckt werden soll oder nicht
    Select Case MsgBox("Soll der Bericht gedruckt werden ?", vbOKCancel + 0, "Drucken ?")
        Case vbOK
            GoTo OK
        Case vbCancel

    End Select

    Exit Sub

OK:
    On Error GoTo Err_Befehl7_Click    '#

    Dim stDocName As String    '#

    stDocName = "DeinBericht"    '#
    DoCmd.OpenReport stDocName, acNormal    '#
    ' Erfolgsmeldung
    MsgBox "Ausdruck von Bericht " & stDocName & " ausgeführt!"
Exit_Befehl7_Click:        '#
    Exit Sub    '#

Err_Befehl7_Click:        '#
    MsgBox Err.Description    '#
    Resume Exit_Befehl7_Click    '#
End Sub


einzig die Variable stDocName ist auf deinen Berichtsnamen anzupassen!

Greetings ;-)


Antwort 16 von Coolpix

@Armin
hab's grad' nochmal gecheckt...
keine Schlechte Sache das ! :)
is aber stark vom Aufbau des Formulars abhängig.
sieht bei 'nem Endlosfornular bestimmt gut aus !

Danke nochmal !

Antwort 17 von BenztownCitizen

Hallo !

@Coolpix

Das mit dem Print- Dialog währe ja gar nicht nötig gewesen, will doch auch noch was selber an meiner Technikerarbeit machen machen :-)

Ne, Spass, vielen Dank für Deine Hilfe, wird wahrscheinlich nicht das letzte mal gewesen sein, dass ich sie benötige.

(Thema der Arbeit: Wandeln von Exceltabellen in eine Datenbank mit komfortabler + ******sicherer Oberfläche auf VBA- Basis, für die Datenpflege).


Gruß

Sam

P.S.: In diesem Forum wird alles gegen Kraftausdrücke getan, deswegen die Sterne, ich wollte schreiben
 I*diotensicherer 
, aber da hat er mir einen Smilie darus gemacht...ausgetrickst :-)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: