Functie

Status
Niet open voor verdere reacties.

koossie

Gebruiker
Lid geworden
26 apr 2002
Berichten
180
hee ik heb een vraagje,

ik heb een functie gemaakt voor het versturen van email, maar deze functie werkt maar 1 keer, de msgbox die erin staat werk wel gewoon maar het versturen van de email kan maar 1 keer, dan moet de db opnieuw op worden gestart en dan werkt het wel weer.......
weet iemand hoe dat komt??

dit is de code
Code:
Function SendMail(VerlofNr As Integer)
Dim PersID As Integer
Dim Email As String
Dim Subject As String
Dim Inhoud As String

PersID = Forms!FrmSession!Tekst0

If DLookup("Groep", "TblPersonen", "PersID=" & PersID) = "Users" Then
    Email = DLookup("Naam", "TblPersonen", "Groep='Mangement' AND AfdelingID=" & DLookup("AfdelingID", "TblPersonen", "PersID=" & PersID))
Else
    Email = DLookup("Naam", "TblPersonen", "PersID=" & DLookup("HfdID", "TblAfdelingen", "AfdelingsID=" & DLookup("AfdelingID", "TblPersonen", "PersID=" & PersID)))
End If

Inhoud = _
"Hee " & Email & "," & Chr(13) & Chr(13) & DLookup("Naam", "TblPersonen", "PersID=" & PersID) & " heeft een verlof aanvraag gedaan." & Chr(13) & "Het verlof nummer is " & VerlofNr & ", dit is nodig om het verlof goed te keuren." & Chr(13) & Chr(13) & "Groetjes"

Subject = "Verlof aanvraag"

Const lpCaption = "Microsoft Outlook"
DoCmd.SendObject , , acFormatRTF, Email, , , Subject, Inhoud, True

MsgBox ("Aanvraag onderweg")
End Function

als het niet duidelijk is hoor ik het graag
alvast bedankt
grtz koosie
 
Het is onmogelijk om een vraag als deze te beantwoorden als je niet aangeeft wat voor software of je gebruikt!
Versie van Access?
Operating systeem?
Versie van Outlook?
Outlook of Outlook Express?
 
owww oke, ja ik dacht misschien isser wat fout in de functie, maar oke

Ik gebruik acces 2000, outlook 2000 en os is windows 2000 proffesional

grtz
koosie
 
Ook jij wordt met deze combinatie het slachtoffer van de wrakke sendobject methode van Access. In Access 2002 is die methode iets verbetered, maar nog steeds vol met bugs! Mijn advies is: niet gebruiken!
Hoe dan een mailtje sturen?

Maak een nieuwe class module aan en noem die clsMAPI.
Plak daarin de volgende code:

Option Compare Database
Option Explicit
'*******************************************************
'Class clsMAPI
'*******************************************************
'Algemene declaraties voor een email object.
'*******************************************************
Dim objMySes As Object 'Session object voor de MAPI sessie


Public Function SendMail(txtMailTo As String, Optional txtText As String, Optional txtSubject As String) As String
'*******************************************************
'Functie voor het versturen van een mailtje.
'De returnwaarde is een string.
'Als de string leeg is is de toevoeging succesvol geweest.
'Als de string niet leeg is, dan bevat de string een
'foutboodschap.
'
'LAATSTE WIJZIGING:
' Versie 1.0 augustus 2000 B. Stam
' Initiele versie van de functie
'*******************************************************
If gTrace Then
Debug.Print "clsMAPI SendMail"
Else
On Error GoTo ErrorHandler
End If

Dim strMessage As String
Dim objRecip As Object
Dim objMes As Object

'*******************************************************
'Ontvanger is verplicht.
'*******************************************************
If txtMailTo = "" Then
strMessage = "De ontvanger van het mailtje is niet gegeven!"
GoTo ExitFunction
End If

'*******************************************************
'Niet ingevulde parameters afhandelen.
'*******************************************************
If IsMissing(txtText) Then
txtText = ""
End If
If IsMissing(txtSubject) Then
txtSubject = ""
End If

'*******************************************************
'De boodschap zelf invullen.
'*******************************************************
Set objMes = objMySes.Inbox.Messages.Add
With objMes
.Text = txtText
.Subject = txtSubject
End With

'*******************************************************
'De ontvanger invullen
'*******************************************************
Set objRecip = objMes.Recipients.Add
With objRecip
.Name = txtMailTo
.Resolve
'.Send
End With

'*******************************************************
'En nog even versturen.
'*******************************************************
objMes.Update
objMes.Send ShowDialog:=False

ExitFunction:
If strMessage <> "" Then
SendMail = strMessage
Else
SendMail = ""
End If
Exit Function

ErrorHandler:
SendMail = Chr(10) & Chr(13) & "Errornummer: " & CStr(Err.Number) & " "
SendMail = SendMail & "Errorboodschap: " & Err.Description
Exit Function
End Function

Private Sub Class_Initialize()
'*******************************************************
'Bij het instantieren van het object een MAPI sessie
'openen.
'Let op de profilename is afhankelijk van het mail
'programma dat gebruikt wordt.
'Als profilename weggelaten wordt, dan wordt er, indien
'noodzakelijk, automatisch om gevraagd.
'*******************************************************
If gTrace Then Debug.Print "clsMAPI Class_Initialize"
Set objMySes = CreateObject("MAPI.Session")
If Not objMySes Is Nothing Then
objMySes.Logon 'Als profilename niet gegeven hoeft te worden.
'objMySes.Logon profileName:="Microsoft Exchange"
End If

End Sub

Private Sub Class_Terminate()
'*******************************************************
'Als het object verwijderd wordt ook de MAPI sessie
'verwijderd.
'*******************************************************
If gTrace Then Debug.Print "clsMAPI Class_Terminate"
objMySes.Logoff
End Sub



Dan rest nog een voorbeeldje hoe je met bovenstaande class module een mailtje moet versturen:

Dim objMapi As clsMAPI
Dim txtSubject As String
Dim txtText As String
Dim strEmailAdres as String

txtSubject = "Verlof aanvraag"
txtText = "Hier heb je zelf al mooie code voor gemaakt."
strEmailAdres = "Ook die kun je zelf prima invullen"

Set objMapi = New clsMAPI
gstrReturn = objMapi.SendMail(strEmailAdres , txtText, txtSubject)
Set objMapi = Nothing


Bovenstaand zou bij jou moeten werken. Probeer het maar eens uit.
 
hardstikke super!!!

dan ga ik deze in vervolg gebruiken, bedankt!

grtz
koossie
 
hmmm werkt dus nog niet helemaal, ik krijg de volgende fout melding


Compileerfout:
Een module is geen geldig type

wat moet ik hiermee doen???
 
Je moet geen module aanmaken, maar een CLASS module! Da's toch iets anders.

Menu Insert (toevoegen), optie class module.
Die noem je vervolgens clsMAPI.
 
ohhh joh ik had nog nooit van een klasse module gehoord :)

maar hij werkt in ieder geval :D

maar nu nog een klein dingetje...
als ik op verstuur klik moet ik nog een profiel kiezen, welk email programma ik gebruik
dit hoefte eerst niet, en dat vond ik wel erg mooi....
is dat bij deze nog wel te halen????
 
Dat kun je natuurlijk aanpassen. Moet je deze regels even zoeken:

objMySes.Logon 'Als profilename niet gegeven hoeft te worden.
'objMySes.Logon profileName:="Microsoft Exchange"

De tweede regel is als commentaar opgenomen.
Je moet nu van de eerste regel commentaar maken en zorgen dat de profileName de juiste waarde bevat (is wat je nu op je scherm moet invullen).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan