Thank you very muchTry this:
Note that manipulation of the sCC string should be done in the first sub (Excecute_Click) and passed as the aCC( second argument) of the SendEmailCDO sub.Code:Option Explicit Dim strFilename As String, strMsg As String Private Sub Excecute_Click() Dim SQL As String Dim WPassStr As String Dim sSQL As String Dim aProjectLeaderMail As String Dim aProductionPlannerMail As String Dim aCurrentUserMail As String DIm sCC as string 'Enter Password If Nz(DLookup("[WPass]", "[GMailSettingsQry]")) = "" Then Dim Message, Title, Default Message = "Enter Windows Password" Title = "Enter Parameters" WPassStr = InputBox(Message, Title) DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE GMailSettingsQry SET WPass =""" & WPassStr & """" DoCmd.SetWarnings True End If Dim rs As Recordset Dim vRecipientList As String Dim vRecipientListCC As String Dim vMsg As String Dim vSubject As String Dim vReportPDF As String 'aProjectLeaderMail = ProjectLeaderMail 'these line do nothing good 'aProductionPlannerMail = ProductionPlannerMail ' Set rs = CurrentDb.OpenRecordset("SELECT * FROM EmailTBLQry_NewDaw; ") If rs.RecordCount > 0 Then rs.MoveFirst Do 'Set To Recipient If Not IsNull(rs!To) Then vRecipientList = vRecipientList & rs("To") & "," 'Set CC Recipient If Not IsNull(rs!ProjectLeaderMail) AND rs!ProjectLeaderMail <> "N/A" Then aProjectLeaderMail = aProjectLeaderMail & rs("ProjectLeaderMail") If Not IsNull(rs!ProductionPlannerMail) AND rs!ProductionPlannerMail <> "N/A" Then aProductionPlannerMail = aProductionPlannerMail & rs("ProductionPlannerMail") If Not IsNull(rs!CurrentUserMail ) AND rs!CurrentUserMail <> "N/A" Then aCurrentUserMail = aCurrentUserMail & rs("CurrentUserMail ") & "," 'It send mail, I need Production Planner, Project leader and Current user mail (If not the same as production planner) If aProjectLeaderMail <> aProductionPlannerMail Then sCC=sCC & aProjectLeaderMail & "," & aProductionPlannerMail & "," If aCurrentUserMail <> aProductionPlannerMail AND aCurrentUserMail <> aProjectLeaderMail Then sCC=sCC & "," & aCurrentUserMail & "," End If Else sCC=sCC & aProjectLeaderMail & "," If aCurrentUserMail <> aProductionPlannerMail Then sCC=sCC & "," & aCurrentUserMail & "," End If End if rs.MoveNext End If Loop Until rs.EOF vSubject = "New DAW Sheet Listing - Registration: " & " " & rs("Registration") 'you already have the recordset open this is faster 'vSubject = "New DAW Sheet Listing - Registration: " & " " & DLookup("[Registration]", "[EmailTblQry_NewDaw]") vReportPDF = CurrentProject.Path & "\" & "DAW Sheet.pdf" '<<<<<<<<<<<<<<<<<<<<export the report as PDF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DoCmd.OutputTo acReport, "DAW Sheet", acFormatPDF, vReportPDF '<<<<<<<<<<<<<<<<<<<<export the report as PDF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '<<<<<<<<<<<<<<<<<<call Colin's sub to email report as attachment>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SendEMailCDO vRecipientList, sCC, vSubject, vMsg, aCurrentUserMail , vReportPDF 'notice the vMsg is empty looks like you removed from the table '<<<<<<<<<<<<<<<<<<call Colin's sub to email report as attachment>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 'MsgBox ("Report successfully eMailed!") 'Debug.Print aProjectLeaderMail, aProductionPlannerMail, aCurrentUserMail 'Debug.Print Acc Else MsgBox "No contacts." End If End If 'DoCmd.RunMacro "New DAW Email List" End Sub Public Function GetUserName() As String GetUserName = Environ("UserName") End Function Sub SendEMailCDO(aTo, Acc, aSubject, aTextBody, aFrom, aPath) Dim rs As Recordset 'aFrom = CurrentUserMail 'again you cannot do this, you need to use a recordset or dlookups 'aCurrentUserMail = CurrentUserMail'see above '========================================== 'Original code by Jeff Blumson 'Adapted by Colin Riddington to include file attachments 'Date: 25/08/2007 '========================================== 'Dim CDOEmailType As String Dim txtSendUsing As String Dim txtPort As String Dim txtServer As String Dim txtAuthenticate As String Dim intTimeOut As String Dim txtSSL As String Dim txtusername As String Dim txtPassword As String Dim VWPass As String Dim txtFrom As String 'Debug lines 'Debug.Print txtSendUsing, txtPort, txtServer, txtAuthenticate, intTimeOut, txtSSL 'Debug.Print txtusername, txtPassword, VWPass 'Debug.Print aTo, aProjectLeaderMail, aProductionPlannerMail, aCurrentUserMail 'Debug.Print aTo, aCC, aFrom 'Debug.Print aSubject 'Debug.Print aTextBody 'Debug.Print aPath Set rs = CurrentDb.OpenRecordset("SELECT * FROM GMailSettingsQry;") VWPass = VWPass & rs!WPass 'CDOEmailType = rs!EmailType txtSendUsing = rs!SendUsing txtPort = rs!ServerPort txtServer = rs!EmailServer txtAuthenticate = rs!SMTPAuthenticate intTimeOut = rs!Timeout txtusername = GetUserName txtPassword = VWPass txtSSL = rs!UseSSL On Error GoTo err_SendEMailCDO Const CdoBodyFormatText = 1 Const CdoBodyFormatHTML = 0 Const CdoMailFormatMime = 0 Const CdoMailFormatText = 1 Dim Message As Object 'Create CDO message object Set Message = CreateObject("cdo.Message") With Message.Configuration.Fields .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = txtSendUsing .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = txtPort .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = txtServer .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = txtAuthenticate .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = txtusername .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = txtPassword .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = intTimeOut .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = txtSSL 'code for STARTTLS If txtPort = 587 Then .Item("http://schemas.microsoft.com/cdo/configuration/sendtls").Value = True End If .Update End With DoCmd.Hourglass True With Message .To = aTo 'Set email adress why do you loop through the table if you don;t use the vRecipients???? '.To = aCurrentUserMail .Subject = aSubject 'Set subject .TextBody = aTextBody 'Set body text If Len(Acc) > 0 Then .CC = Acc 'Set copy to If Len(aFrom) > 0 Then .From = aFrom 'Set sender address if specified. If Len(aPath) > 0 Then .AddAttachment (aPath) 'Attach this file .Send 'Send the message End With Debug.Print Acc 'Debug.Print aTo, Acc, aFrom 'Debug.Print Acc & aProjectLeaderMail & aCurrentUserMail & aProductionPlannerMail DoCmd.Hourglass False 'Show message MsgBox "The email message has been sent successfully. ", vbInformation, "EMail message" 'Clean up Set Message = Nothing Exit_SendEMailCDO: Exit Sub err_SendEMailCDO: 'MsgBox "Error # " & str(err.Number) & Chr(13) & err.Description strMsg = "Sorry - I was unable to send the email message(s). " & vbNewLine & vbNewLine & _ "Error # " & Str(Err.Number) & Chr(13) & Err.Description MsgBox strMsg, vbCritical, "EMail message" strMsg = "" Resume Exit_SendEMailCDO End Sub
Cheers,
Looks and works amazingly well
All I will add now is a masked password when the user enters his/her password, not to have the password entered in the inputbox visible