使用 Access VBA 从 Outlook 获取附件
Posted
技术标签:
【中文标题】使用 Access VBA 从 Outlook 获取附件【英文标题】:Getting attachment from outlook using Access VBA 【发布时间】:2011-03-16 22:34:19 【问题描述】:我在 Outlook 中创建了一个名为“报告”的文件夹。此文件夹包含在每封电子邮件中带有一个附件的电子邮件。我想使用 ACCESS VBA 将 Outlook 中“报告”文件夹中的附件保存到我计算机的本地驱动器中。这是我到目前为止的代码,但给了我错误。请帮忙:
Sub GetAttachments()
Dim ns As NameSpace
Dim Inbox As Outlook.MAPIFolder
Dim folder As Outlook.MAPIFolder
Dim Item As Object
Dim Atmt As Attachment
Dim FileName As String
Dim i As Integer
Set ns = GetNamespace("MAPI")
Set Inbox = ns.Folders.Item("Reports") // I get an error in this line says an object could not be found
i = 0
If Inbox.Items.Count = 0 Then
MsgBox "There are no messages in the Inbox.", vbInformation, _
"Nothing Found"
Exit Sub
End If
For Each Item In Inbox.Items
For Each Atmt In Item.Attachments
FileName = "C:\Automation\" & Atmt.FileName
Atmt.SaveAsFile FileName // here is another error says method is not found
i = i + 1
Next Atmt
Next Item
【问题讨论】:
【参考方案1】:您的报告文件夹在收件箱文件夹中吗?您可能需要执行以下操作:
Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set RptFolder = Inbox.Folders("Reports")
您保存附件的语法看起来是正确的(除了您的 cmets 对于 VBA 不正确)。您可以打印出您正在创建的文件名以查看它是否是有效名称。我假设您已经创建了您提到的自动化文件夹。
更新: 尝试将您的 Atmt 声明为 Outlook.Attachment。有一个 Access.Attachment 这样的东西,它没有 SaveAsFile 方法,它可能首先选择那个。如果您包含库名称,您应该会得到您需要的。
更新 2: 要访问您的 Reports 文件夹,一种方法是像您当前一样获取 Inbox 文件夹,然后获取其父文件夹,然后获取该文件夹下的 Reports 文件夹。
Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set Mailbox = Inbox.Parent
Set RptFolder = Mailbox.Folders("Reports")
另一种方法是扫描“ns”下的项目以找到以“Mailbox”开头的项目,然后获取其下的 Reports 文件夹。这似乎比获取收件箱的父级要麻烦一些。这似乎也很麻烦,但我找不到直接进入邮箱文件夹的方法。
【讨论】:
您好托德,感谢您的回答。实际上,“报告”文件夹不在我的收件箱文件夹中。它直接在邮箱下面。 为了保存附件,当我写 atmt.列表中未显示属性“SaveAsFile”。我需要为此添加任何特定的参考吗?谢谢, 我明天研究一下,为你找到解决办法。您可以尝试做的一件事是列出 ns.Folders.Items 中的值以查看您实际使用的内容。至于附件 SaveAsFile,我假设您已经添加了 Outlook 参考以达到此目的。我会查看对象浏览器以验证它是否应该存在,并检查您是否获得了所需的正确附件对象类型。我在这台机器上没有 Office,否则我会更具体。您使用的是哪个版本的 Office? 好的,谢谢托德。我正在使用 MS Office 2007。附件是 pdf 文件。【参考方案2】:替换
For Each Item In Inbox.Items
For Each Atmt In Item.Attachments
FileName = "C:\Automation\" & Atmt.FileName
Atmt.SaveAsFile FileName // here is another error says method is not found
i = i + 1
Next Atmt
用.....
For Each Item In Inbox.Items
For Each Atmt In Item.Attachments
FileName = "C:\Automation\" & Atmt.FileName
Attachments.SaveAsFile FileName // here is another error says method is not found
i = i + 1
Next Atmt
Outlook 在参考中没有 atmt 的问题,但是 MS Access 有。这应该可以解决您的问题。
戴维斯·罗杰斯
【讨论】:
【参考方案3】:替换
Dim Atmt As Attachment
与
Dim Atmt As Outlook.Attachment
这将使 Access 为 atmt 找到正确的类。
【讨论】:
以上是关于使用 Access VBA 从 Outlook 获取附件的主要内容,如果未能解决你的问题,请参考以下文章
从 Access 中的 VBA 调用时 Outlook.exe 进程未结束