Очистка электронной почты Outlook с использованием VBA - несоответствие типов - PullRequest
0 голосов
/ 24 апреля 2018

В настоящее время я работаю над макросом для очистки электронных писем и вложений Outlook. Имеет незначительную ошибку несоответствия типов, надеясь, что кто-то может указать, какой тип данных мне нужен.

Итак, я знаю, что есть большое практическое препятствие, с которым мне придется столкнуться в какой-то момент. Сейчас я сосредоточен на том, чтобы заставить вещи работать, а затем на оптимизации

    Sub FetchEmailData()

Dim appOutlook As Object
Dim olNs As Object
Dim olFolder As Object
Dim olItem As Object
Dim iRow As Integer

' Get/create Outlook Application
On Error Resume Next
Set appOutlook = GetObject(, "Outlook.Application")
If appOutlook Is Nothing Then
    Set appOutlook = CreateObject("Outlook.Application")
End If
On Error GoTo 0

Set olNs = appOutlook.GetNamespace("MAPI")
Set olFolder = olNs.GetDefaultFolder(6) ' 6 == Inbox for some reason


For iRow = 1 To olFolder.Items.Count

    'Check if we care about the e-mail
    Call SaveEmailAttachment(olFolder.Items.Item(iRow))
    'Go onto the next one if we don't

    'ThisWorkbook.Sheets("Test").Cells(iRow + 1, 1) = olFolder.Items.Item(iRow).SenderEmailAddress
    'ThisWorkbook.Sheets("Test").Cells(iRow + 1, 2) = olFolder.Items.Item(iRow).Subject
    'ThisWorkbook.Sheets("Test").Cells(iRow + 1, 3) = olFolder.Items.Item(iRow).To
    'ThisWorkbook.Sheets("Test").Cells(iRow + 1, 3) = olFolder.Items.Item(iRow).Size



Next iRow

End Sub



Sub SaveEmailAttachment(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
 Dim dateFormat As String

        saveFolder = ThisWorkbook.Names("EmailAttachmentSavePath").RefersToRange.Value2
        dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd Hmm ")
    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
    Next

End Sub

Таким образом, несоответствие типов данных происходит из-за того, что я отправляю элемент папки Outlook, но получающий макрос ожидает почтовый элемент Outlook. Я знаю, что мне нужно получить оба элемента одного и того же типа, возможно, через dim, но я не совсем уверен, какой из них лучше использовать, и как мне нужно адаптировать код saveemailattachment для правильной компенсации.

Бонусный вопрос: есть ли способ очистить подпапку по имени?

1 Ответ

0 голосов
/ 24 апреля 2018

проверка для элемента TypeOf и, если это mailItem, передайте его.

If TypeOf olFolder.Items.Item(iRow) Is MailItem Then
    Call SaveEmailAttachment(olFolder.Items.Item(iRow))
end if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...