Professional Documents
Culture Documents
Mailmerge Macro Updated
Mailmerge Macro Updated
As Integer Dim curPO, curStatus, selStatus As String Dim SelWs As Worksheet Dim rsList As New Recordset Dim strVendorCodes, strVendorEmailAddresses As String Dim NewFolderPath As String Dim TempString, tempSubject As String Dim arSubjects(50) As String Dim LogFile As String Public Sub Init(pWs As Worksheet) Dim ws As Worksheet DefFirstRow = 2 DefFirstCol = 1 RowCount = 0 NoOfEntries = 0 curPO = ""
If Dir$(ThisWorkbook.Path & "\templates\subjects.temp", vbNormal) <> vbNullString Then strSubjects = ReadTextFiletoArray(ThisWorkbook.Path & "\templates\subjects.temp") Else MsgBox "'Subjects' Template File not found. Application Terminated", vbExclamation, "MailMerge" End End If
Else MsgBox ThisWorkbook.Path & "\templates\temp01.xls was not found. Application Terminated", vbExclamation, "MailMerge" End End If
Set rsList = CreateObject("adodb.recordset") rsList.Fields.Append "RefRow", adLongVarChar, 20 rsList.Fields.Append "PONo", adLongVarChar, 20 rsList.Fields.Append "Release", adLongVarChar, 20 rsList.Fields.Append "Line", adLongVarChar, 20 rsList.Fields.Append "Agent", adLongVarChar, 20 rsList.Fields.Append "VendorCode", adLongVarChar, 20 rsList.Fields.Append "VendorName", adLongVarChar, 200 rsList.Fields.Append "VendorEmail", adLongVarChar, 200 'MCLZ 13-Mar-2012: Add VendorCC rsList.Fields.Append "VendorCC", adLongVarChar, 200 rsList.Fields.Append "CatalogID", adLongVarChar, 200 rsList.Fields.Append "CatalogName", adLongVarChar, 255 rsList.Fields.Append "POIssueDate", adLongVarChar, 20 rsList.Fields.Append "QtyOrdered", adLongVarChar, 20 rsList.Fields.Append "QtyRecd", adLongVarChar, 20 rsList.Fields.Append "TotalPOCost", adLongVarChar, 20 rsList.Fields.Append "NeedOrEstDelDate", adLongVarChar, 20 rsList.Fields.Append "Comments", adLongVarChar, 255 rsList.Fields.Append "ContactPerson", adLongVarChar, 255 rsList.Fields.Append "Subject", adLongVarChar, 255 rsList.Fields.Append "POStatus", adLongVarChar, 20
rsList.Open '----------------------------------------------' Initialize 1st Page of the Wizard '----------------------------------------------cboWorkSheets.Clear For i = 1 To ActiveWorkbook.Worksheets.Count If ActiveWorkbook.Worksheets(i).Visible = xlSheetVisible Then cboWorkSheets.AddItem ActiveWorkbook.Worksheets(i).Name End If Next
With lvwPOs .ColumnHeaders.Clear For i = 0 To rsList.Fields.Count - 1 .ColumnHeaders.Add , , rsList.Fields(i).Name, 100 Next End With
.ColumnHeaders.Add , , "VendorTrace", 100 .ColumnHeaders.Add , , "Vendor Name", 150 .ColumnHeaders.Add , , "Vendor Email", 200 .ColumnHeaders.Add , , "EmailTemplateFileName", 100 .ColumnHeaders.Add , , "EmailSubject", 100 .ColumnHeaders.Add , , "Contact Person", 100 .ColumnHeaders.Add , , "Attachment", 100 'MCLZ 13-Mar-2012: Add VendorCC .ColumnHeaders.Add , , "Vendor CC", 200 .Left = 78 .Top = 42 End With
cboRefinery.Clear cboRefinery.AddItem "El Segundo" cboRefinery.AddItem "Hawaii" cboRefinery.AddItem "Marketing" cboRefinery.AddItem "Pascagoula" cboRefinery.AddItem "Richmond" cboRefinery.AddItem "Salt Lake"
arEmailFrom(1) = "Expeditor-ES@chevron.com" arEmailFrom(2) = "Expeditor-Mktg@chevron.com" arEmailFrom(3) = "Expeditor-PA@chevron.com" arEmailFrom(4) = "Expeditor-RI@chevron.com" arEmailFrom(5) = "NAProcExpeditor@chevron.com"
EmailFromCount = 5
arEmailTemplateFile(1) = "temp01.html" arEmailTemplateFile(2) = "temp01.html" arEmailTemplateFile(3) = "temp01.html" arEmailTemplateFile(4) = "temp04.html" '3 arEmailTemplateFile(5) = "temp05.html" '4 arEmailTemplateFile(6) = "temp06.html" '5
EmailTemplateFileCount = 6
cboStatus.Clear 'cboStatus.AddItem "1-2 DAYS OVERDUE" 'cboStatus.AddItem "16+ DAYS EARLY" 'cboStatus.AddItem "31+ DAYS OVERDUE" cboStatus.AddItem "FOR ACK" cboStatus.AddItem "FOLLOW-UP" cboStatus.AddItem "OVERDUE"
selTab 1 Me.Show vbModal End Sub Private Sub cboVendorCodeCol_Change() VendorCol = cboVendorCodeCol.ListIndex End Sub
End Sub
Private Sub cboSenderEmail_Change() If Trim(cboSenderEmail.Text) = "" Then Else cmdFinish.Enabled = True End If End Sub
txtFirstRow.Text = 2 txtFirstColumn.Text = 1
x=1 ExitLoop = False Do Until ExitLoop = True cboStatusCol.AddItem SelWs.Cells(1, x) 'cboVendorCodeCol.AddItem SelWs.Cells(1, x) ', i If Trim(SelWs.Cells(1, x)) = "" Then LastCol = x ExitLoop = True Exit Do End If x=x+1 Loop
x=2 ExitLoop = False Do Until ExitLoop = True If Trim(SelWs.Cells(x, 1)) = "" Then
cboStatusCol.ListIndex = 26
If Err.Number <> 0 Then MsgBox "Error Processing selected Worksheet", vbExclamation Err.Clear cmdNext1.Enabled = False End If End Sub
End Sub
End Sub
Private Sub cmdNext1_Click() If cboRefinery.Text = "" Then MsgBox "Please select refinery", vbExclamation, "MailMerge" Exit Sub End If
Private Sub StartAnalysis() Dim curVendorCode As String 'On Error Resume Next NoOfEntries = 0 HasErrors = False curPO = "" lblErrors.Visible = False
If rsList.RecordCount > 0 Then rsList.MoveFirst For i = 1 To rsList.RecordCount rsList.Delete rsList.MoveNext Next End If
rsList.AddNew rsList.Fields("PONo") = curPO & "" rsList.Fields("Release") = getCell(i, 3) rsList.Fields("Line") = getCell(i, 4) rsList.Fields("Agent") = getCell(i, 7) rsList.Fields("VendorCode") = getCell(i, 6) rsList.Fields("VendorName") = getCell(i, 5)
tempEmail = getCell(i, 30) If tempEmail = "" Then rsList.Fields("VendorEmail") = "ERROR" HasErrors = True Else rsList.Fields("VendorEmail") = tempEmail End If 'MCLZ 13-Mar-2012: Add VendorCC tempEmail = getCell(i, 35) If tempEmail = "" Then rsList.Fields("VendorCC") = "ERROR" HasErrors = True Else
rsList.Fields("CatalogID") = getCell(i, 8) rsList.Fields("CatalogName") = getCell(i, 9) rsList.Fields("POIssueDate") = getCell(i, 12) rsList.Fields("QtyOrdered") = getCell(i, 11) rsList.Fields("QtyRecd") = getCell(i, 15) rsList.Fields("TotalPOCost") = getCell(i, 17) rsList.Fields("NeedOrEstDelDate") = getCell(i, 22) rsList.Fields("POStatus") = getCell(i, 27) '<---- ?? Veirfy with Customer
tempContactPerson = getCell(i, 29) If tempContactPerson = "" Then rsList.Fields("ContactPerson") = "ERROR" HasErrors = True Else rsList.Fields("ContactPerson") = tempContactPerson End If
tempTraceNo = getCell(i, 32) If tempTraceNo = "" Then rsList.Fields("TraceNo") = "ERROR" HasErrors = True Else rsList.Fields("TraceNo") = tempTraceNo rsList.Fields("VendorTraceNo") = getCell(i, 6) & "_" & tempTraceNo End If
lblRecNo.Caption = "No. Of Entires Found: " & rsList.RecordCount rsList.Sort = "VendorTraceNo ASC, PONo ASC, Release ASC, Line ASC" 'rsList.Sort = "VendorCode ASC, PONo ASC, Release ASC, Line ASC" rsList.MoveFirst Dim mitem As ListItem lvwPOs.ListItems.Clear For i = 1 To rsList.RecordCount 'Set mitem = lvwPOs.ListItems.Add(, , rsList.Fields("PONo")) Set mitem = lvwPOs.ListItems.Add(, , rsList.Fields("RefRow"))
selTab 2 End If
If HasErrors Then cmdNext2.Enabled = False lblErrors.Visible = True Else cmdNext2.Enabled = True End If
Function getCell(pRowIndex, pColIndex) On Error Resume Next temp = Trim(SelWs.Cells(pRowIndex, pColIndex)) & ""
temp = "" Err.Clear End If getCell = temp End Function Private Sub selTab(pTabIndex) MPWizard.Value = 1 MPWizard.Value = pTabIndex - 1 MPWizard.Top = -18
End Sub
Function ReadTextFile(pTemplateFile As String) Dim TemplateFile, TemplateContent, TemplateLine As String Open pTemplateFile For Input As #1
Do While Not EOF(1) Input #1, TemplateLine TemplateContent = TemplateContent & TemplateLine Loop Close #1 ReadTextFile = TemplateContent End Function
Function ReadTextFiletoArray(pTemplateFile As String) Dim TemplateFile, TemplateContent, TemplateLine As String Open pTemplateFile For Input As #1
SubjectCount = 1 Do While Not EOF(1) Input #1, TemplateLine arSubjects(SubjectCount) = TemplateLine SubjectCount = SubjectCount + 1 Loop Close #1 End Function Public Function FolderExists(strFolder As String) As Boolean 'Check if folder exists FolderExists = (Dir$(strFolder, vbDirectory) <> vbNullString) End Function
Public Function FileExists(strFile As String) As Boolean FileExists = (Dir$(strFile, vbNormal) <> vbNullString) End Function
Private Sub UpdateTxtLog(pText As String) txtLog.Text = txtLog.Text & pText & Chr(13) & Chr(10) End Sub
Private Sub cmdSendEmailsNow_Click() On Error Resume Next Dim EmailText As String NoOfEmailsSent = 0
If cboSenderEmail.Text = "" Then MsgBox "Please select Sender Email", vbExclamation, "MailMerge" Exit Sub End If
For i = 1 To lvwVendors.ListItems.Count EmailText = ReadTextFile(ThisWorkbook.Path & "\templates\" & lvwVendors.ListItems(i).SubItems(4)) EmailText = Replace(EmailText, "[vendor_name]", lvwVendors.ListItems(i).SubItems(2)) EmailText = Replace(EmailText, "[contact_person]", lvwVendors.ListItems(i).SubItems(6)) 'MCLZ 13-Mar-2012: Add VendorCC SendEmail lvwVendors.ListItems(i).SubItems(3), _ cboSenderEmail.Text, _ lvwVendors.ListItems(i).SubItems(5), _
MsgBox NoOfEmailsSent & " emails sent", vbInformation, "Mail Merge" End Sub
Private Sub DeleteExist(pFilename As String) If FolderExists(pFilename) Then Kill pFilename End If End Sub
' rsList.MoveFirst ' For i = 1 To rsList.RecordCount ' ' Debug.Print rsList.Fields("RefRow") rsList.MoveNext
' Next
NewFolderPath = ThisWorkbook.Path & "\email\" & Format(MonthName(Month(Date), True), "00") & Format(Day(Date), "00") & Format(Year(Date), "00") & "_" & cboStatus.Text If Not FolderExists(NewFolderPath) Then MkDir NewFolderPath ChDir NewFolderPath
strVendorPOs = "" curVendorTrace = "" UniqueVendorTraceCount = 0 rsList.MoveFirst strVendorCodes = "" 'strVendorEmailAddresses = "" txtLog.Text = "" UpdateTxtLog "Processing " & rsList.RecordCount & " PO's..." Me.Repaint strPONos = ""
For i = 1 To rsList.RecordCount If Trim(curVendorTrace) <> Trim(rsList.Fields("VendorTraceNo")) Then If UniqueVendorTraceCount = 0 Then ElseIf UniqueVendorTraceCount > 0 Then DeleteExist NewFolderPath & "\" & curVendorTrace & ".xls"
newwb.SaveAs NewFolderPath & "\" & curVendorTrace & ".xls" newwb.Close Set newwb = Nothing
UpdateTxtLog "Generating " & NewFolderPath & "\" & curVendorTrace & ".xls ..."
If Err.Number = 0 Then UpdateTxtLog "OK" UpdateTxtLog "--------------------------------------------" UpdateTxtLog "" Me.Repaint Else UpdateTxtLog Err.Number & " " & Err.Description UpdateTxtLog "--------------------------------------------" UpdateTxtLog "" Me.Repaint Err.Clear End If
'End If
curVendorTrace = rsList.Fields("VendorTraceNo")
Set mitem = lvwVendors.ListItems.Add(, , "") mitem.SubItems(1) = curVendorTrace mitem.SubItems(2) = rsList.Fields("VendorName") mitem.SubItems(3) = rsList.Fields("VendorEmail")
mitem.SubItems(4) = "temp_" & Replace(cboStatus.Text, " ", "") & "_" & rsList.Fields("TraceNo") & ".html" 'mitem.SubItems(5) = tempSubject mitem.SubItems(6) = rsList.Fields("ContactPerson") mitem.SubItems(7) = curVendorTrace & ".xls" 'MCLZ 13-Mar-2012: Add VendorCC mitem.SubItems(8) = rsList.Fields("VendorCC")
With newwb.Worksheets(1) .Cells(x, 1) = rsList.Fields("PONo").Value .Cells(x, 2) = rsList.Fields("Release").Value .Cells(x, 3) = rsList.Fields("Line").Value .Cells(x, 4) = rsList.Fields("Agent").Value .Cells(x, 5) = rsList.Fields("CatalogID").Value .Cells(x, 6) = rsList.Fields("CatalogName").Value .Cells(x, 7) = rsList.Fields("POIssueDate").Value .Cells(x, 8) = rsList.Fields("QtyOrdered").Value .Cells(x, 9) = rsList.Fields("QtyRecd").Value .Cells(x, 10) = rsList.Fields("TotalPOCost").Value .Cells(x, 11) = rsList.Fields("NeedOrEstDelDate").Value .Cells(x, 12) = "" End With ' Comments ' PONo ' Release No ' Line No ' Agent ' Catalog ID ' Catalog Description ' PO Issue Date ' Qty Ordered ' Qty Recieved ' Total PO Cost ' Estimated Delivery Date
If UniqueVendorTraceCount > 0 Then 'rsList.MoveLast 'If Right(strPONos, 1) = "," Then strPONos = Left(strPONos, Len(strPONos) - 1) 'strPONos = Replace(strPONos, " Rel []", "") 'mitem.SubItems(5) = strPONos
DeleteExist NewFolderPath & "\" & curVendorTrace & ".xls" UpdateTxtLog "Generating " & NewFolderPath & "\" & curVendorTrace & ".xls ..."
newwb.SaveAs NewFolderPath & "\" & curVendorTrace & ".xls" newwb.Close Set newwb = Nothing
If Err.Number = 0 Then UpdateTxtLog "OK" UpdateTxtLog "--------------------------------------------" UpdateTxtLog "" Me.Repaint Else UpdateTxtLog "ERROR: " & Err.Number & " " & Err.Description UpdateTxtLog "--------------------------------------------" UpdateTxtLog "" Me.Repaint Err.Clear End If
strPONos = ""
rsList.MoveFirst For j = 1 To rsList.RecordCount If rsList.Fields("VendorTraceNo") = Trim(lvwVendors.ListItems(i).SubItems(1)) Then 'strPONos = strPONos & "PO " & rsList.Fields("PONo") & " Rel [" & rs.Fields("Release") & "], "
If InStr(Trim(strPONos), "PO " & Trim(rsList.Fields("PONo")) & " Rel [" & rsList.Fields("Release") & "]") > 0 Then Else strPONos = strPONos & "PO " & Trim(rsList.Fields("PONo")) & " Rel [" & rsList.Fields("Release") & "], " End If End If rsList.MoveNext Next
strPONos = Trim(strPONos) If Right(strPONos, 1) = "," Then strPONos = Left(strPONos, Len(strPONos) - 1) strPONos = Replace(strPONos, " Rel []", "") tempSubject = getSubject(Right(Trim(lvwVendors.ListItems(i).SubItems(1)), 1)) tempSubject = Replace(tempSubject, "[vendor_name]", Trim(lvwVendors.ListItems(i).SubItems(2))) tempSubject = Replace(tempSubject, "[po_list]", strPONos) lvwVendors.ListItems(i).SubItems(5) = tempSubject
UpdateTxtLog "" UpdateTxtLog "" UpdateTxtLog "Successfully Generated " & UniqueVendorTraceCount & " vendor email(s)."
temp = Replace(temp, ":", "-") temp = Replace(temp, " ", "-") temp = temp & ".log"
LogFile = NewFolderPath & "\" & temp CreateLog (LogFile) LogWrite LogFile, Me.txtLog.Text 'SaveLog 'Me.Repaint cmdNext3.Enabled = True End Sub
Function getSubject(pTraceNo As String) As String For i = 1 To SubjectCount arfld = Split(arSubjects(i), "|") If LCase(Trim(arfld(0))) = LCase(Trim(cboRefinery.Text)) Then If LCase(Trim(arfld(1))) = LCase(Trim(cboStatus.Text)) Then If LCase(Trim(arfld(2))) = LCase(Trim(pTraceNo)) Then getSubject = arfld(3) Exit Function End If End If End If Next End Function
End Sub
End Sub
End Sub
End Sub