Neuigkeiten:

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

Mobiles Hauptmenü

Bericht(e) senden, Empfänger kommen aus einer Tabelle

Begonnen von Lalikowski, September 22, 2018, 13:43:12

⏪ vorheriges - nächstes ⏩

Lalikowski

Hallo zusammen,

ich muss tgl. mehrere Berichte an unterschiedliche Empfänger versenden.

Bei den Berichten handelt es sich eigentlich nur um einen Bericht, allerdings mit empfängerbezogenen Daten.
Die Basis für den Bericht bildet eine Abfrage, so dass auch diese wissen muss welche Abfrage zu welcher Mailadresse gehört.
Abfragekrieterium und Mailadressen werden in einer Tabelle gepflegt.

Mein Ziel ist es nun, das alle Berichte mit den jeweiligen Daten nacheinander an den richtigen Empfänger geht.

Könnt Ihr mir mit einem entsprechenden VBA-Code helfen?

Lieben Dank im Vorraus

Andreas

Beaker s.a.

Hallo Andreas,
ZitatDie Basis für den Bericht bildet eine Abfrage, so dass auch diese wissen muss welche Abfrage zu welcher Mailadresse gehört.
Nicht ganz klar, eine und welche widersprechen sich.
Vorgehensweise, die mir einfällt
- Recordset mit den Empfängern öffnen
- in einer Schleife durch dieses RS den Bericht mit Kriterium öffnen und versenden.
gruss ekkehard

P.S. Vielleicht lädst du eine kleine Beispiel-DB mit ein paar Spieldaten hier hoch.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lalikowski

Hallo Ekkehard,

im Anhang habe ich Dir einmal eine kleine DB erstellt.

Ich hoffe, dass diese verständlich ist.....

Liebe Grüße

Andreas

Beaker s.a.

Hallo Andreas,
Sorry, aber so wird das nichts; - keine Schlüssel, keine Beziehungen ...
Da habe keine Lust dazu.
Beschäftige dich erstmal ein wenig mit den Grundlagen der Datenbankerstellung.
Gute Links findest du z.B. beim Forumsmitglied MzKlMu.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lalikowski

Hallo Ekkehard,

es handelte sich hierbei ja auch nur um ein Beispiel, um zu verdeutlichen, was ich eigentlich meinte.

Die "echte" DB ist zu groß, um sie Euch zur Verfügung zu stellen.

Schade... :'( :'(

Wünsche allen einen erfolgreichen Wochenstart

Andreas

MzKlMu

Hallo,
Zitates handelte sich hierbei ja auch nur um ein Beispiel,
gerade in einem Beispiel sollte man Beziehungen und alle Schlüsselfelder anlegen. Dann hat der Helfende sehr schnell einen Überblick.
Hole das nach, lade die DB noch mal hoch und Du wirst hier geholfen.  ;D
Gruß Klaus

Beaker s.a.

Hallo Andreas,
ZitatDie "echte" DB ist zu groß
Wenn die genauso aussieht wie das Beispiel, solltest du allerdings zunächst
mal ein Bild des Beziehungsfensters posten, und ein paar Erläuterungen zum
Zweck der DB geben. Denn ich befürchte, dass da noch so Einiges im Argen liegt.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

Eine mögliche Gestaltung wäre:'Dein VBA Formular-Modul mit dem Knopf

Option Compare Database
Option Explicit

#If 0 Then
SQL-Abfragetext von qry_QR:
-------------------------------------------------------------------------------
SELECT d.Datum,
       p.Name,
       d.Tour,
       d.Stopps,
       d.Collis,
       d.Partner
FROM   tbl_Partner AS p
       INNER JOIN tbl_Daten AS d
               ON p.Partner_ID = d.Partner
WHERE  d.Datum = [Forms]![frm_senden]![Datum];
-------------------------------------------------------------------------------

SQL-Abfragetext von spPartnerIdMailByDate:
-------------------------------------------------------------------------------
SELECT p.Partner_ID,
       p.Mail
FROM   tbl_Partner AS p
       INNER JOIN tbl_Daten AS d
               ON p.Partner_ID = d.Partner
WHERE  d.Datum=[@Datum];
-------------------------------------------------------------------------------

#End If

#Const AsMail = False  'auf True zum Mailversand sezten

Private Sub Befehl2_Click()
   Const QRY As String = "spPartnerIdMailByDate"

   Dim ReportFilter As String

   'nur wenn ein gültiges Datum vorliegt
   If IsDate(Me.Datum) Then
      'der Parameterabfrage
      With CurrentDb.QueryDefs(QRY)
          'das Datum zuweisen
         .Parameters("@Datum") = Me.Datum
         'ein Recordset öffnen
         With .OpenRecordset(dbOpenSnapshot, dbForwardOnly)
            'bis zum Ende des Recordsets
            Do Until .EOF
               'Filterausdruck zum Öffnen des Berichts erstellen
               ReportFilter = BuildCriteria("Partner", dbLong, !Partner_ID)
               'Bericht versteckt in der Vorschau öffnen
               DoCmd.OpenReport "rpt_QR", acViewPreview, , ReportFilter, acHidden

#If AsMail Then
               'Email erstellen und senden
               'der Bericht wird hier als RTF exportiert
               'ab Access 2007 kann acFormatPDF verwendet werden
               'Betreff(Subject) und Text der Email anpassen.
               'AFAIKsind 255 Zeichen erlaubt- müsstest Du testen.
               DoCmd.SendObject acReport, "rpt_QR", acFormatRTF, !Mail, , , _
                                "Touren am " & Me.Datum, _
                                "Hallo," & vbLf & vbLf & vbLf & _
                                "Du bist für folgende Touren eingeteilt:"
#Else
               'oder
               '
               'Export in einen Ordner
               DoCmd.OutputTo acOutputReport, "rpt_QR", acFormatRTF, _
                              "c:\temp\" & Format$(Me.Datum, "yyyymmdd_") & _
                              !Partner_ID & ".rtf"
               'hier könnte man Outlook oder CDO für den Versand automatiersen
               'oder ein Programm wie blat.exe den Versand durchführen lassen.
#End If
               'Vorschau schließen
               DoCmd.Close acReport, "rpt_QR", acSaveNo
               'zumnächsten Datensatz (Partner für ein gewähltes Datum)
               .MoveNext
            Loop
            'Recordset schließen
            .Close
         End With
      End With
   End If
End Sub
Grüße von der (⌒▽⌒)

Lalikowski

Hallo Lachtaube,

ganz, ganz lieben Dank für den code.

Sobald ich ihn testen konnte melde ich mich wieder.

Möchte dennoch die Beispiel-DB nochmals hochladen. Habe die Beziehung und Schlüssel nachgetragen.

Liebe Grüße

Andreas

Lalikowski

Hallo Lachtaube,

Erst nochmals vielen Dank für den Code, doch leider komme ich damit nicht klar.
Bin auch blutiger Anfänger..... :-[ :-[

Sowie ich SELECT eingebe, kommt die Fehlermeldung, das case benötigt wird.....

Darf ich Dich vielleicht bitten, dir die tatsächliche DB noch einmal anzuschauen und mir eine mögliche Lösung schicken.

Ganz, ganz lieben Dank im Voraus

Andreas

Lachtaube

Hi Andreas,

oben nach #If 0 Then stehen als Freitextkommentare jeweils Abfragetexte (kein VBA-Code), die in der SQL-Ansicht einer gespeicherten Abfrage so einzutragen sind. Erst hinter #End If wird der VBA-Code ausgewertet.
Grüße von der (⌒▽⌒)

Lalikowski

Hallo Lauchtaube,

kaum macht man es richtig, funktioniert es, doch leider noch nicht ganz perfekt.

Der Bericht im Mail passt nicht zu dem jeweiligen Partner.

Es kommt mir so vor, als wenn der erste Bericht an den ersten Partner in der Tabelle geht. Das ist aber nur eine Vermutung eines Laien...

Kannst Du dir das bitte nochmals anschauen.

Ganz lieben Dank im Voraus

Andreas

Lachtaube

Nun Andreas, aus der Ferne kann ich nichts zu den falschen Email-Zuordnungen sagen - an der Logik scheint es nicht zu liegen.

PS: Datenbankanhänge hier möglichst nur als Archiv hochladen und die Datenmenge darin auf vernünftige Dimensionen reduzieren und Daten ggf. anonymisieren.
Grüße von der (⌒▽⌒)

Lalikowski

Guten Morgen Lachtaube,

habe es nun nochmals getestet.
Es scheint noch mehr nicht zu stimmen.

1. Es wird ein Gesamtreport, mit allen Partnern, generiert.
2. Dieser Report geht per Mail immer nur an Partner_1

Liebe Grüße

Andreas

Lachtaube

a) schließt Du den Bericht nicht nach jedem Senden.
b) gehst Du im Recordset nicht zum nächsten Datensatz
Das ergibt dann eine Endlosschleife mit immer denselben Daten.
Grüße von der (⌒▽⌒)