Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Bericht von per Checkbox ausgewählten Datensätzen erstellen

Begonnen von Frager123, Oktober 19, 2010, 07:38:07

⏪ vorheriges - nächstes ⏩

Frager123

Moin!
Ich habe eine Tabelle "tbl_Projekte", die unteranderem ein True/False Feld enthält.
Ein Formular zeigt mir eine Liste aller Projekte, bei jedem Projekt kann ich einen Haken setzen/entfernen. (Checkbox)
Ich möchte nun einzelne Berichte für die Projekte erstellen, die in der Liste angehakt sind. Jeweils ein einzelner Bericht soll dann an eine E-Mail angehängt werden. Der Bericht ist soweit vorbereitet, dass durch die Übergabe der Projektnummer an den Bericht auch nur ein Bericht zu dem Projekt erstellt wird.
Nur die Projekte auszuwählen, die einen Haken haben, habe ich auch shcon geschafft. Leider habe ich aber Probleme mit der Übergabe der einzelnen Projektnummern von den angehakten Projekten.
Im Code könnt Ihr bei "Hilfe" sehen, wo ich leider nicht weiter weiss.
Vielen Dank für Eure Hilfe!

---
Private Sub Befehl29_Click()
Dim tbl_Projekte As Recordset
Dim stDocName As String
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim Kriterium As String

Set db = CurrentDb
Set rs = CurrentDb.OpenRecordset("Select Projektnummer From tbl_Projekte Where aktiv = True", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
stDocName = "rpt_Cockpit"
Kriterium = "[Projektnummer]=" HILFE
DoCmd.OpenReport stDocName, acViewPreview, , Kriterium
DoCmd.SendObject acReport, stDocName, acFormatPDF, _
"Empfängeradresse", "", "", "MeinBetreff", _
"Meine Standartnachricht.", True, ""

DoCmd.Close acReport, stDocName
rs.MoveNext
Loop

End Sub
---

database

Hallo, guten Morgen,

ZitatKriterium = "[Projektnummer]=" HILFE

...versuch mal mit Kriterium = rs!Projektnummer

Um ein Feld aus einem Recordset auszulesen musst du auf dessen Auflistung (rs!) zugreifen und den namen des auszulesenden Feldes bekanntgeben.  ;)

HTH

Peter

Frager123

Hi Peter,
danke für Deine Antwort.
Wenn ich Deinen Vorschlag umsetze passiert folgendes:
(2 Projekte in der Liste sind anghakt)

Es werden 2 E-Mails geöffnet (Anzahl der E-Mails stimmt), an die E-Mails wird jedoch der komplette Bericht (über alle Projekte angehängt).

Es fehlt also noch die Übergabe von nur einer spezifischen Projektnummer.


DF6GL

Hallo,


so:

Kriterium = "[Projektnummer]=" & rs!Projektnummer      'falls Projektnummer den Datentyp Zahl,long in der Tabelle hat

Kriterium = "[Projektnummer]='" & rs!Projektnummer   & "'"     'falls Projektnummer den Datentyp Text in der Tabelle hat


Mit Deinem Code ginge auch:
Kriterium = "[Projektnummer]=" & rs(0)

bzw.:
Kriterium = "[Projektnummer]='" & rs(0) & "'"


weiterhin:


.
.
Dim tbl_Projekte As Recordset   'überflüssig/falsch
.
Set rs = db.OpenRecordset("Select Projektnummer From tbl_Projekte Where aktiv = True", dbOpenSnapShot)
If rs.Recordcount > 0 Then   'hinzu
.
.
.
Loop
End If   'hinzu
rs.Close
set rs =Nothing
 
End Sub



Zusätzliches Errorhandling wäre auch nicht verkehrt.

Frager123

Hallo Franz,
Vielen Dank! Es funktioniert :)
---
Kriterium = "[Projektnummer]='" & rs!Projektnummer   & "'"
---
Hat die Lösung gebracht.
Habe auch diese Zeilen eingefügt/verändert:

---
Set rs = db.OpenRecordset("Select Projektnummer From tbl_Projekte Where aktiv = True", dbOpenSnapShot)
If rs.Recordcount > 0 Then   'hinzu
.
Loop
End If   'hinzu
rs.Close
set rs =Nothing
---

Ich habe dadurhc bei der Ausführung keine Veränderung bemerkt. Könnt Ihr mir kurz beschreiben, was die Zeilen bezwecken?

Danke für Eure Hilfe!

database

#5
Hallo,

If rs.Recordcount > 0 Then 

bewirkt, dass der ganze Vorgang nur dann gestartet wird, wenn dein Recordset auch Daten enthält.
Andernfalls würde die Routine in einem Fehler münden.


rs.Close
set rs =Nothing


1. Schließt das geöffnete Recordset
2. 'Zerstört' das erstellte Objekt, verwift es und gibt den dadurch belegten Speicher wieder frei.

Frager123

Super! Danke für die Erklärung.
Habt Ihr noch eine Idee für folgende Fragen:

1. Wie kann ich als E-Mailadresse automatisch die E-Mailadresse des dem Projekt zugeordenten Projektleiters eintragen?
(E-Mailadresse ist in der tbl_PL)

2. Wie ich in den Dateinamen des PDFs automatisch die Projektnummer des jeweilgen Projektes aufnehmen kann?

Vielen Dank!

Malte

DF6GL

Hallo,


1)   mittels Dlookup unter  Angabe eines geeigneten Kriteriums die Email auslesen.



2)  die Projektnummer als Openargs-Parameter bei OpenReport übergeben und im Bericht-Open-Ereignis der Berichts-Eigenschaft "Beschriftung" ("Caption") zuweisen.

Frager123

Hi,
wo finde ich das Bericht-Open-Ereignis?
Irgendwie seh ich grad den Wald...

thx


Frager123

Hi,
ich habe bei beiden Themen noch Probleme:

1. Berichtsbezeichnung - Könnt Ihr mir bei dem Code für das Bericht-Open-Ereignis helfen?

2. DLOOKUP:
Hier komme ich mit folgendem Code auch nicht zum Erfolg:
(qry_frm_Erstellung_Cockpit_PL_E-Mail: Abfrage, die das Feld "Projektnummer" und "E-Mailadresse" enthält)

---
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Select Projektnummer From tbl_Projekte Where aktiv = True", dbOpenSnapshot)
    If rs.RecordCount > 0 Then
    rs.MoveFirst
    Do Until rs.EOF
        stDocName = "rpt_Cockpit"
        EMAIL = DLookup("E-mailadresse", "qry_frm_Erstellung_Cockpit_PL_E-Mail", "[[Projektnummer]='" & rs!Projektnummer & "')"
        Kriterium = "[Projektnummer]='" & rs!Projektnummer & "'"
                DoCmd.OpenReport stDocName, acViewPreview, , Kriterium, , Kriterium
       
        DoCmd.SendObject acReport, stDocName, acFormatPDF, _
                         "EMAIL", "", "", "Projekt-Cockpit", _
                         "Meine Standartnachricht.", True, ""
                                 
        DoCmd.Close acReport, stDocName
        rs.MoveNext
---


Danke

DF6GL

Hallo,

1)  mit WAS kommst Du nicht zurecht?

Sub Report_Open(Cancel as Integer)
If not isNull(Me.Openargs) Then Me.Caption=Me.Openargs
End Sub


2)

Die Doppeleckklammer ist falsch....

Frager123


Leider geht es so auch noch nicht :(

---
EMAIL = DLookup("E-mailadresse", "qry_frm_Erstellung_Cockpit_PL_E-Mail", "[Projektnummer]='" & rs!Projektnummer & "')"
---

DF6GL

Hallo,


schon 100000 mal geraten (zugegebenermaßen nicht in diesem Thread  ;) ):

Auf Sonder- Und Leerzeichen in (Objekt-)Namen DRINGEND VERZICHTEN!!

Mindestens aber, wenn oben Genanntes schwerfällt, Eckklammern um den Namen verwenden:

EMAIL = DLookup("[E-mailadresse]", ...


sonst interpretiert das Access (eigentlich die Funktion) als :  Subtrahiere vom Wert aus Feld  "E" den Wert aus Feld "mailadresse"



Aber Vorsicht:

nicht zu verwechseln bei dem Namen der Abfrage als Literalstring als Parameter in der Sendobjekt-Methode:


DoCmd.SendObject acReport, stDocName, acFormatPDF, _
                         "EMAIL", "", "", "Projekt-Cockpit", _
                         "Meine Standartnachricht.", True, ""

Frager123