You are on page 1of 26

Private ws As Worksheet Dim RowCount, SubjectCount As Integer Dim StatusCol, NoOfEntries, NoOfPOs, DefFirstRow, DefFirstCol, LastRow, LastCol, VendorCol

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

If FileExists(ThisWorkbook.Path & "\templates\temp01.xls") Then

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.Fields.Append "TraceNo", adLongVarChar, 20 rsList.Fields.Append "VendorTraceNo", adLongVarChar, 50

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

'----------------------------------------------' Initialize 2nd Page of the Wizard '-----------------------------------------------

With lvwPOs .ColumnHeaders.Clear For i = 0 To rsList.Fields.Count - 1 .ColumnHeaders.Add , , rsList.Fields(i).Name, 100 Next End With

With lvwVendors .ColumnHeaders.Clear .ColumnHeaders.Add , , "Status", 50

.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

cboSenderEmail.Clear For i = 1 To EmailFromCount cboSenderEmail.AddItem arEmailFrom(i) Next cboSenderEmail.AddItem "-"

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"

cmdNext1.Enabled = False MPWizard.Top = -18 Me.Height = 220

selTab 1 Me.Show vbModal End Sub Private Sub cboVendorCodeCol_Change() VendorCol = cboVendorCodeCol.ListIndex End Sub

Private Sub cboRefinery_Change()

End Sub

Private Sub cboSenderEmail_Change() If Trim(cboSenderEmail.Text) = "" Then Else cmdFinish.Enabled = True End If End Sub

Private Sub cboStatusCol_Change() StatusCol = cboStatusCol.ListIndex + 1 End Sub

Private Sub cboStatus_Change() selStatus = cboStatus.Text cmdNext1.Enabled = True End Sub

Private Sub cboWorkSheets_Change()

txtFirstRow.Text = 2 txtFirstColumn.Text = 1

Set SelWs = ActiveWorkbook.Worksheets(cboWorkSheets.Text) getWSDefinitions End Sub

Public Sub getWSDefinitions() On Error Resume Next cboStatusCol.Clear

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

LastRow = x ExitLoop = True Exit Do End If x=x+1 Loop

txtLastColumn.Text = LastCol txtLastRow.Text = LastRow RowCount = LastRow - DefFirstRow

lblNoRows.Caption = "No Of Rows to Process: " & CInt(txtLastRow.Text) - CInt(txtFirstRow.Text)

cboStatusCol.ListIndex = 26

If Err.Number <> 0 Then MsgBox "Error Processing selected Worksheet", vbExclamation Err.Clear cmdNext1.Enabled = False End If End Sub

Private Sub cmdBack1_Click() selTab 1 End Sub

Private Sub cmdBack2_Click() selTab 2

End Sub

Private Sub cmdBack3_Click() selTab 3 End Sub

Private Sub cmdClose1_Click() Unload Me End Sub

Private Sub cmdClose2_Click() Unload Me End Sub

Private Sub cmdClose3_Click() Unload Me End Sub

Private Sub cmdClose4_Click() Unload Me End Sub

Private Sub cmdFinish_Click() Unload Me End Sub

Private Sub cmdGenrateEmailAttachments_Click() GenerateEmailAttachments

End Sub

Private Sub cmdNext1_Click() If cboRefinery.Text = "" Then MsgBox "Please select refinery", vbExclamation, "MailMerge" Exit Sub End If

selTab 2 StartAnalysis End Sub

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

For i = DefFirstRow To RowCount + 1 curStatus = SelWs.Cells(i, StatusCol)

If UCase(Trim(selStatus)) = UCase(Trim(curStatus)) Then NoOfEntries = NoOfEntries + 1 curPO = Trim(SelWs.Cells(i, 1))

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("VendorCC") = tempEmail End If

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

rsList.Fields("RefRow") = i rsList.Update End If Next

If rsList.RecordCount > 0 Then

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

For j = 1 To rsList.Fields.Count - 1 If rsList.Fields("VendorEmail") = "ERROR" Then mitem.ForeColor = vbRed End If

If rsList.Fields("TraceNo") = "ERROR" Then mitem.ForeColor = vbRed End If

If rsList.Fields("ContactPerson") = "ERROR" Then mitem.ForeColor = vbRed End If

mitem.SubItems(j) = rsList.Fields(j) Next rsList.MoveNext Next

selTab 2 End If

If HasErrors Then cmdNext2.Enabled = False lblErrors.Visible = True Else cmdNext2.Enabled = True End If

'cmdBack1 = True End Sub

Function getCell(pRowIndex, pColIndex) On Error Resume Next temp = Trim(SelWs.Cells(pRowIndex, pColIndex)) & ""

If Err.Number = 0 Then Else

temp = "" Err.Clear End If getCell = temp End Function Private Sub selTab(pTabIndex) MPWizard.Value = 1 MPWizard.Value = pTabIndex - 1 MPWizard.Top = -18

'lvwPOs.Top = 15 'txtLog.Top = 123 'lvwVendors.Top = 54 'Me.Repaint End Sub

Private Sub cmdNext2_Click() selTab 3 End Sub

Private Sub cmdNext3_Click() selTab 4 End Sub Private Sub cmdNext4_Click()

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), _

EmailText, _ NewFolderPath & "\" & lvwVendors.ListItems(i).SubItems(7), _ LogFile, lvwVendors.ListItems(i).SubItems(8)

lvwVendors.ListItems(i).Text = "Sent" 'Me.Repaint 'NoOfEmailsSent = NoOfEmailsSent + 1 Next

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

Sub GenerateEmailAttachments() 'On Error Resume Next

' rsList.MoveFirst ' For i = 1 To rsList.RecordCount ' ' Debug.Print rsList.Fields("RefRow") rsList.MoveNext

' Next

Dim EmailText, strVendorPOs, tempSubject As String

Dim mitem As ListItem

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

Dim newwb As Workbook Dim newws As Worksheet

strVendorPOs = "" curVendorTrace = "" UniqueVendorTraceCount = 0 rsList.MoveFirst strVendorCodes = "" 'strVendorEmailAddresses = "" txtLog.Text = "" UpdateTxtLog "Processing " & rsList.RecordCount & " PO's..." Me.Repaint strPONos = ""

'rsList.Sort "VendorTraceNo ASC"

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

If i = rsList.RecordCount Then Else strPONos = "" End If Else End If

'If Trim(strPONos) = "" Then 'Else

'End If

Set newwb = Workbooks.Open(ThisWorkbook.Path & "\templates\temp01.xls") newwb.Worksheets(1).Cells(1, 1) = rsList.Fields("VendorName")

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

UniqueVendorTraceCount = UniqueVendorTraceCount + 1 x=3 End If

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

x=x+1 rsList.MoveNext Next

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

For i = 1 To lvwVendors.ListItems.Count 'strPONos = "" 'lvwVendors.ListItems(i).SubItems (1)

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

strPONos = "" Next End If

UpdateTxtLog "" UpdateTxtLog "" UpdateTxtLog "Successfully Generated " & UniqueVendorTraceCount & " vendor email(s)."

temp = Now temp = Replace(temp, "/", "-")

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

Private Sub Frame4_Click()

End Sub

Private Sub Label18_Click()

End Sub

Private Sub MPWizard_Change()

End Sub

Private Sub UserForm_Click()

End Sub

You might also like