Hallo liebe Access Gurus
Ich habe heute ein Problem mit dem Mailkörper einer in einem Formular per VBA generierten Mail.
Also, in meiner Datenbank für die Verwaltung von Testberichten soll per Knopfdruck in einem Unterformular eine E-Mail erstellt werden. In dieser Mail sollen - außer des Testberichtes als pdf als Anhang – die Stammdaten des Berichtes im Mailbody geschickt werden, also: Berichtnummer, Version, Datum, Kommentare und Material. Diese 5 Kriterien kommen aus der entsprechenden Zeile des Unterformulars.
Mit den Kriterien Berichtnummer, Version, Datum und Kommentare ist es überhaupt kein Problem. Anbei der Code:
Private Sub Befehl171_Click()
Dim myOutlApp As Object
Dim myMail As Object
Dim IDBericht As Long
Dim BerichtNummer As Long
Dim Version As Long
Dim Dateiname As String
Dim Pfad As String
Dim DateiMitPfad As String
Dim Pruefer As String
IDBericht = Me![IDBericht]
BerichtNummer = Me![BerichtNr]
Version = Me![lngLetzteVersion]
'Dateiname mit Pfad für Attachment ermitteln
Dateiname = BerichtNummer & "-" & Format(Version, "00") & ".pdf"
Pfad = CurrentProject.Path & "\Dateien\Testberichte\Letzte Versionen\"
DateiMitPfad = Pfad & Dateiname
'Mail schreiben
Set myOutlApp = CreateObject("Outlook.Application")
Set myMail = myOutlApp.CreateItem(olMailItem)
With myMail
.Subject = "Testbericht " & BerichtNummer & "-" & Format(Version, "00") & "."
.HTMLBody = "<font face=arial><font size = 2>Guten Tag,<br><br>anbei folgender Testbericht:" & "<br><br>" & _
"Daten des Berichts:<br><br>" & _
"<b>Bericht Nummer: </b>" & BerichtNummer & "<br>" & _
"<b>Version: </b>" & Format(Version, "00") & "<br>" & _
"<b>Datum: </b>" & Format(Me![Datum], "dd.mm.yyyy") & "<br>" & _
"<b>Kommentare: </b>" & Me!Kommentare & "<br>" & _
"</font>"
.Attachments.Add DateiMitPfad
.Display
End With
Set myMail = Nothing
Set myOutlApp = Nothing
End Sub
Aber mit dem Kriterium Material tue ich es mir schwer. Das Feld ,,lngMaterial" kommt ursprünglich aus einem Tabellenfeld mit Mehrfachauswahl. Wenn ich folgendes in den Code schreibe:
"<b>Material: </b>" & Me![lngMaterial] & "<br>" & _
meckert das System: ,,Laufzeitfehler '13': Typen unverträglich".
Um das Problem erstmal zu verstehen, habe ich versucht den Wert des Felds lngMaterial in einem Testfeld des Hauptformulars zu speichern. Dafür habe ich einen Knopf programmiert mit dem code ,,Forms!MeinHauptformular!MeinTestfeld = Me!lngMaterial." Nach Knopfdruck sieht man im Testfeld des Hauptformular einen Wert wie ,,1; 3; 5". Das heißt, vermute ich mal, dass im Feld die Materialen mit ID 1, 3 und 5 gespeichert sind.
Dann habe ich versucht, den Wert von ,,lngMaterial" in einer Stringvariable ,,strMaterial" zu speichern, also mit dem Code ,,strMaterial = Me!lngMaterial". Geht aber nicht. Ich dachte, wenn ich den Wert von lngMaterial in einer strVariable speichern kann, kann ich diesen String irgendwie zerlegen und die zerlegten Nummern in eine Tabelle speichern, und mittels Abfrage mit der Tabelle tblMaterialen die Namen der Materialen ,,besorgen". Aber irgendwie komme ich nicht weiter.
Hat jemand einen Rat, wie ich dieses Problem lösen kann? Ich möchte also im Mailbody auch die Namen der Materialen haben, z.B. ,,Material1, Material3, Material5".
Freue mich auf jeden Vorschlag!
Hallo,
bemühe mal die Forensuche nach "Recordset2" ... damit Du siehst, wie man auf Mehrwertfelder und deren Inhalte zugreifen kann.
Geschafft!!!!
'strMaterial erzeugen
If Not IsNull(Me![lngMaterial]) Then
'IDs von Material(en) in tbl tblStringMaterial eintragen
With CurrentDb().OpenRecordset("tblStringMaterial", dbOpenDynaset, dbAppendOnly)
For Each itm In Me![lngMaterial].Value
.AddNew
!lngMaterial = itm
.Update
Next
End With
'String "Material" erzeugen
strMaterial = ""
Set db = CurrentDb
Set rs = db.OpenRecordset("qryStringMaterial", dbOpenSnapshot) 'qryStringMaterial ist eine Abfrage mit den Tabellen strMaterial und tblMaterialen, um die Namen der Materialen zu "besorgen"
If Not rs.EOF Then
rs.MoveFirst
Do While Not rs.EOF
strMaterial = strMaterial & rs! Material & " ; " 'Im Feld "Material" der Abfrage qryStringMaterial steht der Name des Materials
rs.MoveNext
Loop
rs.Close
End If
Set rs = Nothing
Set db = Nothing
Else
strMaterial = ""
End If
Dann in den Code für das Mailbody schreibe ich:
"<b>Materialen: </b>" & strMaterial & "<br>" & _
Und voilá!!!!