Hallo Experten,
ich möchte über A03 Mails versenden und habe dazu aus der angehängten Datenbank tk_send_Mail00 aus dem Netz das Formular angepasst, in dem ich die ungebundenen Felder an eine Tabelle tbl_Mails gebunden habe. Somit habe ich eine Historie der versandten Mails. Leider funktioniert das nicht mit dem Listenfeld lst_File. Diese nimmt die Pfade der Mailanhänge auf.
Der Code zum Hinzufügen der Anhänge lautet:
Private Sub cmd_add_Attachment_Click()
On Error GoTo Err_cmdGetFile_Click
Dim DefaultPath As String, strFile As String
DefaultPath = DLookup("[Anlagen_Pfad]", "[tbl_Mailvorgaben]")
' Datei öffen Dialog anzeigen
Dim fd As New FileDialog
With fd
.DialogTitle = "Wählen Sie die Datei aus" ' Dialogtitel
.InitDir = DefaultPath ' Vorgabeordner
.Filter1Text = "Alle Dateien(*.*)" ' Dateitypen-Text
.Filter1Suffix = "*.*" ' Dateitypen-Endung
.Filter2Text = "Text-Dateien (*.txt)" ' Dateitypen-Text
.Filter2Suffix = "*.txt" ' Dateitypen-Endung
.ShowOpen
End With
' Bei "ABBRECHEN" im Dialog Function verlassen ansonsten
' die gewählte Datei der Variablen "Pfad" zuweisen
If fd.Filename = "" Then
Exit Sub
Else
strFile = fd.Filename
End If
If Me.lst_File.RowSource = "" Then
Me.lst_File.RowSource = strFile
Else
Me.lst_File.RowSource = Me.lst_File.RowSource & ";" & strFile
End If
Me.lst_File.Requery
Exit_cmdGetFile_Click:
Exit Sub
Err_cmdGetFile_Click:
MsgBox Err.Description
Resume Exit_cmdGetFile_Click
End Sub
Meine VBA-Kenntnisse sind leider als rudimentär zu bezeichnen.
Wie schaffe ich es, die Werte in einer Tabelle tbl_MAnhänge zu speichern?
Wünschenswert wäre auch, wenn ich nur den Dateinamen also ohne Pfad speichern könnte.
Vorab Danke für eure Hilfe!
Gruß
Max
Hallo Max,
Me.lst_File.RowSource & ";" & strFile
Hast du dir diesen String Mal mit Debug.Print im Direktfenster
angeschaut? Wie sieht der aus?
Und versucht den in der RowSource der Liste fest zu verdrahten?
Ergebnis?
gruss ekkehard
Hallo Ekkehard,
danke für deine schnelle Antwort!
Der Code: Debug.Print Me.lst_File.RowSource & ";" & strFile
liefert im Direktfenster die kompletten Pfade der 2 eingefügten Dateien jeweils mit ; getrennt, wobei die letzte Datei doppelt aufgeführt wird. Wird nur eine Anlagendatei ausgewählt, erscheint nichts (warum auch immer).
Gruß
Max
Me.lst_File.AddItem strFile genügt übrigens. Auch ist kein Requery nöltig.
Um alle Items in einer Tabelle abzuspeichern, benötigst Du auch eine entsprechende Tabelle.Private Sub EinKnopf_Click()
Dim rs As DAO.Recordset
Dim i As Long
With Me.lst_File
If .ListCount = 0 Then Exit Sub 'Listenfeld ist leer
Set rs = CurrentDb.OpenRecordset("DeineTabelleOderAbfrage", dbOpenDynaset, dbAppendOnly)
For i = 0 To .ListCount - 1
rs.AddNew
rs("MailId") = Me.MailId
rs("Attachment") = .ItemData(i)
rs.Update
Next
rs.Close
End With
End Sub
Hallo Lachtaube,
ich gehe mal davon aus, dass der Code ausschließlich dazu da ist, die Werte aus der Attachment-Liste in eine Tabelle zu schreiben, oder?
Nachdem ich den Tabellennamen an entsprechender Stelle ergänzt habe, funktionierte der Code so nicht. Fehlermeldung:
Methode oder Datentyp nicht gefundenDanach habe ich
MailID und
Attachment gegen meine Feldnamen ausgetauscht. Auch da weigerte sich das Programm und meldete dieselbe Fehlermeldung.
Wo könnte der Fehler stecken?
ZitatMe.lst_File.AddItem strFile genügt übrigens.
An welcher Stelle von
cmd_add_Attachment muss da was ausgetauscht werden?
Ist der Austausch für deinen Code zwingend erforderlich?
Gruß
Max
Hallo,
Asche auf mein Haupt. Wenn ich mir deine DB angeschaut hätte, hätte
ich gewusst, das die RowSource eine Werteliste ist.
Eine Werteliste habe ich lange nicht gebraucht, aber ich glaube, dass um
die Werte immer " drum herum gehören
Me.lst_File.RowSource = Me.lst_File.RowSource & ";" & """ & strFile & """
gruss ekkehard
Hallo,
ZitatMe.lst_File.RowSource = Me.lst_File.RowSource & ";" & """ & strFile & """
leider weiß ich mit dieser Anweisung nichts anzufangen.
Wo muss das geändert werden und was bewirkt es?
Gruß
Max
Hallo Max,
Statt
"alteRowsource";Pfad
steht da dann
"alteRowsource";"Pfad"
Ich würde aber eh eher darauf setzen
ZitatMe.lst_File.AddItem strFile genügt übrigens. Auch ist kein Requery nötig.
gruss ekkehard
Hallo Ekkehard,
vielleicht habe ich mein Problem nicht korrekt umschrieben.
Der Code aus meinem 1. Post funktioniert einwandfrei. Auch das Anfügen von Anlagen und das Versenden der Mails funktioniert. In der Anlage das fertige Mailformular.
Ich möchte (lediglich), dass auch die Werte der Liste lst_file, also die angegebenen Pfade der Anlagen, in die Tabelle tbl_MAnlagen eingefügt werden. Ob nun einzeln oder bereits mit ; verkettet ist egal.
Evtl. kann man den vorh. Code ergänzen oder einen neuen Code, wie es Lachtaube geschrieben hat, benutzen. Leider funktioniert der Code von Lachtaube nicht.
Gruß
Max
Hallo,
z. B. quick & dirty und ohne Kenntnis Deiner Tabellen:
Zitat.
.
.
If s_Attachment <> "" Then
'Überprüfen, ob es mehrere Anlagen gibt (separiert durch ein Semikolon)
If InStr(1, s_Attachment, ";") > 0 Then
'Zerlegen der Dateinamen in ein Array
s_attachment_array = Split(s_Attachment, ";")
'Durchlaufe das array...
For i = LBound(s_attachment_array) To UBound(s_attachment_array)
'...und wenn die Datei existiert
If Len(Dir(Trim(s_attachment_array(i)))) > 0 Then
'Füge sie als Anlage bei
.AddAttachment Trim(s_attachment_array(i))
CurrentDb.Execute " Insert into tbl_MAnhänge (MailID,AttachmentFile) Values(" & Me!MailID & ",'" & Trim(s_attachment_array(i)) & "')", dbFailOnError
End If
'und zum nächsten Element in dem Array...
Next i
Else
'Nur eine Anlage vorhanden
.AddAttachment s_Attachment
CurrentDb.Execute " Insert into tbl_MAnhänge (MailID,AttachmentFile) Values(" & Me!MailID & ",'" & s_Attachment & "')", dbFailOnError
End If
End If
.
.
.
Hallo Franz,
danke für den Code, jedoch bekomme ich eine Fehlermeldung (s. Anlage).
Den Code von Lachtaube habe ich noch einmal mit veränderter Datensatzherkunft getestet. Nun schreibt Access die Pfade der Anlagen zwar in das entsprechende Tabellenfeld, solange das Feld der MailID (bei mir heißt das Feld MA_ID) nicht als AutoWert definiert ist, sondern als Zahl mit Duplikate möglich. Dann fügt Access bei jedem DS immer nur die 0 ein.
Gruss
Max
Hallo,
der Code gehört auch nicht in eine Ereignisprozedur...
Dort wird nur die (Original-) Public-Funktion aufgerufen mit Übergabe der erforderlichen Parameter.
Hallo zusammen,
ich muss noch einmal deutlich bekennen, dass ich praktisch kein VBA beherrsche. Leider. Ich bin somit auf die unzähligen Beispielcodes im Netz und natürlich auf Euch VBA-Experten angewiesen.
Ich bastele mitunter Stunden an einem Code herum, den ich nur ansatzweise verstehe, der für Euch vermutlich in wenigen Minuten debuggt wäre.
Sorry Franz, aber für deine Anweisung fehlt mir einfach der VBA-Background.
Ich habe nun die DB mail.mdb mit den wichtigsten Objekten zusammengestellt und angefügt.
Wäre echt sehr hilfreich, wenn sich noch mal jemand meines Problems annehmen könnte.
Danke Euch.
Gruß
Max
Hallo,
ZitatIch habe nun die DB mail.mdb mit den wichtigsten Objekten zusammengestellt und angefügt
Es ist beschwerlich, eine DB zum Laufen zu bringen, wenn die Hälfte (Tabellen und Modul-Funktionen)fehlt..
Die DB muss vollständig sein und in sich funktionieren.
Deshalb nur die Änderungen für die Speicherung der Anlagen... jedoch ungetestet.
Hallo Franz,
durch deine Änderungen hast du mich auf den richtigen Weg gebracht! Ich habe den Code noch ein wenig angepasst und nun funkt es. Vielen, vielen Dank! Wieder viel gelernt.
PS.: Die komplette DB wäre definitiv zu groß gewesen, da die Mail-Geschichte nur ein kleiner, aber wichtiger Teil ist.
Gruß
Max
Sorry, falsch verstanden. Ich dachte es geht um das Anhängen an die Liste.