引用共享的收件箱,错误:不允许分配给常数

时间:2019-08-28 12:00:07

标签: excel vba outlook

我有一个代码可以:

  1. 转到共享邮箱(Inquiry@company.com)下方的特定文件夹(“公司A状态报告”)。
  2. 搜索未读电子邮件和主题短语:“公司A状态报告”
  3. 接收符合条件的电子邮件,找到最后一封电子邮件,然后检查附件是否存在。
  4. 如果存在附件,则下载文件。

该代码以前可以运行,但是现在我在此行出现错误:

Set olFolder = oOlns.GetSharedDefaultFolder(olShareName, olFolderInbox) '// Inbox

错误是:

  

“不允许分配给常量”

图书馆参考文献
enter image description here

Option Explicit

Const olFolderInbox As Integer = 6
'~~> Path for the attachment
Const AttachmentPath As String = "C:\Projects\Attachments"

Sub DownloadAttachmentFirstUnreadEmail()
    Dim oOlInbFiltered As Variant
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object, oOlItmF As Object, oOlAtch As Object
    '~~> New File Name for the attachment
    Dim NewFileName As String
    NewFileName = AttachmentPath & Format(Date, "DD-MM-YYYY") & " - "
    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    'Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox).Folders("Company A status report") 'If outlook only contain the following:
    'Looks in Inbox
    '-Personal Inbox
        '-Company A status report

    Dim olShareName As Object
    'https://superuser.com/questions/1035062/how-to-run-a-macro-on-a-shared-mailbox-in-outlook-2013
    Set olShareName = oOlns.CreateRecipient("Inquiry@company.com") '// Owner's email address
    Set olFolder = oOlns.GetSharedDefaultFolder(olShareName, olFolderInbox) '// Inbox
    Set oOlInb = olFolder.Folders("Company A status report")
    'Looks in Shared Inbox
    '-Personal Inbox
    '-Inquiry Inbox (Shared)
        '-Company A status report

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    'https://stackoverflow.com/questions/30464271/find-an-email-starting-with-specific-subject-using-vba
    '~~> Filter all unread mails with the subject: Company A status report
    Dim Findvariable As String
    Findvariable = "Company A status report"
    Dim filterStr As String
    filterStr = "@SQL=" & "urn:schemas:httpmail:subject like '%" & Findvariable & "%'"
    Set oOlInbFiltered = oOlInb.Items.Restrict(filterStr)
    Set oOlInbFiltered = oOlInb.Items.Restrict("[UnRead] = True")
    'Set oOlInbFiltered = oOlInb.Items.Restrict("[UnRead] = True AND [Subject] = 'Company A status report'") - works

    'Test how many mails that are found and populated in the variable: oOlInbFiltered
    MsgBox ("Hello Test")
    Dim testp As Object
    For Each testp In oOlInbFiltered
        Debug.Print testp.Subject
    Next testp

    'Sort all the mails by ReceivedTime so the loop will start with the latest mail
    oOlInbFiltered.Sort "ReceivedTime", True 'True for Ascending. Take the last mail to the oldest. We only want the last and therefore exit the loop after we find it.
    For Each oOlItm In oOlInbFiltered
    'Debug.Print oOlItm
    '~~> Check if the email actually has an attachment
        If oOlItm.Attachments.Count <> 0 Then
            For Each oOlAtch In oOlItm.Attachments
                Debug.Print oOlAtch
                '~~> Download the attachment
                oOlAtch.SaveAsFile NewFileName & oOlAtch.FileName
                'Mark the found mail as read
                oOlItm.UnRead = False
                DoEvents
                oOlItm.Save
                Exit For
            Next
        Else
            MsgBox "The Email doesn't have an attachment"
        End If
        Exit For

    Next oOlItm

    'Open the downloaded file
    Dim wb As Workbook
    Dim FilePath As String
    FilePath = NewFileName & oOlAtch.FileName
    Set wb = Workbooks.Open(FilePath)
    'Set DataPage = wb1.Sheets("DATA")

 End Sub

1 个答案:

答案 0 :(得分:1)

对不起,还不能发表评论。

错误可能是由以下原因引起的:

Const olFolderInbox As Integer = 6

如果将其更改为常规olFolderInbox = 6,则可能会解决您的问题。

我有类似的vba,可打开收件箱,然后检查电子邮件详细信息并进行遍历。

在我这里,我设置了不同的Dim's

Dim myOlApp As New Outlook.Application
Dim filteredItems As Outlook.Items
Dim Ns As Outlook.Namespace
Dim Folder As Outlook.Folder
Dim olSharedName As Outlook.Recipient

哪里

Set Ns = myOlApp.GetNamespace("MAPI")
Set olSharedName = Ns.CreateRecipient("e'mail@domain.com") 
Set Folder = Ns.GetSharedDefaultFolder(olSharedName, olFolderInbox)

我的参考是:

References

希望我有所帮助。