Hi, Bear with me, for some reason the formatting in this post doesn't work...I have this code that I am experimenting with (from a well known resource). I get it to work on my home PC but not at work. Home is Office 2007 or Office 10. Work is Excel 2003 and Outlook 2003.
When I run this at work I get an error telling me that: "Compile Error, cannot find project library" and the line:
is highlighted in yellow with the next line down:
is highlighted in blue.Any ideas why it won't work? Anything to do with the reference library? Microsoft Office 11.0 Object Library is ticked, as is "MISSING Microsoft Outlook 14.0 Object Library"Any thoughts??Stu
Code:
Option Explicit'Ensure that you select the Microsoft Outlook X.0 Object Library in the references'Outlook needs to be loaded, and account logged inSub CallMailer() Dim lngLoop As Long 'Programming ethics 1. Always start your first line after leaving a line space, and 1 indentation level With ActiveSheet For lngLoop = 2 To .Cells(Rows.Count, 1).End(xlUp).Row ' Programming ethics 3. Always indent your loops, case statements and with constructors Call SendMessage(strTo:=.Cells(lngLoop, 1).Value, strCC:=.Cells(lngLoop, 2).Value, strBCC:=.Cells(lngLoop, 7).Value, strMessage:=.Cells(lngLoop, 8).Value, strSubject:=.Cells(lngLoop, 3).Value, strAttachmentPath:=.Cells(lngLoop, 6).Value, rngToCopy:=.Cells(lngLoop, 9)) Next lngLoop End With 'Programming ethics 2. Always end your last line leaving a line space before ending the sub or function, and having indendation level of 1 End Sub Sub SendMessage(strTo As String, Optional strCC As String, Optional strBCC As String, Optional strSubject As String, Optional strMessage As String, Optional strAttachmentPath As String, Optional rngToCopy As Range, Optional blnShowEmailBodyWithoutSending As Boolean = True) Dim objOutlook As Outlook.Application Dim objOutlookMsg As Outlook.MailItem Dim objOutlookRecip As Outlook.Recipient Dim objOutlookAttach As Outlook.Attachment If Trim(strTo) & Trim(strCC) & Trim(strBCC) = "" Then MsgBox "Please provide a mailing address!", vbInformation + vbOKOnly, "Missing mail information" Exit Sub End If ' Create the Outlook session. On Error Resume Next Set objOutlook = GetObject(, "Outlook.Application") Err.Clear: On Error GoTo -1: On Error GoTo 0 If objOutlook Is Nothing Then Set objOutlook = CreateObject("Outlook.Application") End If ' Create the message. Set objOutlookMsg = objOutlook.CreateItem(olMailItem) With objOutlookMsg ' Add the To recipient(s) to the message. If Trim(strTo) <> "" Then Set objOutlookRecip = .Recipients.Add(strTo) objOutlookRecip.Type = olTo End If ' Add the CC recipient(s) to the message. If Trim(strCC) <> "" Then Set objOutlookRecip = .Recipients.Add(strCC) objOutlookRecip.Type = olCC End If ' Add the BCC recipient(s) to the message. If Trim(strBCC) <> "" Then Set objOutlookRecip = .Recipients.Add(strBCC) objOutlookRecip.Type = olBCC End If ' Set the Subject, Body, and Importance of the message. If strSubject = "" Then strSubject = "" End If .Subject = strSubject If strMessage = "" Then strMessage = "This is the body of the message." & vbCrLf & vbCrLf End If .Importance = olImportanceNormal 'Normal importance If Not strMessage = "" Then .Body = strMessage & vbCrLf & vbCrLf End If If Not rngToCopy Is Nothing Then .HTMLBody = .Body & RangetoHTML(rngToCopy) End If ' Add attachments to the message. If Not IsMissing(strAttachmentPath) Then If Len(Dir(strAttachmentPath)) <> 0 Then Set objOutlookAttach = .Attachments.Add(strAttachmentPath) Else MsgBox "Unable to find the specified attachment. Sending mail anyway." End If End If ' Resolve each Recipient's name. For Each objOutlookRecip In .Recipients objOutlookRecip.Resolve Next ' Should we display the message before sending? If blnShowEmailBodyWithoutSending Then .Display Else .Save .Send End If End With Set objOutlook = Nothing Set objOutlookMsg = Nothing Set objOutlookAttach = Nothing Set objOutlookRecip = Nothing End SubFunction RangetoHTML(rng As Range)' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010. Dim fso As Object Dim ts As Object Dim TempFile As String Dim TempWB As Workbook TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm" ' Copy the range and create a workbook to receive the data. rng.Copy Set TempWB = Workbooks.Add(1) With TempWB.Sheets(1) .Cells(1).PasteSpecial Paste:=8 .Cells(1).PasteSpecial xlPasteValues, , False, False .Cells(1).PasteSpecial xlPasteFormats, , False, False .Cells(1).Select Application.CutCopyMode = False On Error Resume Next .DrawingObjects.Visible = True .DrawingObjects.Delete On Error GoTo 0 End With ' Publish the sheet to an .htm file. With TempWB.PublishObjects.Add( _ SourceType:=xlSourceRange, _ Filename:=TempFile, _ Sheet:=TempWB.Sheets(1).Name, _ Source:=TempWB.Sheets(1).UsedRange.Address, _ HtmlType:=xlHtmlStatic) .Publish (True) End With ' Read all data from the .htm file into the RangetoHTML subroutine. Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2) RangetoHTML = ts.ReadAll ts.Close RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _ "align=left x:publishsource=") ' Close TempWB. TempWB.Close savechanges:=False ' Delete the htm file. Kill TempFile Set ts = Nothing Set fso = Nothing Set TempWB = Nothing End Function
Code:
Sub SendMessage(strTo As String, Optional strCC As String, Optional strBCC As String, Optional strSubject As String, Optional strMessage As String, Optional strAttachmentPath As String, Optional rngToCopy As Range, Optional blnShowEmailBodyWithoutSending As Boolean = True)
Code:
objOutlook As Outlook.Application