【问题标题】:Scraping Outlook E-mails using VBA - type mismatch使用 VBA 抓取 Outlook 电子邮件 - 类型不匹配
【发布时间】:2020-06-24 21:08:04
【问题描述】:

我目前正在开发一个宏来抓取 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 邮件项目。我知道我需要将它们都设置为相同的项目类型,可能通过暗淡,但我不太确定哪个更好用,以及我需要如何调整 saveemailattachment 代码以适当补偿。

额外问题:有没有办法按名称刮取子文件夹?

【问题讨论】:

  • 错误是哪一行?
  • 我很抱歉 - 调用 SaveEmailAttachment(olFolder.Items.Item(iRow)) - 这是我尝试将电子邮件传递给保存宏的时候。
  • 我没有收到任何错误 - 还试图仅循环遍历带有附件的项目或所有项目?
  • 看看这是否有助于子文件夹stackoverflow.com/a/49683587/4539709
  • 并非所有电子邮件都有附件,但我认为这是用“for each objatt”行处理的

标签: excel vba outlook


【解决方案1】:

测试 TypeOf 项目,如果它是 mailItem,则通过它。

If TypeOf olFolder.Items.Item(iRow) Is MailItem Then
    Call SaveEmailAttachment(olFolder.Items.Item(iRow))
end if

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 2014-10-16
    • 1970-01-01
    • 2011-08-24
    • 2015-05-03
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多