另一个愚蠢的 Outlook 附件保存到文件系统问题 (O365)

问题描述 投票:0回答:1

我对此很陌生,所以“启动引擎”很难。我已经查看了几个代码片段,但不太清楚这里需要做什么才能将收件箱或子文件夹中的电子邮件附件保存到文件系统。我试图通过将宏分配给 Outlook 默认 VBA 中的代码来启动它:Module1

我尝试了变体 1 - 但这甚至不允许我创建宏,因为我在子定义中有“MItem As Outlook.MailItem”。不知道是什么情况。

公共子SaveAtt(MItem作为Outlook.MailItem) 变暗 oAttachment 作为 Outlook.Attachment 将 sSaveFolder 变暗为字符串

' Set the folder where attachments will be saved
sSaveFolder = "C:\Temp\junk\Move"  ' Change this path to your desired folder

For Each oAttachment In MItem.Attachments
    oAttachment.SaveAsFile sSaveFolder & oAttachment.FileName
Next oAttachment

结束子

接下来我删除传递到子例程中的变量,但随后我收到一条调试消息:Obejct 变量或未设置块。请参阅随附的 JPG 图片在此处输入图片描述

顺便说一句,我最初尝试运行此例程的目的是在收件箱中选择一个单独的邮箱项目,单击宏按钮,然后让它撕裂。我不确定这是否可能。因此,我的下一个想法是将所有有趣的邮箱项目移动到收件箱的子文件夹中,并对该文件夹中的所有邮件运行一次例程(通过宏启动按钮)。

我发现了另一段代码,看起来也可以工作,但事实并非如此。

公共子 SaveAtt()

Dim MItem As MailItem
Dim oAttachment As Attachment
Dim sSaveFolder As String
Dim oDefInbox As Folder
Dim targetFolder As Folder
Dim myItems As Outlook.Items
Dim Item As Object

Set oDefInbox = Session.GetDefaultFolder(olFolderInbox)
'Set targetFolder = Session.GetDefaultFolder(olFolderInbox).Parent.Folders("Inbox")

sSaveFolder = "C:\Temp\junk\Move"

For Each MItem In oDefInbox.Items
    For Each oAttachment In MItem.Attachments
        oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
        Set oAttachment = Nothing
    Next oAttachment
Next MItem

结束子

有什么想法吗,我在这里做错了什么?我认为我遇到的主要问题是设置 Outlook 命名空间/对象和/或从宏按钮调用此子例程。

提前谢谢,W

两段预构建代码。请参阅上面的代码片段。

vba outlook macros office365 attachment
1个回答
0
投票
在第一个代码片段中,您从未初始化

MItem

 变量。如果您的目的是处理选定的项目而不是收件箱中的所有项目,请更改该行

For Each MItem In oDefInbox.Items

For Each MItem In Application.ActiveExplorer.Selection
此外,您的 

sSaveFolder

 变量必须包含尾随 
"\"

    

© www.soinside.com 2019 - 2024. All rights reserved.