Outlook öffnen

14/10/2007 - 14:24 von Günter Gerold | Report spam
Hallo NG,

um von Access ein neues Mail in Outlook zu erzeugen, habe ich eine Funktion
zusammengenagelt. Diese làuft auch, aber es soll ein hübscher Code werden.
Darum hàtte ich noch 2 Fragen:

1. Ist das Late Binding so korrekt ?

2. Passt der Errorhandler und sind alle Variablen richtig geschlossen ?

Public Function fncStartOutlook(Optional outMailadresse As String = "",
Optional TextID As Integer)
On Error GoTo FehlerBehandlung
Dim olObj As Object
Const olMailItem As Long = 0
Dim olmail As Object
Dim rs As DAO.Recordset
Dim bccstring As String
Dim mailtext As String
Dim outbetreff As String

Set olObj = CreateObject("Outlook.Application")
Set olmail = olObj.CreateItem(olMailItem)
Set rs = CurrentDb.OpenRecordset("qrymail", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
bccstring = bccstring & rs![Mail] & ";"
rs.MoveNext
Loop
Set rs = CurrentDb.OpenRecordset("tblTexte", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
If rs![ID] = TextID Then
mailtext = rs![Text]
outbetreff = rs![betreff]
Exit Do
End If
rs.MoveNext
Loop
olmail.Subject = outbetreff
olmail.Importance = 2
olmail.To = outMailadresse
olmail.bcc = bccstring
'olmail.Attachments.Add "c:/access/test.pdf", 1, 1, reportname
olmail.HTMLBody = Replace(mailtext, vbCrLf, "<br>")
olmail.Display

Rauswurf:
rs.Close
Set rs = Nothing
Set olmail = Nothing
Set olObj = Nothing
Exit Function

FehlerBehandlung:
If err.Number = 3021 Then
MsgBox "Keine Mailadressen gefunden!"
Else
MsgBox err.Number & " " & err.Description
End If
Resume Rauswurf

End Function
 

Lesen sie die antworten

#1 Thomas Möller
14/10/2007 - 15:17 | Warnen spam
Hallo Günter,

Günter Gerold schrieb:
um von Access ein neues Mail in Outlook zu erzeugen, habe ich eine
Funktion zusammengenagelt. Diese làuft auch, aber es soll ein
hübscher Code werden. Darum hàtte ich noch 2 Fragen:

1. Ist das Late Binding so korrekt ?



wenn Du ohne Verweis auf Outlook ein E-Mail erstellen kannst, ist Dein
Code so okay.


2. Passt der Errorhandler und sind alle Variablen richtig geschlossen
?



Sieht für mich gut auf. Alle Variablen, denen Du ein Objekt zugewiesen
hast, hast Du am Ende auf Nothing gesetzt.


Public Function fncStartOutlook(Optional outMailadresse As String > "", Optional TextID As Integer)
On Error GoTo FehlerBehandlung
Dim olObj As Object
Const olMailItem As Long = 0
Dim olmail As Object
Dim rs As DAO.Recordset
Dim bccstring As String
Dim mailtext As String
Dim outbetreff As String

Set olObj = CreateObject("Outlook.Application")
Set olmail = olObj.CreateItem(olMailItem)
Set rs = CurrentDb.OpenRecordset("qrymail", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
bccstring = bccstring & rs![Mail] & ";"
rs.MoveNext
Loop
Set rs = CurrentDb.OpenRecordset("tblTexte", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
If rs![ID] = TextID Then
mailtext = rs![Text]
outbetreff = rs![betreff]
Exit Do
End If
rs.MoveNext
Loop
olmail.Subject = outbetreff
olmail.Importance = 2
olmail.To = outMailadresse
olmail.bcc = bccstring
'olmail.Attachments.Add "c:/access/test.pdf", 1, 1, reportname
olmail.HTMLBody = Replace(mailtext, vbCrLf, "<br>")
olmail.Display

Rauswurf:



Weil ab hier nichts mehr schief gehen darf, habe ich mir angewöhnt,
folgende Zeile einzufügen:

On Error Resume Next


rs.Close
Set rs = Nothing
Set olmail = Nothing
Set olObj = Nothing
Exit Function

FehlerBehandlung:
If err.Number = 3021 Then
MsgBox "Keine Mailadressen gefunden!"
Else
MsgBox err.Number & " " & err.Description
End If
Resume Rauswurf



Um besser auf Erweiterungen vorbereitet zu sein, verwende ich an dieser
Stelle immer eine SELECT-CASE-Anweisung:

Select Case Err.Number
Case 0
Resume Next
Case 3021 'Keine Mail-Adresse
MsgBox "Keine Mailadressen gefunden!"
Resume Rauswurf
Case Else
MsgBox "Ein Fehler ist aufgetreten: " & vbCrLf & _
"VBA Dokument " & CodeContextObject.Name & vbCrLf & _
"Prozedur: test" & vbCrLf & _
"Fehler-Nr.: " & Err.Number & vbCrLf & _
Err.Description, vbCritical
Resume Exit_test
End Select


Wenn Du spàter eine weitere Fehlernummer gesondert behandeln willst
brauchst Du "nur" einen weiteren "Case"-Zweig einfügen.


CU
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen