更改Outlook中的文件夹后代码意外停止

时间:2016-02-16 21:26:54

标签: vba attachment outlook-vba

我有一个macro1,当它检测到某个文件夹中的新电子邮件时,会触发另一个宏2进入该特定文件夹,下载所有附件,删除所有电子邮件,然后返回收件箱。

Macro1运行良好并触发macro2。

问题是:macro2只运行一半。当它执行时,它只运行到将活动文件夹设置为我想要的代码的部分。在那之后,它停止了。当我再次运行macro2,它停止后立即运行并下载/删除附件。

在我看来这是一个单一的修复,但我无法弄明白。

1-Macro1:如果我在“Relatorio”文件夹中收到新邮件,它将运行macro2

2-Macro2将激活“Relatorio”

它停在这里###如果我再次跑,它会继续

3-Macro2将下载所有电子邮件和附件

4-Macro2将删除所有电子邮件

5-Macro2会将活动文件夹重新更改为收件箱

Macro2:

Dim objOL As Object 'As Outlook.Application
Dim objMsg As Object 'Outlook.MailItem
Dim objAttachments As Object 'As Outlook.Attachments
Dim objSelection As Object 'As Outlook.Selection
Dim objFolder As Object 'As Outlook.Folder

Dim i As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolderpath As String

strFolderpath = "C:\Users\hopnere\Desktop\Dashboard\"

Set objOL = CreateObject("Outlook.Application")

Set objFolder = Session.GetDefaultFolder(olFolderInbox).Folders("Relatorio") 
Set objOL.ActiveExplorer.CurrentFolder = objFolder

### stops here ###
Set objMsg = objOL.CreateItem(olMailItem)

Set objSelection = objOL.ActiveExplorer.Selection


For Each objMsg In objFolder.Items

Set objAttachments = objMsg.Attachments
    lngCount = objAttachments.Count 'check if there is an email with attachment
    MsgBox lngCount
    If lngCount > 0 Then


        For i = lngCount To 1 Step -1
        i = lngCount

            strFile = strFolderpath & "Backend.xls" 'attachment destiny folder

            ' saves attachment
            objAttachments.item(i).SaveAsFile strFile

            ' Delete attachment
            objAttachments.item(i).Delete
            ' delete email
            objMsg.Delete

        Next i

    End If

Next

Set objFolder = Session.GetDefaultFolder(olFolderInbox) 'setting inbox active
Set objOL.ActiveExplorer.CurrentFolder = objFolder


ExitSub:

Set objAttachments = Nothing
Set objMsg = Nothing
Set objSelection = Nothing
Set objOL = Nothing
Set objFolder = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

<强> Set objSelection = objOL.ActiveExplorer.Selection

表示当前在Active Explorer中选择的一组Outlook项目对象,仅当选择了一条消息时才会调用该过程 - 将其删除。

<强> Set objOL = CreateObject("Outlook.Application")

此外,无需在Outlook VBA宏中创建新的Outlook应用程序实例,而是可以使用Application属性,

例如:

<强> Set objMsg = Application.CreateItem(olMailItem)