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



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

1 运行良好并触发宏 2。

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

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

1

-宏1:如果我在"Relatorio"文件夹中收到一封新电子邮件,它将运行宏2

2

-宏2将"关系"变为活动状态

如果我再次运行,它就停在这里###,它继续

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

4-宏2将删除所有电子邮件

5-Macro2 将活动文件夹再次更改为收件箱

宏2:

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:UsershopnereDesktopDashboard"
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

Set objSelection = objOL.ActiveExplorer.Selection

表示当前在活动资源管理器中选择的一组 Outlook 项目对象,仅当选择了邮件时,才会调用该过程 - 将其删除。

Set objOL = CreateObject("Outlook.Application")

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

例如:

Set objMsg = Application.CreateItem(olMailItem)

最新更新