Итак, у меня есть макрос, который создает каталог, переименовывает вложение и сохраняет его работающим по правилу при поступлении сообщений в Outlook.Проблема заключается в том, что приходят 3 электронных письма с адресами
123 на главной улице, город 1
456 на главной улице, город 2
789 на главной улице 3
Он сохранит их в соответствующих папках и будет называть файл соответствующим образом на основе адреса, но когда вы входите в файлы, все они имеют одинаковую информацию, поэтому он сохраняет вложение для адреса 456 main st
как и все 3 имени файла.
Вот мой код:
Private Function CreateDir(FldrPath As String)
Dim Elm As Variant
Dim CheckPath As String
CheckPath = ""
For Each Elm In Split(FldrPath, "\")
CheckPath = CheckPath & Elm & "\"
If Len(Dir(CheckPath, vbDirectory)) = 0 Then
MkDir CheckPath
Debug.Print CheckPath & " Folder Created"
End If
Debug.Print CheckPath & " Folder Exist"
Next
End Function
Sub SaveEagleView(itm As Outlook.MailItem)
Dim strSubject As String, strExt As String
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim NextFriday As Date
Dim sFileName As String
Dim varAddress As Variant
Dim City As Variant
Dim fdObj As Object
Dim JobArea As String
Dim JobCity As Variant
Dim myPath As String
Dim myFinalPath As String
Dim objMsg As MailItem
Dim sFileExt As String
Set objMsg = Application.CreateItem(olMailItem)
Dim enviro As String
NextFriday = Date + 8 - Weekday(Date, vbFriday)
Set myfolder = Outlook.ActiveExplorer.CurrentFolder
Set fdObj = CreateObject("Scripting.FileSystemObject")
'Loop through emails in folder
For i = 1 To myfolder.Items.Count
Set myitem = myfolder.Items(i)
msgtext = myitem.Body
'Search for Specific Text
delimitedMessage = Right$(msgtext, Len(msgtext) - InStr(1, msgtext, "Address: ") - 8)
varAddress = Split(delimitedMessage, ",")
'Assign the job address from email to variable
sFileName = varAddress(0)
JobCity = RTrim(LTrim(varAddress(1)))
'Define office area based on job city
If JobCity = "Panama City" Or JobCity = "Mexico Beach" Or JobCity = "Panama City Beach" Or JobCity = "Lynn Haven" Or JobCity = "Port Saint Joe" Then
JobArea = "Panama"
ElseIf JobCity = "Daytona Beach" Or JobCity = "Port Orange" Or JobCity = "Deltona" Or JobCity = "Ormond Beach" Or JobCity = "Deland" Then
JobArea = "Daytona"
ElseIf JobCity = "Orlando" Then
JobArea = "Orlando"
ElseIf JobCity = "Jacksonville" Or JobCity = "Jacksonville Beach" Then
JobArea = "Jacksonville"
Else
JobArea = JobCity
End If
For Each objAtt In itm.Attachments
saveFolder = "C:\Users\admin\OneDrive\Documents\EagleView\" & Format$(NextFriday, "yyyy-mm-dd") & "\" & JobArea & "\"
CreateDir saveFolder
If Right(objAtt.FileName, 3) = "PDF" Then
sFileExt = ".pdf"
File = saveFolder & sFileName & sFileExt
objAtt.SaveAsFile File
End If
' With objMsg
' .To = "Careers@Email.com"
' .CC = "CustomerService@Email.com"
' .Subject = "New EagleView Needs Uploaded"
' .BodyFormat = olFormatPlain
' .Body = "A new EagleView has been received for the " & JobArea & " office. The file name is " & sFileName & " and needs to be uploaded. Thanks!"
' .Send
' End With
' Set objMsg = Nothing
Next
Next
Set objAtt = Nothing
End Sub
Код для создания электронного письма закомментирован, потому что он не работает, но я бы предпочел убедиться, чтоСохранение файла работает правильно, прежде чем двигаться дальше, пытаясь заставить его работать.
Спасибо за всю вашу помощь заранее!
Отредактировано, чтобы предоставить больше информации:
Итак,в электронных письмах это будет содержаться в теле:
• Адрес: 123 main St, City, State 12345-1234
Способ написания кода должен, и кажется,, он должен перебирать электронные письма, к которым применяется правило, иизвлеките уличный адрес и примените это значение к sFileName
, и эта часть работает должным образом, поскольку она проходит цикл, и получает правильное имя файла для каждого письма, которое приходит;тем не менее, он просто применяет это имя к одному и тому же файлу снова и снова.
Действующее правило гласит:
Примените это правило после того, как сообщение поступит
от admin @email.com
и с EagleView в теме
и с $ в теле
и только на этом компьютере
переместите его на
и запустите Project1.SaveEagleView