【发布时间】:2019-02-27 18:32:47
【问题描述】:
我正在尝试使用 Outlook VBA 在启动时检查我的所有电子邮件,并在收到新电子邮件时查看电子邮件主题是否为“Sample Daily Data Pull”。如果电子邮件主题匹配,我希望 Outlook 将附件保存到指定的网络驱动器文件夹。这是我的代码:
在“ThisOutlookSession”中
Option Explicit
Private WithEvents inboxItems As Outlook.Items
Private Sub Application_Startup()
Dim outlookApp As Outlook.Application
Dim objectNS As Outlook.NameSpace
Set outlookApp = Outlook.Application
Set objectNS = outlookApp.GetNamespace("MAPI")
Set inboxItems = objectNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub inboxItems_ItemAdd(ByVal Item As Object)
Dim Msg As Outlook.MailItem
If TypeName(Item) = "MailItem" Then
If Item.Subject = "Sample Daily Data Pull" Then
Call SaveAttachmentsToDisk
Else
End If
End If
End Sub
我在一个模块中也有以下代码:
Public Sub SaveAttachmentsToDisk(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = "N:\SampleFilePath\"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub
这是我第一次在 Outlook VBA 中工作,所以如果这是非常基本和显而易见的事情,我深表歉意。不太确定出了什么问题,因为我没有收到任何错误消息。我所知道的是,宏没有按应有的方式将附件保存在我的网络驱动器上。
提前感谢您的帮助。
【问题讨论】:
-
请丢弃
On Error GoTo ErrorHandler和所有错误处理代码。这种类型的代码在开发过程中永远不会有帮助,并且需要进行大量修改才能适合实时系统。 -
您没有在启动时检查电子邮件。您正在启动时创建一个事件处理程序。每当有新电子邮件到达您的默认收件箱时,就会激活该事件处理程序 (
inboxItems_ItemAdd)。这可能看起来很挑剔,但在启动时检查现有电子邮件的代码会非常不同。 -
您的问题暗示某些事情没有按您的意愿工作,但您没有告诉我们出了什么问题。
-
@TonyDallimore 在我打开 Outlook 时,系统会不会将我上次会话后收到的任何电子邮件识别为“新电子邮件”并运行宏?如果不是,我想我也必须调查一下。至于现在的代码有什么问题。我不太确定,也不知道如何测试它。在这一点上我真正知道的唯一一件事是代码没有将附件放入网络文件夹中。
-
@TonyDallimore 感谢您提供有关错误处理的说明,我已删除所有相关代码。