Переименовать вложение и сохранить - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть электронные письма с вложениями в формате PDF, которые я хотел бы сохранить автоматически, когда они поступают в мой почтовый ящик.Мой код в основном написан, я проверил, что все переменные имеют правильное значение, и они выводят правильные данные;Тем не менее, я не уверен, как кодировать фактическое сохранение файла.

Файл будет переименован в адрес клиента, который извлекается с моим кодом ниже:

Sub EagleViewSaveAttachment()

    'Define Variables
    Dim sFileName As String
    Dim varAddress As Variant
    Dim City As Variant
    Dim fdObj As Object
    Dim NextFriday As Date
    Dim JobArea As String
    Dim JobCity As Variant
    Dim myPath As String
    Dim objAtt As Outlook.Attachment
    Dim myFinalPath As String

    'Set Variables
    NextFriday = Date + 8 - Weekday(Date, vbFriday)
    myPath = "C:\Users\admin\OneDrive\Documents\EagleView\"

    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 = Replace(msgtext, "Address: ", "###")
        delimitedMessage = Replace(delimitedMessage, ",", "###")
        varAddress = Split(delimitedMessage, "###")

        'Assign the job address from email to variable
        sFileName = varAddress(10)
        JobCity = LTrim(varAddress(11))

        '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" Then
            JobAre = "Jacksonville"
        Else
            JobArea = LTrim(varAddress(11))
        End If

        'Define Final Path
        myFinalPath = myPath + Format$(NextFriday, "yyyy-mm-dd") + "\" + JobArea + "\"

        'Check if the path exists, if not create it
        If fdObj.FolderExists(myFinalPath) Then
            MsgBox "Found it."
        Else
            fdObj.CreateFolder (myFinalPath)
            MsgBox "It has been created."
        End If

    Next

End Sub

На данный момент, я не могу сделать это, чтобы проверить, есликаталог C:\Users\admin\OneDrive\Documents\EagleView\yyyy-mm-dd\JobArea уже существует, и для его создания, если он еще не существует.

Я вполне уверен, что проблема заключается в моем использовании fdObj.FolderExists(myFinalPath), так как кажется, что он не принимает переменные.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Используйте такую ​​функцию

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

, затем назовите ее

Пример

    'Define Final Path
    myFinalPath = myPath + Format$(NextFriday, "yyyy-mm-dd") + "\" + JobArea + "\"

    CreateDir myFinalPath ' <--- call call function 
0 голосов
/ 12 декабря 2018

Согласно моему поиску, fdObj.FolderExists() может принимать переменные, например:

Sub Test_File_Exist_FSO_Early_binding()
'If you want to use the Intellisense help showing you the properties
'and methods of the objects as you type you can use Early binding.
'Add a reference to "Microsoft Scripting Runtime" in the VBA editor
'(Tools>References)if you want that.

    Dim FSO As Scripting.FileSystemObject
    Dim FilePath As String

    Set FSO = New Scripting.FileSystemObject

    FilePath = "C:\Users\Ron\test\book1.xlsm"

    If FSO.FileExists(FilePath) = False Then
        MsgBox "File doesn't exist"
    Else
        MsgBox "File exist"
    End If

End Sub

Ссылка от:

Проверить, существует ли папка, файл или лист или файл являетсяоткрыть

Вы можете сохранить и переименовать вложение, используя ссылку ниже:

Сохранить вложения в папку и переименовать их

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...