collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 58
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13810
  • stats Beiträge insgesamt: 64294
  • stats Themen insgesamt: 8693
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Bericht beim ersten öffnen in der Woche automatisch versenden  (Gelesen 5506 mal)

Savarol

  • Gast
Hallo Leute,

ich habe in einer Datenbank (2007) einen Bericht und der soll beim ersten Öffnen der Datenbank in der Woche den Bericht automatisch verschicken. Ich habe, glaube ich, die Logik, kann das aber in VBA nicht umsetzen:

aktWoche=KW(Datum())
wenn aktWoche <> Woche
schicke Bericht
Woche=aktWoche

Das in ein Modul reinpacken und dann in ein Autoexec-Makro müsste funktionieren. Lieg ich da richtig? Kann mir das jemand in VBA übersetzen?

Danke
cu Savarol
 

Offline database

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 4178
Re: Bericht beim ersten öffnen in der Woche automatisch versenden
« Antwort #1 am: Mai 20, 2010, 17:02:42 »
Hallo,

nun, ich denke du benötigst hierfür natürlich auch ein Werkzeug um Access mitzuteilen, dass der besagte Bericht bereits gesendet wurde!
M.E. ist es am Einfachsten eine lokale Tabelle zu führen in der die KW (kalenderwoche, Zahl, byte)  mit einem Kennzeichen (sendekennzeichen, ja/nein, Standard 0) eingetragen sind.
Die Tabelle wird am Jahresende, nachdem der Bericht der letzten Kalenderwoche gesendet wurde per Aktualisierungsabfrage wieder zurückgesetzt.

Für die Bearbeitung kannst du das Autoexec-Makro zwar verwenden, wenn die Möglichkeit aber gegeben ist, würde ich eher die saubere VBA-Variante nehmen.
Dazu kannst du das Ereignis 'Beim Laden' eines ev. Startformulars verwenden um auf eine Public Sub in einem Standardmodul zu verweisen.

Public Sub Wochenbericht()

Dim kw As Byte

kw = DatePart("ww", Date)

'Überprüfung ob für die aktuelle KW schon gesendet wurde
If DLookup("kalenderwoche", "DeineTabelle", "kalenderwoche=" & kw & " AND sendekennzeichen=0") Then

    'könnte so gehen...
    DoCmd.SendObject acReport, "DeinBericht", "SnapshotFormat(*.snp)", _
                                "empfaenger@mailserver.de", "", "", "Wochenbericht" & " " & " " & Now, _
                                "Guten Morgen und eine angenehme Arbeitswoche," & vbCrLf & vbCrLf & _
                                "anbei erhalten Sie den akuellen Wochenbericht ... blabla " & vbCrLf & vbCrLf, False, """"

    'Die Tabelle aktualisieren damit der Bericht kein weiteres Mal gesendet wird
    DoCmd.RunSQL ("UPDATE DeineTabelle SET sendekennzeichen = -1 WHERE kalenderwoche=" & kw)

End If

End Sub

UNGETESTET!

Ich denke, für das Versenden von Berichten gibts vielleicht noch andere Methoden, Google weiß da sicher mehr darüber.

HTH
Peter
Viele Grüße
Peter

Tipps und Links:
---------------------------------------------------------
1. http://www.donkarl.com
2. http://www.access-entwicklerbuch.de/2007/index.php?page=buch
3. http://www.xlam.ch/pos/rules.htm
3.a Reservierte Worte
4. http://www.functionx.com/vbaccess/index.htm
5. http://www.dbwiki.net

Nicht vergessen: Jede(r) hat mal klein angefangen!
Bitte keine Fragen per PN senden - Fragen gehören ins Forum!
 

Savarol

  • Gast
Re: Bericht beim ersten öffnen in der Woche automatisch versenden
« Antwort #2 am: Mai 21, 2010, 11:18:04 »
Hai Peter,

danke für deine schnelle Hilfe. Ich hab es jetzt mal über eine Funktion versucht und mit dem AutoExec-Makro. Es funktioniert zwar, aber bei jedem öffnen der Datenbank. Was mach ich falsch? Leider sind meine VBA-Kenntnisse eigentlich keine Kenntnisse.

Public Function Wochenbericht()

Dim kw As Byte
Dim i As Byte
Dim stDocName As String

kw = DatePart("ww", Date)
stDocName = "Bericht"

'Überprüfung ob für die aktuelle KW schon gesendet wurde
If kw <> i Then
    DoCmd.SendObject acReport, stDocName, "pdf", "Verteiler;", , , "Betreff"
End If

i = kw

End Function

Vielleicht kannst du mir weiterhelfen. Also momentan haben kw und i den Wert 21, dann sollte doch nichts passieren?

Danke
Savarol
 

Offline database

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 4178
Re: Bericht beim ersten öffnen in der Woche automatisch versenden
« Antwort #3 am: Mai 21, 2010, 18:02:52 »
Hallo, grüß dich,

Zitat
aber bei jedem öffnen der Datenbank. Was mach ich falsch?

Tja wie ich in meiner ersten Antwort angemerkt habe, musst du Access ja mitteilen, dass der Bericht schon einmal gesendet wurde!
Zitat
M.E. ist es am Einfachsten eine lokale Tabelle zu führen in der die KW (kalenderwoche, Zahl, byte)  mit einem Kennzeichen (sendekennzeichen, ja/nein, Standard 0) eingetragen sind.
Das alleinige setzen einer Variablen genügt da nicht, das dieser Wert nach dem Schließen des Formulars - oder wenn es sich um eine globale Variable handelt, die in einem Modul deklariert wurde - nach dem Beenden der Applikation nicht mehr verfügbar ist.
Du mußt die Information über das Versenden des Berichts also DAUERHAFT speichern.

Also mach folgendes:
Im Backend - oder wenn du keine Aufteilung hast in der aktuellen Datei - erzeugst du eine Tabelle Namens Wochenberichte.
Ergzeuge 2 Felder für die Kalenderwoche (kalenderwoche, Zahl, byte)  und für das Sendekennzeichen (sendekennzeichen, ja/nein, Standardwert 0)
Nun trage ins Feld Kalenderwoche einfach die Zahlen der Wochen ein von 1 - 53, die Chekboxen (sendekennzeichen) sollen durch Stadardwert 0 weiß bleiben.

Dann verwendest du bitte den folgenden Code:

Public Function Wochenbericht()

    Dim kw As Byte
    Dim stDocName As String

    'Überprüfung ob für die aktuelle KW schon gesendet wurde, dazu wird in der Tabelle nachgesehen
    If DLookup("kalenderwoche", "Wochenberichte", "kalenderwoche=" & kw & " AND sendekennzeichen=0") Then
        kw = DatePart("ww", Date)
        stDocName = "Bericht"
        DoCmd.SendObject acReport, stDocName, "pdf", "Verteiler;", , , "Betreff"
        'Der Datenbank bekann geben, dass der Bericht gesendet wurde
        DoCmd.RunSQL ("UPDATE DeineTabelle SET sendekennzeichen = -1 WHERE kalenderwoche=" & kw)
    End If

End Function


Somit wird in der Bedingung (If) geprüft ob für die KW - in deinem Fall 21 - das sendekennzeichen auf Nein (Häkchen NICHT gesetzt) steht.
Ist diese Bedingung erfüllt, ergibt die Prüfung TRUE und der Bericht wird verschickt, nach dem Senden wird das Häkchen für die KW 21 in der Tabelle gesetzt um das Versenden des Berichts DAUERHAFT zu vermerken.
Beim nächsten Öffnen der Datei...
...ergibt die Prüfung, dass das Häkchen gestetz wurde, - die Bedingung ergibt als Prüfergebnis FALSE - es wird ans Ende (End If) gesprungen und es passiert nichts.
Alles angekommen? :)

HTH
Peter
« Letzte Änderung: Mai 21, 2010, 18:04:53 von database »
Viele Grüße
Peter

Tipps und Links:
---------------------------------------------------------
1. http://www.donkarl.com
2. http://www.access-entwicklerbuch.de/2007/index.php?page=buch
3. http://www.xlam.ch/pos/rules.htm
3.a Reservierte Worte
4. http://www.functionx.com/vbaccess/index.htm
5. http://www.dbwiki.net

Nicht vergessen: Jede(r) hat mal klein angefangen!
Bitte keine Fragen per PN senden - Fragen gehören ins Forum!