MS Access Forum / Modules / DAO / VBA / March 2007
Can I have some help please?
|
|
Thread rating:  |
scubadiver - 01 Mar 2007 09:55 GMT Hi,
I've tried posting this twice but no reply.
I am using the following code to export field info to an email but it works fine ONLY when I first open the DB. When I try to click on the button again I get the 2957 run-time error. The "DoCmd" line gets highlighted.
(ignore the "blah blah", the real code works fine)
Any ideas?
Private Sub Tracksht_Click()
Dim strToWhom As String Dim strMsgBody As String Dim strSubject As String
strSubject = blah blah strToWhom = blah blah strMsgBody = blah blah
DoCmd.SendObject , , , strToWhom, , , strSubject, strMsgBody, True
End Sub
BeWyched - 01 Mar 2007 10:13 GMT Hi
There is nothing wrong with your code.
The coding may throw an error if the generated email isn't sent. i.e. it is created then closed without sending. On my PC this throws a '2501 - SendObject action was canceled' error. I suspect the problem is with your email service - what do you use for this (Outlook etc?).
BW
> Hi, > [quoted text clipped - 21 lines] > > End Sub scubadiver - 01 Mar 2007 10:31 GMT I tried sending the email but pressing the button still comes up with a reserved run-time error (2957).
I am using lotus notes
thanks
> Hi > [quoted text clipped - 32 lines] > > > > End Sub Keith Wilby - 01 Mar 2007 11:15 GMT > I am using lotus notes This might be your problem. I seem to remember having to write reams of code to make Access work with LN because it's all geared up to work with Outlook. Anyone else care to comment, am I on the right track?
In the meantime I'll see if I can find the code I used.
Keith. www.keithwilby.com
Stefan Hoffmann - 01 Mar 2007 12:20 GMT hi Keith,
>> I am using lotus notes > This might be your problem. I seem to remember having to write reams of > code to make Access work with LN because it's all geared up to work with > Outlook. Anyone else care to comment, am I on the right track? Afaik on mvps.org you will find Lotus automation code.
mfG --> stefan <--
scubadiver - 01 Mar 2007 12:55 GMT What does this code do and where do I find it on mvps?
> hi Keith, > [quoted text clipped - 6 lines] > mfG > --> stefan <-- Keith Wilby - 01 Mar 2007 13:09 GMT > What does this code do and where do I find it on mvps? Here's a copy of a posting from a few years back, don't ask me to explain any of the code because I've not used it since and I found the whole experience made my head hurt:
> Can you use the "SendObject" action in Access VBA with Lotus Notes? Well the short answer is yes but it isnt easy at all. I got this code from
the net which may be of help. I have actually got this code to work but it
is very flakey in terms of reliability.
*******
Lotus Notes from VB or VBA
This piece of code shows you how to mail direct from VBA into lotus
notes. Requires Lotus Notes Client 4.5.x or later is installed on your
system.
As far as I can tell the Lotus Notes objects all have to be late bound
otherwise you get errors. I have never found out the reason for this (the
only thing I can think of is there is an error in the lotus notes api). Feel
free to use this code, but if you do you it, I would appreciate a link from
your site if you have one.
Point of note. Certain versions of 4.x client handle differently. If you get
an error about object already exists, or two attachments instead of one, you
will need to comment out the line that reads MailDoc.CREATERICHTEXTITEM
("Attachment"). In later versions of notes API this task is carried out by
the previous line.
'Public Sub SendNotesMail(Subject as string, attachment as string,
'recipient as string, bodytext as string,saveit as Boolean)
'This public sub will send a mail and attachment if neccessary to the
'recipient including the body text.
'Requires that notes client is installed on the system.
Public Sub SendNotesMail(Subject As String, Attachment As String, Recipient
As String, BodyText As String, SaveIt As Boolean)
'Set up the objects required for Automation into lotus notes
Dim Maildb As Object 'The mail database
Dim UserName As String 'The current users notes name
Dim MailDbName As String 'THe current users notes mail database name
Dim MailDoc As Object 'The mail document itself
Dim AttachME As Object 'The attachment richtextfile object
Dim Session As Object 'The notes session
Dim EmbedObj As Object 'The embedded object (Attachment)
'Start a session to notes
Set Session = CreateObject("Notes.NotesSession")
'Get the sessions username and then calculate the mail file name
'You may or may not need this as for MailDBname with some systems you
'can pass an empty string
UserName = Session.UserName
MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) -
InStr(1, UserName, " "))) & ".nsf"
'Open the mail database in notes
Set Maildb = Session.GETDATABASE("", MailDbName)
If Maildb.ISOPEN = True Then
'Already open for mail
Else
Maildb.OPENMAIL
End If
'Set up the new mail document
Set MailDoc = Maildb.CREATEDOCUMENT
MailDoc.Form = "Memo"
MailDoc.sendto = Recipient
MailDoc.Subject = Subject
MailDoc.Body = BodyText
MailDoc.SAVEMESSAGEONSEND = SaveIt
'Set up the embedded object and attachment and attach it
If Attachment <> "" Then
Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment")
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", Attachment,
"Attachment")
MailDoc.CREATERICHTEXTITEM ("Attachment")
End If
'Send the document
MailDoc.PostedDate=Now() 'Gets the mail to appear in the sent items
folder
MailDoc.SEND 0, Recipient
'Clean Up
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set Session = Nothing
Set EmbedObj = Nothing
End Sub
If you want to send a message to more than one person or copy or blind
carbon copy the following may be of use to you.
MailDoc.sendto = Recipient
MailDoc.CopyTo = ccRecipient
MailDoc.BlindCopyTo = bccRecipient
Also for multiple email addresses you just set MailDoc.sendto to an array of
variants each of which will receive the message. So
Dim recip(25) as variant
recip(0) = "emailaddress1"
recip(1) = "emailaddress2" e.t.c
maildoc.sendto = recip
Thanks must go out to
Mark Austin, Long Beach, California
assisted by the great folks at
www.deja.com & www.notes.net
*******
I also found this which uses SendObject but i have never tried it and so
dont know how good it is.
*******
The following code snippet should send an Email via Lotus Notes from within
Access without using SendObject
Dim notesdb As Object
Dim notesdoc As Object
Dim notesrtf As Object
Dim notessession As Object
Set notessession = CreateObject("Notes.Notessession")
Set notesdb = notessession.getdatabase("", "")
Call notesdb.openmail
Rem make new mail message
Set notesdoc = notesdb.createdocument
Call notesdoc.replaceitemvalue("Sendto", strSupportEMail)
Call notesdoc.replaceitemvalue("Subject", "Problem Report")
Set notesrtf = notesdoc.createrichtextitem("body")
Call notesrtf.appendtext("Problem Report")
Call notesrtf.addnewline(2)
Rem attach Error Report doc
's = ActiveDocument.Path + "\" + ActiveDocument.Name
Call notesrtf.embedObject(1454, "", strCurrentPath, "Mail.rtf")
Rem send message
Call notesdoc.Send(False)
Set notessession = Nothing
GB located the following snippet for passing the password.
Dim MailPassword As String
Dim lnSession As NotesSession
Set lnSession = CreateObject("Lotus.NotesSession")
Call lnSession.Initialize(MailPassword)
Stefan Hoffmann - 01 Mar 2007 13:15 GMT hi,
> What does this code do and where do I find it on mvps? Try this one:
Private Function SendMail(ASendTo As String, ASendToName As String, ABody As String) As Boolean
' On Local Error GoTo LocalError
Dim Subject As String Dim Recipient As String Dim BodyText As String
Dim Maildb As Object 'The mail database Dim UserName As String 'The current users notes name Dim MailDbName As String 'The current users notes mail database name Dim MailDoc As Object 'The mail document itself Dim Session As Object 'The notes session Dim EmbedObj As Object 'The embedded object (Attachment)
SendMail = False
'Start a session to notes Set Session = CreateObject("Notes.NotesSession")
'Next line only works with 5.x and above. Replace password with your password 'Session.Initialize ("password")
'Get the sessions username and then calculate the mail file name 'You may or may not need this as for MailDBname with some systems you 'can pass an empty string or using above password you can use other mailboxes. UserName = Session.UserName MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"
'Open the mail database in notes Set Maildb = Session.GetDatabase("", MailDbName) If Maildb.IsOpen = False Then Maildb.OPENMAIL End If
'Set up the new mail document Set MailDoc = Maildb.CreateDocument MailDoc.Form = "Memo" MailDoc.SendTo = ASendTo MailDoc.Subject = "Info" MailDoc.Body = "texte " End If
MailDoc.SaveMessageOnSend = True
MailDoc.PostedDate = Now() 'Gets the mail to appear in the sent items folder MailDoc.Send 0, Recipient
Set Maildb = Nothing Set MailDoc = Nothing Set Session = Nothing Set EmbedObj = Nothing
SendMail = True Exit Function
LocalError: SendMail = False
End Function
mfG --> stefan <--
scubadiver - 01 Mar 2007 13:41 GMT Thanks for the code. Couple of queries:
1) Do I put this in a module?
2) I noticed the following:
'Next line only works with 5.x and above. Replace password with your password 'Session.Initialize ("password")
What about others using the database?
> hi, > [quoted text clipped - 69 lines] > mfG > --> stefan <-- Stefan Hoffmann - 01 Mar 2007 14:55 GMT hi,
> Thanks for the code. Couple of queries: > 1) Do I put this in a module? As you may have noticed, the declaration starts with a Private. You can copy it in the form where you need it.
Otherwise create a default module and declare it Public.
> 2) I noticed the following: > 'Next line only works with 5.x and above. Replace password with your > password > 'Session.Initialize ("password") > What about others using the database? Imho <ou don't need it, if Lotus is running.
mfG --> stefan <--
scubadiver - 01 Mar 2007 15:33 GMT Hello,
thanks for your help. I have put the code in the "on click" event in the button and I get a compile error: "Expected End Sub"
> hi, > [quoted text clipped - 14 lines] > mfG > --> stefan <-- Stefan Hoffmann - 01 Mar 2007 16:42 GMT hi,
> thanks for your help. I have put the code in the "on click" event in the > button and I get a compile error: "Expected End Sub" Post your event code.
mfG --> stefan <--
scubadiver - 02 Mar 2007 08:32 GMT Private Sub Tracksht_Click()
Private Function SendMail(ASendTo As String, ASendToName As String, ABody As String) As Boolean
' On Local Error GoTo LocalError
Dim Subject As String Dim Recipient As String Dim BodyText As String
Dim Maildb As Object 'The mail database Dim UserName As String 'The current users notes name Dim MailDbName As String 'The current users notes mail database name Dim MailDoc As Object 'The mail document itself Dim Session As Object 'The notes session Dim EmbedObj As Object 'The embedded object (Attachment)
SendMail = False
'Start a session to notes Set Session = CreateObject("Notes.NotesSession")
'Get the sessions username and then calculate the mail file name 'You may or may not need this as for MailDBname with some systems you 'can pass an empty string or using above password you can use other mailboxes. UserName = Session.UserName MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"
'Open the mail database in notes Set Maildb = Session.GetDatabase("", MailDbName) If Maildb.IsOpen = False Then Maildb.OPENMAIL End If
'Set up the new mail document Set MailDoc = Maildb.CreateDocument MailDoc.Form = "Memo" MailDoc.SendTo = ASendTo MailDoc.Subject = "Info" MailDoc.Body = "texte " End If
MailDoc.SaveMessageOnSend = True
MailDoc.PostedDate = Now() 'Gets the mail to appear in the sent items folder MailDoc.Send 0, Recipient
Set Maildb = Nothing Set MailDoc = Nothing Set Session = Nothing Set EmbedObj = Nothing
SendMail = True Exit Function
LocalError: SendMail = False
End Function
End Sub
Keith Wilby - 02 Mar 2007 08:38 GMT > End Function Delete that.
scubadiver - 02 Mar 2007 09:58 GMT I still get the same error.
> > End Function > > Delete that. Stefan Hoffmann - 02 Mar 2007 10:06 GMT hi,
> Private Sub Tracksht_Click() > [quoted text clipped - 3 lines] > > End Sub You are mixing to methods. This is not possible in VBA.
Private Function SendMail(ASendTo As String, _ ASendToName As String, _ ABody As String) _ As Boolean 'code here End Function
Private Sub Tracksht_Click() 'your code invoking SendMail(): SendMail "bla@bla.com", "Mr. Bla", "Bla Bla Bla" End Sub
mfG --> stefan <--
scubadiver - 02 Mar 2007 10:18 GMT So how do I do this using a button if I can't use "Private Sub Tracksht_Click()" ? I'm still not clear about what I am supposed to do.
thanks
> hi, > [quoted text clipped - 21 lines] > mfG > --> stefan <-- Stefan Hoffmann - 02 Mar 2007 10:42 GMT hi,
> So how do I do this using a button if I can't use "Private Sub > Tracksht_Click()" ? I'm still not clear about what I am supposed to do. Take a closer look at my previous post:
>> Private Function SendMail(ASendTo As String, _ >> ASendToName As String, _ [quoted text clipped - 7 lines] >> SendMail "bla@bla.com", "Mr. Bla", "Bla Bla Bla" >> End Sub Just paste the Function before your Click methode in your module. Then use it.
mfG --> stefan <--
scubadiver - 02 Mar 2007 11:05 GMT Another query. I have another error with the following ("End If without Block If")
'Set up the new mail document Set MailDoc = Maildb.CreateDocument MailDoc.Form = "Memo" MailDoc.SendTo = ASendTo MailDoc.Subject = "Info" MailDoc.Body = "texte " End If
> hi, > [quoted text clipped - 19 lines] > mfG > --> stefan <-- Stefan Hoffmann - 02 Mar 2007 11:11 GMT hi,
> Another query. I have another error with the following ("End If without > Block If") [quoted text clipped - 6 lines] > MailDoc.Body = "texte " > End If Delete this End If, it's a copy and past error.
mfG --> stefan <--
scubadiver - 02 Mar 2007 11:38 GMT Hello,
I guessed that might have been the case.
I didn't think anything was happening with the button but I received a long list of MAIL ROUTER error messages :-)
I've messed around with the code a bit and it seems to be working ok. In the original code, lotus opened a new email with a blank "to:" line the user could fill in themselves, but I will try an alternative.
Can you explain to me the purpose of "ASendToName" and "ABody", since they don't appear anywhere in the message?
thanks for your help.
> hi, > [quoted text clipped - 12 lines] > mfG > --> stefan <-- Stefan Hoffmann - 02 Mar 2007 12:51 GMT hi,
> I guessed that might have been the case. It is a copy and paste error. It's mine.)
> Can you explain to me the purpose of "ASendToName" and "ABody", since they > don't appear anywhere in the message?
>>> 'Set up the new mail document >>> Set MailDoc = Maildb.CreateDocument >>> MailDoc.Form = "Memo" >>> MailDoc.SendTo = ASendTo The ASendToName is a relict from the code i use. So you can remove it from the parameter list, as Lotus has here no property to fill with.
>>> MailDoc.Subject = "Info" >>> MailDoc.Body = "texte " This line should be
MailDoc.Body = ABody
mfG --> stefan <--
scubadiver - 02 Mar 2007 13:30 GMT I got rid of "abody" as well because I inserted the code from my original subroutine and it is working now.
thanks once again for the help.
> hi, > [quoted text clipped - 19 lines] > mfG > --> stefan <-- scubadiver - 02 Mar 2007 10:37 GMT Just to be clear this was part of the code from the original subroutine.
strSubject = QueryID & " - " & Fin_InvNo & " - " & [Forms]![queries form].Form.[CustomerName] & " - " & Qry_QryType & " " & "Query" strToWhom = "" strMsgBody = "Customer Name:" & " " & [Forms]![queries form].Form.[CustomerName] & vbNewLine & "Customer Address:" & " " & [Forms]![queries form]![Branch subform].Form.[Address1] & vbNewLine & "Type of Contact:" & " " & Qry_CntType1 & vbNewLine & "Invoice Number:" & " " & Fin_InvNo & vbNewLine & "Invoice Amount:" & " " & Fin_InvNo & vbNewLine & "Prepaid Amount:" & " " & Fin_InvPreP & vbNewLine & "Property Address:" & " " & Qry_PropAddress1 & " " & Qry_PropAddress2 & " " & Qry_PropAddress3 & " " & Qry_PropAddress4 & vbNewLine & "Product Reference:" & " " & Qry_ELS & vbNewLine & "Query Description:" & vbNewLine & Qry_Description & vbNewLine & vbNewLine & "Investigations and actions taken:" & vbNewLine & Inv_Actions & vbNewLine & vbNewLine & "Response to customer:" & vbNewLine & Inv_Resp
> hi, > [quoted text clipped - 21 lines] > mfG > --> stefan <-- Stefan Hoffmann - 01 Mar 2007 10:29 GMT hi,
> I am using the following code to export field info to an email but it works > fine ONLY when I first open the DB. When I try to click on the button again I > get the 2957 run-time error. The "DoCmd" line gets highlighted. http://support.microsoft.com/kb/260819
Use an error handler.
mfG --> stefan <--
scubadiver - 15 Mar 2007 10:41 GMT Hello,
I have another query about the code you gave me. Is it possible to adapt the code to include a CC address (the same address each time)
thanks
> hi, > [quoted text clipped - 7 lines] > mfG > --> stefan <-- Stefan Hoffmann - 15 Mar 2007 10:59 GMT hi,
> I have another query about the code you gave me. Is it possible to adapt the > code to include a CC address (the same address each time) Hmm, try to get the redbook:
www.redbooks.ibm.com/abstracts/sg245341.html
mfG --> stefan <--
|
|
|