我有一个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
答案 0 :(得分:0)
<强> Set objSelection = objOL.ActiveExplorer.Selection
强>
表示当前在Active Explorer中选择的一组Outlook项目对象,仅当选择了一条消息时才会调用该过程 - 将其删除。
<强> Set objOL = CreateObject("Outlook.Application")
强>
此外,无需在Outlook VBA宏中创建新的Outlook应用程序实例,而是可以使用Application属性,
例如:
<强> Set objMsg = Application.CreateItem(olMailItem)
强>