Folder.Items

时间:2018-10-12 09:54:11

标签: excel vba outlook-vba

我想从Outlook电子邮件中下载附件。

这是我用来检索电子邮件的代码。

Set OutlookApp = New Outlook.Application
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set Folder = OutlookNamespace.GetDefaultFolder(olFolderInbox).Folders(botMailFolder)

i = 1

For Each OutlookMail In Folder.Items
    If InStr(OutlookMail.Subject, " ") <> 0 Then

        If OutlookMail.Attachments.Count > 0 Then

            Dim folderBase As String
            folderBase = botLocalFolder

            Dim newFolder As String
            newFolder = folderBase & OutlookMail.EntryID

            'OutlookItem.SenderAddress

            If Not FolderExists(newFolder) Then
                FolderCreate newFolder
            End If

            For Each a In OutlookMail.Attachments
                Dim newFileName As String
                newFileName = newFolder & "\" & a.DisplayName
                'MsgBox newFileName
                a.SaveAsFile newFileName
            Next

        End If

    End If

Next OutlookMail

问题是SenderSenderEmailAddressSenderName为空。只有SenderEmailType被填充为 EX

该代码作为Excel宏执行,我的所有发件人(用户)都是Exchange 2013用户。

如何找到电子邮件项目发件人的电子邮件地址和名称?

这是我在本地人窗口中看到的内容。 Locals window capture

框中的所有电子邮件都会发生这种情况。有人告诉我,这是因为所有人都是“交换用户”,企业管理员可以为他们设置限制。

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。我唯一可以克服的方法是在OUTLOOK VBA中运行代码(Outlook->开发人员选项卡-> vba),而不要专门将应用程序作为Outlook应用程序启动。

示例:

Dim olApp As Outlook.Application
Set olApp = CreateObject(Outlook.Application)

需要成为

Dim olApp As Application
Set olApp = Application

诀窍是不要从外部Outlook(在Excel中为IE)打开Outlook的新实例。如果您具有任何类型的Outlook Exchange安全设置,则从excel中打开Outlook将禁止您访问关键信息,例如发件人。