Can I have some help please?

G

Guest

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
 
G

Guest

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
 
G

Guest

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
 
K

Keith Wilby

scubadiver said:
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
 
S

Stefan Hoffmann

hi Keith,

Keith said:
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 <--
 
K

Keith Wilby

scubadiver said:
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)
 
S

Stefan Hoffmann

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 <--
 
G

Guest

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?
 
S

Stefan Hoffmann

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 <--
 
G

Guest

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"
 
S

Stefan Hoffmann

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 <--
 
G

Guest

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
 
S

Stefan Hoffmann

hi,
Private Sub Tracksht_Click()

Private Function SendMail(ASendTo As String, ASendToName As String, ABody As
String) As Boolean
End Function

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 "(e-mail address removed)", "Mr. Bla", "Bla Bla Bla"
End Sub



mfG
--> stefan <--
 
G

Guest

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
 
G

Guest

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
 
S

Stefan Hoffmann

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:

Just paste the Function before your Click methode in your module. Then
use it.



mfG
--> stefan <--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top