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
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.
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
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
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
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:
ZitatRMH 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 FunctionUnd 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!
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
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
.
.
.