collapse

* Benutzer Info

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

* Wer ist Online

  • Punkt Gäste: 84
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13972
  • stats Beiträge insgesamt: 66528
  • stats Themen insgesamt: 8970
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Automatisieren: import von Text einer Outlookmail in eine Access-Tabelle  (Gelesen 195 mal)

Offline Beate1953

  • Access-Profi
  • **
  • Beiträge: 250
Hallo,
dank des neuen Datenschutzgesetzes habe ich nun folgendes Problem: Bei Verletzungen soll der Mitarbeiter eine Email mit vorgegebenen Tabellenfeldern ausfüllen mit Daten wie "Verletzungsart", "Datum", Stunde", "Art der Erste-Hilfe-Maßnahme", "Erste-Hilfe-Leistender" und "Zeuge". Diese Daten sollen dann automatisch in eine Access-Tabelle übernommen werden, auf die nur eine Person Zugriff hat.

Ich hoffe, dass Ihr mir helfen könnt.

Vielen Dank im Voraus

Beate1953
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Hallo,

was hat das mit der DSGVO zu tun?


Ansonsten: WO liegt das Problem denn genau?

Lies aus der  Email die "TO"-Email-Adresse aus und suche die zugeordnete Mitarbeiter-ID.  Lies aus dem Email-Body die Werte zu den einzelnen Tabellenspalten(namen) aus und füge das Ganze mittels Recordset oder Insert-Abfrage an eine Tabelle an.


Offline Beate1953

  • Access-Profi
  • **
  • Beiträge: 250
Hallo,
ich habe eine Outlook-Vorlage mit den folgenden festen Einträgen:

Name des Verletzten:
Art der Verletzung:
Datum der Verletzung:
etc.

Die verschiedenen User tragen dann rechts von den Doppelpunkten den jeweiligen Text ein. Dann wird die Email an den Account Verbandbuch@firma.de gesendet.

Der Administrator hat eine Access-DB mit einer Tabelle "Daten" mit den entsprechenden Feldern. Außerdem enthält die DB auch ein Formular mit einem Button "Eintragen" und einem Datumsfeld "LetzterEintrag", das das Datum des Vortages der letzten Eintragung enthält. Beim Betätigen des Buttons "Eintragen" soll Access von allen Emails die nach dem in "LetzterEintrag" enthaltenen Datum bis einschließlich des Vortages des aktuellen Datums (Gestern) eingegangen sind, die eingetragenen Daten aus den Bodys auslesen und in die entsprechenden Felder der Tabelle  eintragen. Dann soll das Datum des gestrigen Tages gespeichert werden, damit es für die nächste Eintragung als Anfangsdatum zur Verfügung steht.

Ich hoffe, das macht mein Problem etwas deutlicher.

Übrigens haben wir das Verbandbuch bisher in jeder Abteilung in Form eines normalen Heftes an einem öffentlich zugänglichen Ort aufbewahrt. Nach dem neuen Datenschutzgesetz will unsere Firma nun, dass diese Daten in Zukunft nur noch einem Administrator zugänglich sein sollen. Deshalb der Versuch, das Verbandbuch nun in Form einer Access-DB zu führen.

Ich hoffe, Ihr könnt mir helfen. Bin für jeden Tipp dankbar.

Vielen Dank im Voraus

Beate1953

 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Hallo,

in das "Verbandbuch" werden also alle verletzungsbedingten Maßnahmen an den Mitarbeitern eingetragen und diese Eintragungen sollen jetzt in der Tabelle Daten stattfinden.  Ist das so richtig?

Wie auch immer, die Vorgehensweise hab ich schon erklärt.  Für den Zugriff auf die Emails kannst Du Outlook automatisieren und aus dem Body der eingegangenen Mail die aktuellen Daten auslesen und in die Tabelle einfügen. Die Zuordnung der Email-Adresse zur MAID ist ebenfalls für die Speicherung als Fremdschlüssel erforderlich..


Beispiel-Links:

http://www.access-basics.de/index.php/Outlook-E-Mails_importieren.html

https://www.rholtz-office.de/outlook/email_auslesen_teil1 

Dieser Link bezieht sicht zwar auf Excel, zeigt aber trotzdem die Vorgensweise

Offline Beate1953

  • Access-Profi
  • **
  • Beiträge: 250
Hallo,
ich habe nun versucht aus den Links, die du mir geschickt hast, einen Code zu bauen (siehe unten) - von dem ich allerdings nicht mal die Hälfte verstehe.

Erstaunlicherweise läuft das Programm auch ohne Fehlermeldung durch. Zeigt für strInhalt allerdings nichts an. Allerdings wird in der Tabelle "Daten" bei jedem Durchlauf ein neuer, leerer Datensatz eingespeichert.

Nun meine Fragen: Wie kriege ich den Body der Mail in die Variable strInhalt - was muss ich da abändern? Wie kann ich die Variable strInhalt so zerlegen, dass ich die Einträge des Users in die Tabelle "Daten" bekomme? Im Body steht z.B.
Name des Verletzten: Peter Meier
Gruppe des Verletzten: Küche
Art der Verletzung: Schnittverletzung
etc. Was muss ich machen, dass ich nur die Einträge nach den Doppelpunkten bekomme? Ideal wäre, wenn ich eine Tabelle mit zwei Spalten in die Outlook-Vorlage einfügen könnte und der User füllt die zweite Spalte aus. Aber auch hier wieder die Frage, wie ich diese Eingaben in meine Tabellenfelder bekomme.




Option Explicit

Private Sub Eintragen_Click()
'Public Sub ReadMailItems()
Dim olapp        As Object
Dim olName       As Object
Dim olHFolder    As Object
Dim olUFolder    As Object

Dim strAttCount  As String
Dim strInhalt    As String


Dim olItemsCount As Long
Dim lngAttCount  As Long
Dim letzteZeile  As Long
Dim db As DAO.Database, rs As DAO.Recordset

On Error Resume Next

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Daten")
Set olapp = CreateObject("Outlook.Application")
Set olName = olapp.GetNamespace("MAPI")
Set olHFolder = olName.Session.Folders("RMH Software") ' Kontoname
Set olUFolder = olHFolder.Folders("Posteingang/Verbandbuch") 'Ordnername



   For olItemsCount = 1 To olUFolder.Items.Count
       With olUFolder.Items.Item(olItemsCount)
       
       
         strInhalt = .Body
         MsgBox ("Inhalt= " & strInhalt)
        'Zerlegen von strInhalt in die einzelnen Feldinhalte
       
     
         rs.AddNew
         'rs.Fields("NameVerletzter") =
         'rs.Fields("GruppeVerletzter") =
         'rs.Fields("ArtVerletzung") =
         'rs.Fields("DatumVerletzung") =
         'rs.Fields("ZeitVerletzung") =
         'rs.Fields("ArtMassnahme") =
         'rs.Fields("EHLeistende") =
         'rs.Fields("Zeugen") =
         rs.Fields("Erhalten") = .ReceivedTime
         rs.Fields("Von") = .ReplyRecipientNames
         rs.Update
                 
               
       End With
   Next olItemsCount
   
On Error GoTo 0

End Sub

Vielen Dank für deine Geduld und viele Grüße

Beate1953
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Hallo,

ist doch normal, dass ein leerer DS angefügt wird.  Du schreibst ja keine Werte in die Felder...




Set olHFolder = olName.Session.Folders("RMH Software") ' Kontoname
Set olUFolder = olHFolder.Folders("Posteingang/Verbandbuch") 'Ordnername


Stimmt die Struktur denn so? Ist "Posteingang/Verbandbuch"  tatsächlich ein Ordner direkt im Kontoname(ordner)?

Oder Ist es eher so:

Zitat
RMH Software
  Posteingang
      Verbandbuch
  Postausgang
.
.


in der Outlook-Kontoordnerliste....



Benutz z. B. diese Funktion:

Public Function ExtractValues(strBody As String, strPart As String) As String
    Dim intPosStart As Long, intPosEnde As Long, strText As String, intLenPart As Long, intLenText As Long

   On Error GoTo ExtractValues_Error

    intLenPart = Len(strPart)
    intPosStart = InStr(1, strBody, strPart) + intLenPart + 1

    If intPosStart > 0 Then
        intPosEnde = InStr(intPosStart, strBody, Chr(13))
        If intPosEnde > 0 Then
            intLenText = intPosEnde - intPosStart
            strText = Trim(Mid(strBody, intPosStart, intLenText))
        Else
            strText = Trim(Mid(strBody, intPosStart))
        End If
    End If

    ExtractValues = strText

   On Error GoTo 0
   Exit Function

ExtractValues_Error:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure ExtractValues of Modul Modul1"
End Function


Und ruf die so auf:


         rs.Fields("NameVerletzter") = ExtractValues(strBody, "NameVerletzter")     ' bzw. Name der Bezeichnung in der Mail
         rs.Fields("GruppeVerletzter") =ExtractValues(strBody , "GruppeVerletzter")
         rs.Fields("ArtVerletzung") =               usw...…..
         rs.Fields("DatumVerletzung") =              …..    Vorsicht hier, je nachdem das Tabellenfeld von Datentyp Datum/Uhrzeit oder TEXT ist
         rs.Fields("ZeitVerletzung") =              …..             dito
         rs.Fields("ArtMassnahme") =              …..
         rs.Fields("EHLeistende") =              …..
         rs.Fields("Zeugen") =              …..
         rs.Fields("Erhalten") = .ReceivedTime
         rs.Fields("Von") = .ReplyRecipientNames          ' evtl.  .SenderEmailAddress

BTW:  OPTION EXPLICIT    in jeden Modulkopf platzieren!

Offline Beate1953

  • Access-Profi
  • **
  • Beiträge: 250
Hallo,

in meinem Outlook steht links erst meine Emailadresse, darunter der Ordner Posteingang und darunter der UnterOrdner Verbandbuch.

beate.....@gmx.de
Posteingang
    Verbandbuch
Postausgang

Was es mit RMH Software auf sich hat weiß ich nicht. Gehört das da nicht hinein?

Ich habe Schwierigkeiten den Body der Mail in strBody zu bekommen. Bei mir ist strBody immer leer.

Stimmt folgendes?

Set olHFolder = olName.Session.Folders("RMH Software") ' Kontoname
Set olUFolder = olHFolder.Folders("Posteingang") 'Ordnername

   For olItemsCount = 1 To olUFolder.Items.Count
       With olUFolder.Items.Item(olItemsCount)
             
        strBody = .Body
         MsgBox ("strBody= " & strBody)
     
Die MsgBox zeigt nur "strBody=        " an   

Wo liegt der Fehler?

Entschuldige bitte meine Begriffsstutzigkeit, aber ich stehe völlig auf dem Schlauch.

Viele Grüße
Beate1953     
             
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Hallo,


es stimmt die Folder-Bestimmung nicht.


Set olHFolder = olName.GetFolder("Beate....@gmx.de") ' Kontoname(Postfachname)
Set olUFolder = olHFolder.Folders("Posteingang").Folders ("Verbandbuch")   'Ordnername(n)



So sieht es bei mir aus:
.
.
.
On Error Resume Next

 Set olApp = GetObject("", "Outlook.Application")
   If olApp Is Nothing Then
     Set olApp = CreateObject("Outlook.Application")
      blnNewInst = True
   End If

On Error GoTo OpenOl_Error


Set objInbox = olApp.GetNamespace("Mapi").Folders("beate….@gmx.de") 
Set objInbox = objInbox.Folders("Posteingang").Folders("Verband")
Set objProcessedFolder = objInbox.Folders("Processed")  'Zusätzlicher Unterordner, in den bearbeitete Mail verschoben werden.

 For lngManz = objInbox.Items.Count To 1 Step -1
 Set objMail = objInbox.Items(lngManz)
    If objMail.UnRead = True Then

            AnalyseMail objMail

        objMail.UnRead = False
        objMail.Move objProcessedFolder
    End If

Next
.
.
.