Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations IamaSherpa on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Sub or Function not defined? How to fix?

Status
Not open for further replies.

idbands

Technical User
Oct 13, 2007
16
We have a program that sends e-mails through Outlook and Outlook previously popped up with an error warning that an outside program was trying to send a message. To get around this error, we were told to enter this VBA code:

Public Function ammolSendMail(strTo As String, _
strCC As String, _
strBCC As String, _
strSubject As String, _
strMessageBody As String, _
volBodyFormat As Variant, _
Optional strAttachments As String, _
Optional strFileFullPath As String _
) As Boolean

On Error GoTo ErrorHandler:
Dim MAPISession As Outlook.NameSpace
Dim MAPIFolder As Outlook.MAPIFolder
Dim MAPIMailItem As Outlook.MailItem
Dim oRecipient As Outlook.Recipient
Dim TempArray() As String
Dim varArrayItem As Variant
Dim strEmailAddress As String
Dim strAttachmentPath As String
Dim blnSuccessful As Boolean

Set MAPISession = Application.Session

If Not MAPISession Is Nothing Then

'Logon to the MAPI session
MAPISession.Logon , , True, False

'Create a pointer to the Outbox folder
Set MAPIFolder = MAPISession.GetDefaultFolder(olFolderOutbox)
If Not MAPIFolder Is Nothing Then

'Create a new mail item in the "Outbox" folder
Set MAPIMailItem = MAPIFolder.Items.Add(olMailItem)
If Not MAPIMailItem Is Nothing Then

With MAPIMailItem

'Create the recipients TO
TempArray = Split(strTo, ";")
For Each varArrayItem In TempArray

strEmailAddress = Trim(varArrayItem)
If Len(strEmailAddress) > 0 Then
Set oRecipient = .Recipients.Add(strEmailAddress)
oRecipient.Type = olTo
Set oRecipient = Nothing
End If

Next varArrayItem

'Create the recipients CC
TempArray = Split(strCC, ";")
For Each varArrayItem In TempArray

strEmailAddress = Trim(varArrayItem)
If Len(strEmailAddress) > 0 Then
Set oRecipient = .Recipients.Add(strEmailAddress)
oRecipient.Type = olCC
Set oRecipient = Nothing
End If

Next varArrayItem

'Create the recipients BCC
TempArray = Split(strBCC, ";")
For Each varArrayItem In TempArray

strEmailAddress = Trim(varArrayItem)
If Len(strEmailAddress) > 0 Then
Set oRecipient = .Recipients.Add(strEmailAddress)
oRecipient.Type = olBCC
Set oRecipient = Nothing
End If

Next varArrayItem

'Set the message SUBJECT
.Subject = strSubject

'Set the message BODY (HTML or plain text)

If volBodyFormat = OlBodyFormat.olFormatHTML Then
.HTMLBody = strMessageBody
EmbedPictures MAPIMailItem, strMessageBody, strFileFullPath
Else
.Body = strMessageBody
End If

'Add any specified attachments
TempArray = Split(strAttachments, ";")
For Each varArrayItem In TempArray

strAttachmentPath = Trim(varArrayItem)
If Len(strAttachmentPath) > 0 Then
.Attachments.Add strAttachmentPath
End If

Next varArrayItem

.Send 'No return value since the message will remain in the outbox if it fails to send

Set MAPIMailItem = Nothing

End With

End If

Set MAPIFolder = Nothing

End If

MAPISession.Logoff

End If

'If we got to here, then we shall assume everything went ok.
blnSuccessful = True

ExitRoutine:
Set MAPISession = Nothing
ammolSendMail = blnSuccessful
Exit Function

ErrorHandler:
blnSuccessful = Err.Number
Resume ExitRoutine
End Function


The problem is that we now get an error when trying to run the code: "Compile Error: Sub or Function not defined"

Also, "EmbedPictures" is highlighted when the error pops up in this line of code: "EmbedPictures MAPIMailItem, strMessageBody, strFileFullPath"

Can anyone help me?

Kelly
 




Hi,

I'd guess that EmbedPictures is a macro and that the libraby that has the object code is missing in Tools > References.

Skip,

[glasses]Just traded in my old subtlety...
for a brand NUANCE![tongue]
 
Also, I have to say, I'm not sure how this code is going to avoid the security warning.
 
Thanks for the posts, guys. We found this application here that will do a e-mail merge with Access data and seems pretty sophisticated and easy to use. In the help there were instructions on how to add the code. We're having trouble getting support from the company, though, so I think I'll just find another program as we've run into a couple of problems and haven't heard back on any of our questions.
 
There's a very simple solution for that pop-up.

Just replace
Code:
 MailItem.Send

with
Code:
MailItem.Display
SendKeys "%{s}", True

Cheers,

Roel
 
Well, I see one way it could have worked - which is if the code was in Outlook (2003 or later - Outlook 2003 trusts it's own VBA; earlier versions do not), and then that internal code is called from your application. Which reminds me ... <fx: tappety, tappety> ah, yes. here you go; the original source of the code shown in the OP. Since it is the original source it has somewhat more documentation and an explanation on how to use:
 
Which is a (poorly documented) rip-off of the code at the link I posted. Entertainingly, having removed the original copyright notice, 4TOPS then seem try to claim copyright on the code themselves...
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top