PDA

Vollständige Version anzeigen : Anlagenverwaltung per VBA


kilambu
20.06.2012, 11:43
Hallo Zusammen,

folgende Fragestellung: nach dem ich aus Access heraus ein Mail versendet habePublic Function eMailVersand(vRecipient As String, vCCRecipient As String, strBody As String, strSubject As String)
On Error GoTo err_proc
Dim objOutlook As Outlook.Application
Dim objNameSpace As Outlook.NameSpace
Dim objDefaultEMail As Outlook.MAPIFolder
Dim objEMail As Outlook.MailItem
Dim vInfo As Variant
Dim vEntryID As String

'//Outlook öffnen und eine neue EMail erstellen
Set objOutlook = New Outlook.Application
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objDefaultEMail = objNameSpace.GetDefaultFolder(olFolderOutbox)
Set objEMail = objDefaultEMail.Items.Add(olMailItem)

objEMail.To = vRecipient

If Not IsNull(vCCRecipient) Then
objEMail.CC = vCCRecipient
End If
objEMail.Subject = strSubject
objEMail.Body = strBody

'Mail senden - oder Display für Anzeigen
Select Case MsgBox("Soll diese EMail vor dem Versand angezeigt werden,?", _
vbYesNoCancel Or vbExclamation Or vbSystemModal Or vbDefaultButton1, "EMailversand")
Case vbNo
objEMail.Send
Case vbYes
objEMail.Display
Case vbCancel
GoTo end_proc
End Select

vInfo = MsgBox("Email wurde versandt!", vbOKOnly, "EMailversand")



end_proc:
On Error Resume Next ' falls Objekte einen Fehler auslösen, ignorieren
Set objOutlook = Nothing
Set objNameSpace = Nothing
Set objDefaultEMail = Nothing
Set objEMail = Nothing
Exit Function

err_proc:
MsgBox Err.Description, , Err.Number
Resume end_proc ' gehe zur Objekt-Freigabe

End Function
, verschiebe ich diese in einen bestimnten OrdnerPublic Function MoveOLItem(vBetreff As String, strAblagepfad As String)
On Error GoTo err_MoveOLItem
Dim objOutlApp As Outlook.Application
Dim objNameSpace As Outlook.NameSpace
Dim strBetreff As String
Dim strSaveAs As String
Dim strEntryID As String

Set objOutlApp = CreateObject("Outlook.Application")
Set objNameSpace = objOutlApp.GetNamespace("MAPI")

Dim objMyItem As Object

strEntryID = TrackEntryID(vBetreff)
Set objMyItem = objNameSpace.GetItemFromID(strEntryID)
If objMyItem Is Nothing Then
Set objMyItem = objNameSpace.GetItemFromID(strEntryID)
End If
If objMyItem Is Nothing Then
MsgBox ("Item mit dieser EntryID existiert nicht")
End If


strBetreff = objMyItem.Subject
strSaveAs = strAblagepfad & "\" & strBetreff & ".msg"


objMyItem.SaveAs strSaveAs, olMSG

err_MoveOLItem:

End Function
und Public Function TrackEntryID(vBetreff As String)
On Error GoTo ImportSentMail_Err
Dim OutlN As New Outlook.Application
Dim GesendeteObjekte As Object
Dim objKon As Object
Dim IntMailZ As Integer

IntMailZ = 0

Set GesendeteObjekte = OutlN.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail)

For IntMailZ = 1 To GesendeteObjekte.Items.count
Set objKon = GesendeteObjekte.Items(IntMailZ)
If vBetreff = objKon.Subject Then
TrackEntryID = objKon.EntryID
MsgBox "eMail EntryID erfolgreich ermittelt", vbInformation
GoTo ImportSentMail_Exit
End If
Next IntMailZ

MsgBox "eMail EntryID konnte nicht ermittelt werden", vbExclamation

ImportSentMail_Exit:
Set objKon = Nothing
Set OutlN = Nothing
Exit Function

ImportSentMail_Err:
MsgBox "Es ist ein Fehler aufgetreten!"
GoTo ImportSentMail_Exit

End Function
. Nun ist es mit ein paar wenigen Mausklicks möglich, diese Mail dem entsprechendem Datensatz zuzuordnen und im Anlagefeld zu speichern. Genau diesen Prozess möchte ich künftig nicht mehr dem User überlassen (wird gerne mal vergessen), sondern vielmehr automatisiert ablaufen lassen. Nun fehlt mir hierzu leider komplett der Ansatz, da ich die interne Anlagenverwaltung von Access nicht verstehe bzw. mir diese auch nicht ersichtlich ist. Hat jemand von Euch einen umsetzbaren Ansatz. Vielen Dank im Voraus

Atrus2711
20.06.2012, 11:48
Hi,

intern ist das Anlagefeld eine zweite Tabelle, sprich: du müsstest da mit einem Recordset2 (!)-Objekt weiterkommen.

Insgesamt aber rate ich eher dazu, die Anlagefelder ganz wegzulassen. Stell dir vor, der User will die Anlagen der E-Mail kommentieren. Dann brauchst du dafür doch eine eigene Tabelle, denn an die interne Tabelle für die Anlage-Dateien kommst du nicht gut heran.

Sprich: die Dateien auf Platte legen, und deren Dateinamen (nebst Kommentar und Mailbezug) in eine Detailtabelle legen. Fertig. "Wie früher".

kilambu
21.06.2012, 05:50
Hallo Martin,

zunächst einmal vielen Dank für die Antwort. Was ist der Unterschied zwischen den Objekten "Recordset" und "Recordset2"? Irgendwie versteh ich die MS-Knowledge nicht. Danke